【STM32 HAL库】TIM定时器与CubeMX配置
前言
本文为笔者学习TIM定时器知识的总结与复盘,基于keysking的系列视频,欢迎大家纠正文中错误
TIM定时器基本理论
定时器的本质就是计数器!
定时器的基本计数功能可以通过不同计数方式的组合,实现普通定时、脉冲捕获、测量PWM占空比、输出PWM、编码器测速等功能
定时器的基本作用
设定一个时间,时间到了后,通过中断通知STM32执行某些程序
定时器分类
基本定时器
- 基本的时间测量
- 产生周期性中断
通用定时器
- 基本定时器功能
- 输入捕获
- 输出比较 生成PWM
高级定时器
- 通用定时器功能
- 高精度工业电机控制
定时器的外部时钟与从模式
从模式:
外部时钟模式1
以外部输入信号作为外部时钟源
复位模式
计数器更新 重新计数 触发更新中断
门模式
根据电平 暂停或继续计数
触发模式
启动计数 常配合单脉冲
TIM基本定时器
理论
基本定时功能与周期性产生中断
影子寄存器
预分频器与自动重装载寄存器控制着他们的影子寄存器
在当前计数周期完成后 寄存器将新的值给到影子寄存器中 更新完成
应用
CubeMX配置
开启TIM中断
若要每过一个计时周期进入一次中断并完成某项任务 则需开启TIM中断
定时器溢出时间 T(一个计时周期
触发事件选择见该Blog
一般情况下 :
激活 --> 根据计时需求配置PSC ARR --> 使能自动重装载寄存器的影子寄存器 --> 其他默认
Keil5代码
启动定时器计时功能 + 开启定时器中断
HAL_TIM_Base_Start_IT(TIM_Handle TypeDef* htim);
“定时器溢出”中断回调函数
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) {
if(htim == &htim4){
HAL UART Transmit IT(&huart2,(uint8 t*)data, strlen(data));}
}
其他函数
//获取当前计数器的值
__HAL_TIM_GET_COUNTER(TIM_Handle TypeDef* htim);
//设置计数器的值
__HAL_TIM_SET_COUNTER(TIM_Handle TypeDef* htim);
//获取重装载寄存器的值
__HAL_TIM_GET_AUTORELOAD(TIM_Handle TypeDef* htim);
//设置重装载寄存器的值
__HAL_TIM_SET_AUTORELOAD(TIM_Handle TypeDef* htim);
//设置预分频器的值
__HAL_TIM_SET_PRESCALER(TIM_Handle TypeDef* htim);
输入捕获
作为精确的计时器,检测到输入信号电平变化(上升沿或下降沿,并记录当时时间点(记录到捕获寄存器中供程序读取
理论
应用
CubeMX配置
Keil5代码
开启输入捕获
HAL_TIM_IC_Start(TIM_Handle TypeDef* htim,uint32_t Channel);
开启输入捕获 + 开启输入捕获中断
HAL_TIM_IC_Start_IT(TIM_Handle TypeDef* htim,uint32_t Channel);
“输入捕获”中断回调函数
void HAL_TIM_IC_Capturecallback(TIM_HandleTypeDef *htim){
//养成好习惯 先判断中断源是否来自TIM1的通道4
if (htim == &htim1 && htim>Channel==HAL_TIM_ACTIVE_CHANNEL 4){
//逻辑代码
}
}
PWM
理论
PWM信号频率
应用
CubeMX配置
Keil5代码
开启PWM
HAL_TIM_PWM_Start(TIM_Handle TypeDef* htim,uint32_t Channel);
停止PWM
HAL_TIM_PWM_Stop(TIM_Handle TypeDef* htim,uint32_t Channel);
设置比较寄存器值
__HAL_TIM_SET_COMPARE(TIM_Handle TypeDef* htim,uint32_t Channel,COMPARE)
标签:TypeDef,定时器,HAL,htim,STM32,TIM,Handle
From: https://blog.csdn.net/AbaAbaxxx_/article/details/140715295