1. STM32F103VET6的PE11引脚PWM输出问题解析
最近在调试STM32F103VET6的PWM输出功能时,遇到了一个典型问题:PE11引脚无法正常输出PWM波形。这个问题看似简单,但涉及STM32的定时器重映射机制和引脚复用功能配置,值得深入探讨。
STM32F103系列作为经典的Cortex-M3内核MCU,其PWM功能广泛应用于电机控制、LED调光等场景。PE11引脚属于GPIOE端口,通过定时器1(TIM1)的通道2(CH2)可以输出PWM信号。但在实际配置过程中,很多开发者会遇到输出异常的情况,这正是我接下来要详细分析的问题。
2. 问题现象与初步排查
2.1 基础配置与问题复现
按照标准流程,我首先查阅了STM32F103VET6的数据手册,确认PE11引脚支持TIM1_CH2功能。初始配置如下:
c复制// GPIO初始化
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
// 定时器配置
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 999;
TIM_TimeBaseStructure.TIM_Prescaler = 71;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
// PWM输出配置
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 500;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC2Init(TIM1, &TIM_OCInitStructure);
// 使能定时器
TIM_Cmd(TIM1, ENABLE);
TIM_CtrlPWMOutputs(TIM1, EN
