PWM 参数计算
时基单元:

跟 Keil51 一样,先进行预分频。
自动重装器:设置一个值 ARR,每次计数从 0 开始,计数到 ARR 后清零,计数 ARR+1 次
计数器 cnt:后根据内部时钟进行计数,每次和 CCR 捕获比较器进行比较;当 CNT<CCR 时,电平置为有效电平;同理,当 CNT>=CCR 时,置为无效电平,即为零;之后根据占空比进行电压的输出。
keil 中代码的讲述
void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1);
void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);
void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3);
void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4);
这个函数用来改变通道的占空比
void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
这个是用结构体来初始化输出
一。舵机不听指挥乱动
没有与单片机共地
舵机有三条线,分别是正负极和信号线 (用来输入 PWM 信号),因为舵机所需要的驱动电压比较大,一般在 6v 往上了,一般的单片机供电无法驱动舵机,就需要单独的外接电源供电,这时注意舵机地线不仅要和外接电源负极相连,还要与单片机共地,不然 PWM 信号输入后舵机会不听使唤乱动,因为 PWM 信号由单片机输入,舵机与单片机没有供地,舵机就没有参考电平,就会乱转。
PWM 需要和单片机共地,事实确实是这样