STM32定时器中断的应用
一、定时器
1、STM32定时器
字面上理解是用来定时的机器,是存在于STM32单片机中的一个外设。STM32总共有8个定时器,分别是2个高级定时器(TIM1、TIM8),4个通用定时器(TIM2、TIM3、TIM4、TIM5)和2个基本定时器(TIM5、TIM6)。
2、通用定时器功能
STM32的众多定时器中我们使用最多的是高级定时器和通用定时器,而高级定时器一般也是用作通用定时器的功能,其功能和特点包括:
-
位于低速的APB1总线上(APB1)
-
16 位向上、向下、向上/向下(中心对齐)计数模式,自动装载计数器(TIMx_CNT)。
-
16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数 为 1~65535 之间的任意数值。
-
4 个独立通道(TIMx_CH1~4),这些通道可以用来作为:
① 输入捕获
② 输出比较
③ PWM 生成(边缘或中间对齐模式)
④ 单脉冲模式输出
3、计数模式
通用定时器可以向上计数、向下计数、向上向下双向计数模式。
①向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。
②向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。③中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。
4、定时时钟计算方法
Tout = ((arr+1)(psc+1))/Tclk ;
Tclk:定时器的输入时钟频率(单位MHZ)
Tout:定时器溢出时间(单位为us)
arr: 计数装载值
psc: 时钟分频系数
二、CubeMX创建工程项目
1、芯片选取
自行选择需要的芯片

2、时钟配置
选择外部时钟,选择时钟源


3、TIM2中断初始化
TIM2选择外部时钟作为时钟源,APB1时钟频率为72M,经过PSC72分频后定时器时钟频率为1Mhz,计数周期5000计满时间为0.005S,计数方式为向上计数。

打开定时器中断

4、外设模块初始化
设置PA3为GPIO_Output

初始化USA1串口
然后创建工程在keil中打开。
三、keil中修改编译
1、修改代码
生成工程后,打开,添加中断响应之后所需的一些代码。在main.c文件中添加如下内容
extern TIM_HandleTypeDef htim2;
extern UART_HandleTypeDef huart1;
uint8_t hello[]="hello windows!\r\n"; //串口发送字符串void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{static uint16_t time_cnt1 =0;static uint16_t time_cnt2 =0;time_cnt1++;time_cnt2++;if(time_cnt1==400){HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_3);time_cnt1=0;}if(time_cnt2==1000){HAL_UART_Transmit(&huart1,hello,sizeof(hello),100);time_cnt2=0;}
}
HAL_TIM_Base_Start_IT(&htim2); //开启定时器2中断,添加到main函数里面
然后进行编译烧录。
2、效果展示
22
四、总结
定时器的功能非常强大而且复杂,在使用过程中,应该了解其原理。定时器中断则是通过时钟定时计数达到设定值时触发中断,进行中断服务函数的处理任务,定时器中断相比软件延时更加准确。
参考文章
http://www.mcublog.cn/stm32/2021_01/stm32cubemx-dingshiqi-led/
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
