PWM输出实验
一. 通用定时器PWM概述
二. 常用寄存器和库函数配置
三. 编写PWM输出实验
1.1 STM32 PWM工作过程
STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出,这样,STM32 最多可以同时产生 30 路 PWM 输出。
CNT计数器计的值超过CCRx的值时候,输出高电平,低于时输出低电平。周期是由ARR决定的,如果CCRx的值非常小,那么低电平的输出时间就非常短,如果CCRx的值非常大,那么低电平的输出时间就非常长。
有效电平:高电平
无效电平:低电平
高电平有效:高电平可以使能相应功能
低电平有效:低电平可以使能相应功能
以通道1为例:
CCR1:捕获比较(值)寄存器(x=1,2,3,4):设置比较值。
CCMR1: OC1M[2:0]位:对于PWM方式下,用于设置PWM模式1【110】或者PWM模式2【111】
CCER:CC1P位:输入/捕获1输出极性。0:高电平有效,1:低电平有效。
CCER:CC1E位:输入/捕获1输出使能。0:关闭,1:打开。
设置CCR1(捕获比较(值)寄存器)设置设置比较值,然后通过设置CCMR1: OC1M[2:0]位以及CCER:CC1P位(输入/捕获1输出极性)来设置高低电平的输出模式 即 (先比较然后控制输出。)
1.2 PWM输出模式
寄存器TIMx_CCMR1的OC1M[2:0]位来分析:
对于模式1:
不管是向上计数还是向下,只要TIMx_CNT<TIMx_CCR1时,就为有效电平。
1.3 总结
2.1 PWM寄存器配置
预装载寄存器及自动重装载的预装载寄存器:
void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
2.2 PWM输出库函数配置
void TIM_OCxInit(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
typedef struct
{
uint16_t TIM_OCMode; //PWM模式1或者模式2
uint16_t TIM_Output