1,现象
硬件更新后,PWM波没有输出。
2,思路
1,GPIO设置通用推挽输出用定时器产生方波,用示波器观察是否正常产生方波。如果正常,硬件无问题,GPIO无问题。
2,定时器设置计数中断,在中断处理函数设置断点,观察能否进入断点,如果能,则定时器模块无问题。芯片有相应定时器。
3,检查配置流程。
3,原因
1,GPIO设置
1)管脚分配注意是否有remap,需要remap的是否设置,;
2)GPIO设置中是否开启AFIO及响应管脚;
3)是否与JTAG冲突。
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SW-DP
GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2, ENABLE);//T2 partial remap
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);//T3 fullremap
2,定时器配置
1)通道配置
2)主输出使能:关于这一句应用中发现TIM2,TIM3,TIM4不加PWM能正常输出,但是TIM8不加输出不出来,详细原因待确认。
TIM_DeInit(TIM8);
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = velocity.RT[3];
TIM_TimeBaseStructure.TIM_Prescaler = 10;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR4_Val;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC2Init(TIM8, &TIM_OCInitStructure);//注意通道分配
TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable);//占空比寄存器是否允许缓冲
TIM_Cmd(TIM8, ENABLE);
TIM_CtrlPWMOutputs(TIM8, ENABLE);//是否开启主输出使能;TIMx_BDTR寄存器