STM32CubeMX配置生成代码:
配置注意事项
想要更加精确控制,并更加满足应用层的需求,就需要自己一步一步深入了解原理。下面,总结几点常见的问题。
1、引脚映射
如果你使用的引脚需要映射,就需要配置对应的参数。
比如STM32F1使用PB11(需要查看数据手册):
需要增加对应的“映射”代码:
//复用功能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
//定时器(PWM)引脚映射
GPIO_PinRemapConfig(GPIO_FullRemap_TIM2, ENABLE);
2、频率和占空比精度
如果使用32位定时器的话,频率范围更宽、精度也可以达到更高。比如,频率0.01Hz、占空比0.01%等。
如果是16位的话,其中的参数都不能超过16位(65535):
#define PWM_COUNTER_CLOCK 1000000
#define PWM_PRESCALER_VALUE (SystemCoreClock/PWM_COUNTER_CLOCK - 1)
tim_period = PWM_COUNTER_CLOCK/Frequency - 1; //计算出计数周期(决定输出的频率)
tim_pulse = (tim_period + 1)*Dutycycle / 100; //计算出脉宽值(决定PWM占空比)
具体可根据自己情况进行配置,比如PWM(定时器)计数时钟、分频值等。
实际应用代码,建议增加各个参数的判断,以防越界(这里为了方便理解,就写的比较简单)。
3、更多
STM32都有硬件PWM输出功能,但不同的系列,其配置可能略有一些差异,简单参考官方例程以及手册。
现在大部分单片机都自带有硬件PWM输出功能,硬件的好处就是不用CPU干预。如果没有,可以尝试上面说的定时器中断的方式。
|