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串口![RT
然后创建工程在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/


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部