一般我们选择内部时钟,TIM3通过APB1得到。
用到的比较少,暂时不考虑,选disable。
如果需要输入捕获或PWM输出等功能,映射到GPIO引脚,开启相应功能,后面还有一些参数设置。我这里只做内部定时用,所以先禁止。
使能内部时钟之后的参数设置
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,确定定时器的时钟频率
arr 为自动重装载值
psc为定时器分频系数
Tout = (4999+1)*(4788+1)/(48000000) = 0.5 单位 s
位置分别如下
- //定时�?????3中断服务函数调用
- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
- {
- if(htim==(&htim3))
- {
- timeout++;
- LED0_Toggle;
- }
- }
在main.c中添加,注意添加的位置,在用户区添加,不然会覆盖掉
HAL_TIM_Base_Start_IT(&htim3); //使能定时器3和定时器3更新中断:TIM_IT_UPDATE
- __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);