使用场景
RTT 5.0.0
STM32F429
PWM14通道1
硬件上使用开漏输出
具体问题
1.初始化设置pwm占空比
直接设置占空比为100%,如图

定时器寄存器截图如下

代码如下
static void timer_callback(void *parameter)
{
volatile float duty = 0;//占空比
volatile uint32_t output = 0;
output = 1 * PERIOD;
return rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, PERIOD, output);
}
使用裸机上的驱动移植到RTT上运行
定时器寄存器截图如下

占空比100%

问题原因分析
RTT的STM32的PWM驱动代码
想要PWM输出高电平,占空比设置100%。就得设置PWM脉宽大于周期时间。
RTT的STM32的PWM驱动代码在PWM脉宽大于周期时间时,强制等于周期时间。
这样会导致计数值会计数到周期时间,即CCR=CNT时,导致电平拉低。

如STM32资料所示,当CCR>ARR时,才能输出完整的高电平。
CCR=ARR时,会有一个脉冲发出

对应强制等于周期时间代码如下,最大只能为CCR=ARR,所以无法输出高电平
rt_err_t drv_pwm_set()
{
........
else if (pulse > period)
{
pulse = period;
}
.......
}
应修改为判断脉宽大于等于周期时,即默认用户需要使用高电平,输出占空比100%时
让CCR>ARR,输出高电平
rt_err_t drv_pwm_set()
{
........
else if (pulse >= period)
{
pulse = period + 1;
}
.......
}
举报
举报
举报
举报
举报
举报
更多回帖