STM32-HAL库-TIMx学习
Posted qu-yang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32-HAL库-TIMx学习相关的知识,希望对你有一定的参考价值。
STM32的八个十六位定时器
基本定时器:TIM6,TIM7 (APB1总线)
通用定时器:TIM2,TIM3,TIM4,TIM5 (APB1总线)
高级计时器:TIM1,TIM8 (APB2总线)
时基单元
计数器寄存器 (TIMx_CNT)
预分频器寄存器 (TIMx_PSC)
自动装载寄存器 (TIMx_ARR)
重复次数寄存器 (TIMx_RCR)
计数模式
递增计数模式:计数器从 0 计数到自动重载值,然后重新从 0 开始计数并生成计数器上溢事件。
递减计数模式:计数器从自动重载值开始递减到 0,然后重新从自动重载值开始计数并生成计数器下溢事件。
中心对齐模式:计数器从 0 开始计数到自动重载值 – 1 ,生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从0 开始重新计数
定时一秒示例
说明
以下分别以TIM1,TIM2为例
APB1 Timer clocks 以 36 MHz 为例
APB2 Timer clocks 以 72 MHz 为例
设置内部时钟源(在STM32CubeMX中设置)
Clock Source->Internal Clock
开启中断(在STM32CubeMX中设置)
TIM1 -> NVIC Settings -> TIM1 update interrupt -> Enabled
TIM2 -> NVIC Settings -> TIM2 global interrupt -> Enabled
配置定时器(在STM32CubeMX中设置)
定时频率 = 定时器时钟 / ( (预分频 +1) / (计数值 +1) ) Hz
定时时间 = 1 / 定时频率 s
TIM1
Prescaler(预分频)——7199
Counter Period(计数值)——9999
auto-reload preload(是否重装定时器)——Enable
TIM2
Prescaler(预分频)——35999
Counter Period(计数值)——999
auto-reload preload(是否重装定时器)——Enable
最终应用
在 main.c 中的 USER CODE BEGIN 2 中添加
HAL_TIM_Base_Start_IT(&htim1); //定时器1使能
HAL_TIM_Base_Start_IT(&htim2); //定时器2使能
在 main.c 中的 USER CODE BEGIN 4 下添加中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == htim1.Instance)//确定是哪个定时器
{ //定时器1中断业务 }
else if(htim-> Instance == htim2.Instance)
{ //定时器2中断业务 }
}
以上是关于STM32-HAL库-TIMx学习的主要内容,如果未能解决你的问题,请参考以下文章
STM32 HAL库学习系列第9篇---NVIC按键外部中断函数
书籍连载《STM32 HAL 库开发实战指南—基于F7》-第一章
STM32 HAL库学习系列第7篇---定时器TIM 输入捕获功能