问题描述:
在使用串口和高级定时器PWM的时候,发现先初始化串口,后初始化PWM,会导致PWM无法正常输出。
这样PWM无法正常输出
这样PWM能正常输出
原因:在使用高级定时器的PWM输出模式时,并未初始化与PWM无关的但高级定时器存在的参数,只初始化了高级定时器PWM模式相关的一下参数。
/*******只初始了以下参数,但高级定时器 TIM_OCInitTypeDef 里的参数不止这些,就有参数没有初始化导致问题发生**************/
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//选择定时器模式:TIM脉冲宽度调制模式1
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//比较输出使能
TIM_OCInitStructure.TIM_Pulse=900;//设置待装入捕获比较寄存器的脉冲值
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//输出极性:TIM输出比较极性高
TIM_OC1Init(TIM1,&TIM_OCInitStructure);//根据TIM_OCInitStructure中指定的参数初始化外TIMx
解决方案:给TIM_OCInitTypeDef TIM_OCInitStructure 下的参数全部初始化,用不到的参数也都初始化-------TIM_OCStructInit(&TIM_OCInitStructure);
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCStructInit(&TIM_OCInitStructure);//加上这一句即可,给TIM_OCInitTypeDef结构体的所有变量初始化默认值。
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//选择定时器模式:TIM脉冲宽度调制模式1
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//比较输出使能
TIM_OCInitStructure.TIM_Pulse=900;//设置待装入捕获比较寄存器的脉冲值
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//输出极性:TIM输出比较极性高
TIM_OC1Init(TIM1,&TIM_OCInitStructure);//根据TIM_OCInitStructure中指定的参数初始化外TIMx