一,通用定时器基本介绍
二,配置相关项
1,时钟源。
一般我们选择内部时钟,TIM3通过APB1得到。
2,主从模式和触发源。
用到的比较少,暂时不考虑,选disable。
3,输出通道。
如果需要输入捕获或PWM输出等功能,映射到GPIO引脚,开启相应功能,后面还有一些参数设置。我这里只做内部定时用,所以先禁止。
三,参数设置,"Parameter Settings"。
使能内部时钟之后的参数设置
Prtscaler (定时器分频系数) : 7199 (将定时器时钟分频,做计数的频率)
Counter Mode(计数模式) Up(向上计数模式)
Counter Period(自动重装载值) : 4999 (到达此值,重新计数)
CKD(时钟分频因子) : No Division 不分频
选项: 可以选择二分频和四分频
auto-reload-preload(自动重装载) : Enable 使能
TRGO Parameters 触发输出 (TRGO) 不使能 与本节无关,之后做详细介绍
TRGO: 定时器的触发信号输出 在定时器的定时时间到达的时候输出一个信号(如:定时器更新产生TRGO信号来触发ADC的同步转换,)
参考来源:
(2条消息) STM32cubeIDE学习汇总(三)----利用定时器实现定时取反LED 控制亮灭_辽G.默语的博客-CSDN博客_cubeide 定时器
使能中断
三,应用实例
定时500ms,触发中断,重新计数
1,确定定时器的时钟频率
2,根据公式求计时时间。
arr 为自动重装载值
psc为定时器分频系数
Tout = (4999+1)*(4788+1)/(48000000) = 0.5 单位 s
四,程序
1,设置好以后,自动生成初始化代码MX_TIM3_Init()和中断void TIM3_IRQHandler(void)函数
位置分别如下
2, 在main.c中,添加中断调用函数
//定时�?????3中断服务函数调用
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim==(&htim3))
{
timeout++;
LED0_Toggle;
}
}
3,使能定时器中断
在main.c中添加,注意添加的位置,在用户区添加,不然会覆盖掉
HAL_TIM_Base_Start_IT(&htim3); //使能定时器3和定时器3更新中断:TIM_IT_UPDATE
4,使用,进行计时
__HAL_TIM_SET_COUNTER(&htim3,0);//重设TIM3定时器的计数器�??
timeout=0;
delay_ms(100);
time=__HAL_TIM_GET_COUNTER(&htim3)+(uint32_t)timeout*50000;//计算�????用时�????
printf("time = %0.3fms\r\n",((float)time*10)/1000);