单片机内部时钟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