基础(二)-STM32定时器配置与PWM周期

STM32定时器与PWM


简介:本文主要梳理定时器PWM配置和定时器中断周期计算


系列链接:

基础(一)-STM32时钟树配置
https://www.cnblogs.com/renminwansui-Motor/p/19978752
基础(二)-STM32定时器配置与PWM、中断周期
https://www.cnblogs.com/renminwansui-Motor/p/19980624

一、定时器时钟配置

高级定时器具有捕获/比较通道和互补输出,通用定时器只有捕获/比较通道,基本定时器没有以上两者。


以STM32F405RGT6为例,本文讲解定高级定时器 TIM8。

图1所示, 定时器TIM8 挂载在APB2总线上。

图2所示,APB2总线上有两类,一类外设时钟 peripheral clocks (MHz),另一类定时器时钟 timer clocks (MHz)。

APB2外设时钟(peripheral clock)频率 = 168MHz(SYSCLK系统时钟) / 2(APB2预分频)= 84MHz,

定时器时钟(timer clocks )则是要再 × 2,也就还是168 MHz。

image-20260506134628832

image-20260506134845847

二、PWM周期

一般来讲,

PWM频率 = 主频 / (TIM_Prescaler+1)(预分频系数+1,也叫PSC)/(TIM_Period)(自动重装载值,也叫ARR)

\[PWM频率\text{ }=\frac{主频}{(TIM\_Prescaler+1)*TIM\_Period} \]

但是!!!要注意实际配置TIM_CounterMode定时器技术模式是哪种,

定时器计数方式分为:

  向上计数,计数:0 → ARR

  向下计数,计数:ARR → 0

  中心对齐模式,计数:0 → ARR → 0

中心对齐模式 又分为3种:

  模式1:下溢事件产生更新事件(UEV),只在向下计数到 0 时触发

  模式2:上溢事件产生更新事件(UEV),只在向上计数到 ARR 时触发

  模式3:上溢/下溢事件均产生更新事件(UEV),在计数到 0 和ARR 时都触发

其中向上/向下计数适用原公式,中心对齐模式下,TIM_Period,即ARR值要*2。

image-20260506142516876


这里代码示例是 中心对齐模式3,也就是 PWM频率=168 MHz / 1 / (3500*2) = 24 kHz,在电机控制中,这个也是开关频率。
//定时器8配置	
TIM_DeInit(TIM8);
TIM_TimeBaseInitStructure.TIM_Prescaler = 0;		//预分频器(0+1)
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned3;	//中心对齐模式3
TIM_TimeBaseInitStructure.TIM_Period = 3500;     //168M/(3500*2)=24KHz,ARR
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 2;      //RCR重复计数器,每(2+1)次
TIM_TimeBaseInit(TIM8, &TIM_TimeBaseInitStructure);

//。。。 。。。
NVIC_InitStructure.NVIC_IRQChannel = TIM8_UP_TIM13_IRQn; //中断更新通道
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;		//NVIC使能(类似总开关)
NVIC_Init(&NVIC_InitStructure);
//。。。 。。。
TIM_SelectOutputTrigger(TIM8, TIM_TRGOSource_Update);	  //定时器8选择(更新事件)作为触发输出信号
TIM_ITConfig(TIM8, TIM_IT_Update, ENABLE);    //使能中断源(类似具体开关)

// 。。。 。。。
void TIM8_UP_TIM13_IRQHandler(void)
{
    //。。。 。。。
}

三、定时器中断

示例代码中TIM8不止是pwm输出,还设置了TRGO触发中断。

TIM_RepetitionCounter(RCR重复计数器)设置2,也就是每(2+1)次,即每3个UEV触发事件,才进入一次中断。

但是!!之前我们说了中心对齐模式3:上溢/下溢事件均产生更新事件(UEV),在计数到 0 和ARR 时都触发,也就是模式3下,

一个pwm周期(24kHz)会触发2次UEV,就是说进入中断TIM8_UP_TIM13_IRQHandler函数的频率为

中断频率 = 24 kHz *2 / 3 =16 kHz。


结尾:如有理解或书写错误,欢迎各位看官指出,感谢!

posted @ 2026-05-06 15:46  f12138  阅读(71)  评论(0)    收藏  举报