STM32CubeMx开发环境
STM32定时器
利用usrat模板工程(下面第三行,手动狗头)
实验程序已经发布到百度网盘,本文末有链接可以自取
STM32定时器查看这篇博客STM32定时器
模板内含usart1重定向https://pan.baidu.com/s/1qzuLn5HftfkaZjsyCmp1Ow?pwd=0000
工具Clion和STM32CubeMx
实验程序已经发布到百度网盘,本文末有链接可以自取
STM32定时器查看这篇博客STM32定时器
https://pan.baidu.com/s/1qzuLn5HftfkaZjsyCmp1Ow?pwd=0000

使用Clion打开工程

如果什么都不修改 ? 为了刷新一下工程 : 增加一些外设;
小小的逻辑你应该能看的懂吧(手动狗头)

RCC、时钟树和调试模式都已经配好,如需修改请到:Clion和STM32CubeMx新建项目查看

选择TIM2
定时器时钟选择内部时钟
Clock Source(时钟来源)

Prtscaler (定时器分频系数) : 7199
Counter Mode(计数模式) Up(向上计数模式)
Counter Period(自动重装载值) : 4999
CKD(时钟分频因子) : No Division 不分频
auto-reload-preload(自动重装载) : Enable 使能
TRGO Parameters 触发输出 (TRGO) 不使能
TRGO: 定时器的触发信号输出 在定时器的定时时间到达的时候输出一个信号(如:定时器更新产生TRGO信号来触发ADC的同步转换,)

这两个为定时器主从模式配置,很少用到,我们用不到,所以全部关闭
使能定时器中断:

这里我们配置的是Time1是一个高级定时器所以具有刹车功能,(但是我们不用)
启动溢出中断
定时器溢出时间:

这里我们 arr=4999 psc=7199 Tclk=72Mhz Tout = (5000*7200)/72 us = 500ms
设置完MCU的各个配置之后,第三个就是工程文件的设置了



配置文件什么的都已经在工程模板里面配置完毕,大家直接使用即可,Clion和STM32CubeMx新建项目这里也有配置代码

HAL_TIM_IRQHandler(&htim1);
定时器中断处理函数 在stm32f4xx_it.c的 TIM1_IRQHandler()定时器中断服务函数中

这个函数的具体作用是判断中断是否正常,然后判断产生的是哪一类定时器中断(溢出中断/PWM中断…),然后进入相应的中断回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
在HAL库中,每进行完一个中断,并不会立刻退出,而是会进入到中断回调函数中,
这里我们是使用定时器溢出中断回调函数

定时器溢出时间为500ms,LED点亮延时500ms闪烁
在main.c主函数上方初始化使能定时器1
/*使能定时器1中断*/
HAL_TIM_Base_Start_IT(&htim1);
在main.c主函数下方添加中断回调函数
/*中断回调函数*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
static unsigned char ledState = 0;
if (htim == (&htim1)) {
if (ledState == 0)
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
else
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
ledState = !ledState;
}
}

链接:https://pan.baidu.com/s/1urTtEBtaYhP6-0SeweSMXQ 提取码:0000