对于STM32来说,PWM波简单来说就是占空比可调频率固定的方形波,当然这里的频率是在配置好之后固定,并不是说频率不可调。下图就展示了一个频率为800,占空比为2:3的PWM波(图1)。

stm32cubemx pwm无输出 stm32的pwm输出引脚_寄存器



在实际的项目中,会应用到PWM波的一般是电机方面或者LED灯控制方面,当涉及到LED控制的时候经常会遇到引脚不够用的现象,不过STM32有个引脚重映射功能,可以讲原先默认的外设引脚重映射到别的地方,但是同时又有一个小缺点,就是在映射的时候会有局限,许多情况下不能单个引脚映射,这就会导致在项目应用中很容易导致引脚分布需要重庆做大的调整的事情发生。针对STM32定时器的引脚重映射的相关情况可参考《stm32中文参考手册》8.3.7。这里

给大家定时器2的图(图2)。

stm32cubemx pwm无输出 stm32的pwm输出引脚_引脚_02



STM32F1系列芯片中,TIM1最多能提供多达7路PWM波,通道4没有反向输出对应的引脚。同时要注意的是,通道1、2、3的反向输出和正向输出脚共用一个比较捕获寄存器,所以在设置占空比的时候是相互关联的,不能像普通的PWM脚都输出想要的占空比的PWM波。


功能实现:


1、配置引脚,假设现在要用tim2输出3路PWM,这引脚配置如图(图3);

stm32cubemx pwm无输出 stm32的pwm输出引脚_定时器 PWM_03



2、模式配置,需要用到两个配置结构体TIM_TimeBaseInitTypeDef和TIM_OCInitTypeDef,结构体TIM_TimeBaseInitTypeDef是用来配置定时器的基本设置的,比较主要的有三个变量,预分频值(72M时钟要进行多少分频来作为该定时器的时钟),自动重装载值(计数器到达多大值之后重头开始计数),计数方向(向上或者向下)。结构体TIM_OCInitTypeDef中可以选择两种模式,这两种模式和参数TIM_OCPolarity的值相互结合,能输出自己想要的效果,在应用的时候需要各自测试一下。然后调用TIM_OC2Init函数实现输出配置(图4)。

stm32cubemx pwm无输出 stm32的pwm输出引脚_stm32cubemx pwm无输出_04



3、然后调用TIM_OC2PreloadConfig函数实现某个通道上的捕获比较寄存器使能,每个通道需要独立配置(图5);

stm32cubemx pwm无输出 stm32的pwm输出引脚_stm32_05



4、调用TIM_SetCompare2函数设置占空比(图6),

stm32cubemx pwm无输出 stm32的pwm输出引脚_引脚_06



5、使能定时器2。



6、在主函数中主要调用的也是设置占空比的函数来实现电机或者灯光的控制。