STM32定时器配置与PWM实战指南
1.定时器的分类:
1)基本定时器:TIM6,TIM7
16位自动重装载计数器,向上计数
无捕获/PWM输出
用于DAC触发,简单的定时
2)通用定时器:TIM2,TIM3,TIM4,TIM5
16位/32位自动重装载计数器,向上,向下,中央对齐计数模式
有捕获/PWM输出,最常用的功能,用于控制电机转速、灯光亮度等
3)高级定时器:TIM1,TIM8
16位自动重装载计数器,向上,向下,中央对齐计数模式
2.TIM的配置步骤:
使用基本定时器实现延时函数的方法:
1. 激活TIMx的时钟
void RCC_APB1PeriphClockCmd (uint32_t RCC_APB1Periph, FunctionalState NewState);
- 根据定时时间,设定计数频率和计数个数,最终操作预分频寄存器和自动重装载寄存器
(包含产生更新事件)
void TIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef *TIM_TimeBaseInitStruct)
清除更新标志
void TIM_ClearFlag (TIM_TypeDef *TIMx, uint16_t TIM_FLAG)
3. 把计数器清零
void TIM_SetCounter (TIM_TypeDef *TIMx, uint32_t Counter)
4. 启动计数器
void TIM_Cmd (TIM_TypeDef *TIMx, FunctionalState NewState)
5. 等待计数完成
FlagStatus TIM_GetFlagStatus (TIM_TypeDef *TIMx, uint16_t TIM_FLAG)
6. 停止计数,清除更新标志
void TIM_Cmd (TIM_TypeDef *TIMx, FunctionalState NewState)
void TIM_ClearFlag (TIM_TypeDef *TIMx, uint16_t TIM_FLAG)
3.TIM定时器实战:
void TIM6_delayms(int t)
{
//1. 激活TIMx的时钟
RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM6, ENABLE);
//2.根据定时时间,设定计数频率和计数个数,最终操作预分频寄存器和自动重装载寄存器
//(包含产生更新事件)
TIM_TimeBaseInitTypeDef tim_TimeBaseInitStruct;
TIM_TimeBaseStructInit (&tim_TimeBaseInitStruct); //对这个结构体变量初始化(按照寄存器默认值来)
tim_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up ;//TIM6和TIM7是基本定时器,只能向上计数
tim_TimeBaseInitStruct.TIM_Period = xms * 10 - 1; //ARR寄存器值:最终计数个数xms*10,对应定时时间与参数一致
tim_TimeBaseInitStruct.TIM_Prescaler = 7200 - 1; //PSC寄存器值:最终计数频率72M/7200 == 10000Hz
TIM_TimeBaseInit (TIM6, &tim_TimeBaseInitStruct);
//清除更新标志
TIM_ClearFlag (TIM6, TIM_FLAG_Update);
//3. 把计数器清零
TIM_SetCounter (TIM6, 0);
//4. 启动计数器
TIM_Cmd (TIM6, ENABLE);
//5. 等待计数完成
while( SET != TIM_GetFlagStatus (TIM6, TIM_FLAG_Update) );
//6. 停止计数,清除更新标志
TIM_Cmd (TIM6, DISABLE);
TIM_ClearFlag (TIM6, TIM_FLAG_Update);
}
4.PWM输出的用途:
PWM的全称是脉冲宽度调制(Pulse-width modulation),是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式;
主要用于驱动电机,STM32将PWM信号提供给电机驱动芯片,然后电机驱动芯片进一步控制电机。
5.配置TIM的PWM输出需要关注哪些参数
1)溢出时间:(PWM中每个周期的时间)TIMx->ARR,定时器的重装载值寄存器,影响计数一圈的计数个数。TIMx->PSC,定时器的预分频寄存器,影响计数的频率
2)有效电平:高电平 / 低电平取,决于设计需求

3)占空比:在一个PWM周期内,有效电平的占比;TIMx->CCRn,定时器通道n的比较值寄存器;TIMx->ARR
4)PWM输出模式:PWM1模式 / PWM2模式
5)TIM的输出通道工作模式中的PWM1和PWM2模式有什么区别?
(1)在向上计数的情况下
(假设ARR值999,CCRn值是300,有效电平为高电平)
PWM1模式:当CNT < CCRn时,TIMx_CHn输出有效电平;
当CNT >=CCRn时,TIMx_CHn输出无效电平;
按照假设情况:每个周期内,前30%时间输出高电平,后70%时间输出低电平
PWM2模式:当CNT < CCRn时,TIMx_CHn输出无效电平;
当CNT >=CCRn时,TIMx_CHn输出有效电平;
更多推荐
所有评论(0)