其他分享
首页 > 其他分享> > stm32f031 hal pwm周期频率计算和配置以及无输出的解决办法

stm32f031 hal pwm周期频率计算和配置以及无输出的解决办法

作者:互联网

单片机内部时钟pll到48

arr即 hal的AutoRload Register 这里我配置为499

psc即hal的Prescaler这里我配置为47

输出频率计算办法

那么频率最终就是Fclk/arr+1(1000 000/500=2000hz)

溢出时间Tout=((arr+1)*(psc+1))/Fclk 。单位 us.

Fclk单位是Mhz

这里500*48/48=500us;

 

 

 

 

 

 但是死活没有输出,这就很奇怪

前几天用还好好好呢

挠破头也没搞定,后来把前几天的代码片段抄过来,可以了,经过仔细对比发现

原来是用了,选了HAL_TIMEx_PWMN_Start ,习惯输入前几个字母然后自动补全,于是乎,

 这两个函数没看清

HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);这个可以
HAL_TIMEx_PWMN_Start(&htim17,TIM_CHANNEL_1);这个不可以

 

然后根据需要调节占空比,hal没有提供函数,自己封装一个吧

void TIM_SetTIM17duty(uint16_t compare)
{
    TIM17->CCR1=compare;//tim17只有一个通道
}

 

 

占空比0

 

 占空比100%,并不能实现全部高电平,还会有一个小的低电平,1us

 

 解决办法就是让ARR多增加1,arr现在配置为499,那么就让他加到500,这样就可以100%占空比了

 

 

 

对于f031只有tim1才有n输出,其他的都是没有的

但是研究了一下

选中为了某通道就无法选中某通道的N

标签:HAL,arr,hal,TIM,Fclk,占空比,pwm,stm32f031
来源: https://www.cnblogs.com/jnhs/p/15759165.html