STM32F103C8T6 Blue Pill TIM2四通道PWM配置异常求助
STM32 Blue Pill TIM2 PWM输出异常排查
核心问题:将TIM2配置为PWM模式后,CH1-CH4均已启用,但CH3始终无输出。尝试TIM2引脚重映射后问题更复杂,各模式表现如下:
- 无重映射:CH1=PA0、CH2=PA1、CH3=PA2、CH4=PA3 → CH3(PA2)无输出
- Remap1:CH1=PA2、CH2=PA3、CH3=PA15、CH4=PB3 → CH1(PA2)和CH3(PA15)无输出
- Remap2:CH1=PA0、CH2=PA1、CH3=PB10、CH4=PB11 → CH1(PA0)、CH2(PA1)和CH3(PB10)无输出
- Remap3:CH1=PA15、CH2=PB3、CH3=PB10、CH4=PB11 → CH2(PB3)和CH3(PB10)无输出
已做排查:
- 所有GPIO端口均配置为CNF=AF、MODE=OUT
- TIM2时钟为36MHz,尝试降低时钟频率无效
- 更换Blue Pill开发板后问题依旧
配置代码(汇编):
ldr r0, = TIM2 @ APB1 Clock - 36MHz ldr r1, = 0 str r1, [r0, #TIMx_PSC] @ Clock/Prescaler ldr r1, = 256 str r1, [r0, #TIMx_ARR] @ Count-Down value for timer ldr r1, = 128 @ Output Compare preload value str r1, [r0, #TIMx_CCR1] @ CH1 str r1, [r0, #TIMx_CCR2] @ CH2 str r1, [r0, #TIMx_CCR3] @ CH3 str r1, [r0, #TIMx_CCR4] @ CH4 ldr r1, = 6<<OC2M | 1<<OC2PE | 6<<OC1M | 1<<OC1PE str r1, [r0, #TIMx_CCMR1] @ CH1 & CH2 PWM Mode1 ldr r1, = 6<<OC4M | 1<<OC4PE | 6<<OC3M | 1<<OC3PE str r1, [r0, #TIMx_CCMR2] @ CH3 & CH4 PWM Mode1 ldr r1, = 1<<CC4E | 1<<CC3E | 1<<CC2E | 1<<CC1E str r1, [r0, #TIMx_CCER] @ CH1 to CH4 Enable ldr r1, = 3<<CMS str r1, [r0, #TIMx_CR1] dsb ldr r1, [r0, #TIMx_CR1] orr r1, #1<<CEN @ Counter Enable str r1, [r0, #TIMx_CR1]
排查建议:
- 开启AFIO时钟并释放JTAG引脚:引脚重映射需要先开启AFIO时钟(置位RCC_APB2ENR的AFIOEN位);Remap1/3用到的PA15、PB3默认是JTAG调试引脚,需配置AFIO_MAPR寄存器将
SWJ_CFG设为0x2(仅保留SWD调试),否则引脚被调试功能占用无法输出PWM。 - 核对CCMR2寄存器位偏移:OC3M位于TIMx_CCMR2的位11-9,需确认代码中
OC3M的偏移定义是否正确,若偏移值错误会导致CH3的PWM模式配置失效。 - 开启ARR预加载:当前代码未开启TIMx_CR1的ARPE位,在中心对齐模式下,建议开启该位确保ARR值更新同步,避免计数异常影响输出。
- 配置正确的重映射位:不同重映射模式需对应设置AFIO_MAPR的TIM2_REMAP位,比如Remap2需将该位设为0b10,否则引脚复用映射不生效。
- 验证TIM2计数功能:先禁用PWM输出,仅开启TIM2计数,读取TIMx_CNT寄存器确认计数是否正常,排除时钟或计数模式配置错误导致的输出异常。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

