使用STM32CubeMX配置工程+MDKARM编写代码实现PWM功能
一、PWM简介
脉冲宽度调制(Pulse width modulation,PWM)技术。
是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单来说就是对脉冲宽度的控制。
在单片机上就是通过控制引脚电平的周期性通断,来产生规律的矩形波。并且周期和脉冲的宽度都是可调的。
占空比:是指在一个脉冲循环内,通电时间相对于总时间所占的比例。(高电平时间/一个周期的时间)
占空比就是对脉冲宽度的描述。
二、PWM相关寄存器
脉冲宽度调制模式可以生成一个信号
TIMx_ARR 寄存器值决定信号频率
TIMx_CCRx 寄存器值决定占空比
TIMx_CCMRx 寄存器中的 OCxM 位决定PWM模式,110表示模式1,111表示模式2。
MODE1,小于比较值时候为有效电平
MODE2,大于比较值时候为有效电平
TIMx_CR1 寄存器中的 OPM 位,设置为 1,可选择单脉冲模式。
三、STM32CubeMX配置
STM32的PWM功能是基于定时器的,这是因为产生PWM波需要计时(计数),其中包括PWM波的周期,以及产生不同占空比的高电平所需要的不同时间。
先使能TIM14定时器
单脉冲模式:计数器可以在一个激励信号的触发下启动,并可在一段可编程的延时后产生一个脉宽可编程的脉冲。
复用PF9引脚为定时器14通道1
设置PF9的标签
使能NVIC
和普通定时器一样计算定时时间,产生周期性信号并自动重装载。
PWM模式:MODE1,小于比较值时候为有效电平。MODE2,大于比较值时候为有效电平
Pulse:设置比较值。有效电平所占的计数,可以调节占空比
如果enable,任何写入TIMx_CCRx事件到来,都不会打断当前计数周期,只能等到计完数了(更新事件),才把TIMx_CCRx传送至当前计数寄存器。如果disable,任何写入TIMx_CCRx事件到来,都会打断当前计数周期,TIMx_CCRx的值传送至当前计数寄存器。
CH polarity:通道极性,如果是HIGH,说明高电平是有效电平(输出高电平时候表示有效电平)。
该程序实现的是,使用TIM14的通道1调节占空比实现LED的闪烁。调节不同的占空比可以改变LED的闪烁。
四、所用HAL库函数
//在初始化部分使用:启动PWM
HAL_TIM_PWM_Start(&htim14,TIM_CHANNEL_1); //启动PWM
//在需要调节占空比的时候使用,改变占空比
__HAL_TIM_SetCompare(&htim14,TIM_CHANNEL_1,9900);
五、参考资料
《STM32F4xx中文参考手册》
《STM32F4开发指南-HAL库版本_V1.2》