一、定时器
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、效果展示
四、总结
定时器的功能非常强大而且复杂,在使用过程中,应该了解其原理。定时器中断则是通过时钟定时计数达到设定值时触发中断,进行中断服务函数的处理任务,定时器中断相比软件延时更加准确。
参考文章
http://www.mcublog.cn/stm32/2021_01/stm32cubemx-dingshiqi-led/
|