使用stm32F407的TIM1产生PWM打开和关闭

it2024-02-23  71

在调试中发现关闭TIM1产生的PWM信号时,通过关闭定时器指令TIM_Cmd(TIM1, DISABLE);  会有不确定的高电平输出。

 使用 TIM_CtrlPWMOutputs(TIM1, DISABLE);关闭引脚的PWM输出功能可以正常的关闭PWM输出。

 TIM1的通道1的PA8连接一个三极管的基级,然后程序按照上面的步骤进行配置,会出现下面的情况,高电平转为低电平会有一个缓慢的下降沿,影响PWM的波形。

为了解决这个问题,可以按照下面的方法进行配置,在开关PWM时对GPIO进行重新配置。

void PWM_ON() { GPIO_InitTypeDef GPIO_InitStructure; GPIO_PinAFConfig(GPIOA,GPIO_PinSource8,GPIO_AF_TIM1); //GPIOA8复用为定时器1 GPIO_ResetBits(GPIOA, GPIO_Pin_8); //GPIOB0 复用功能,上拉 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //GPIOA8 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //下拉 GPIO_Init(GPIOA,&GPIO_InitStructure); TIM1->CNT=0;//防止PWM信号的第一个脉冲宽度不确定的现象。 TIM_Cmd(TIM1, ENABLE); //使能TIM1 TIM_CtrlPWMOutputs(TIM1, ENABLE); //20201020 } void PWM_OFF() { GPIO_InitTypeDef GPIO_InitStructure; GPIO_ResetBits(GPIOA, GPIO_Pin_8); //GPIOB0 复用功能,上拉 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //GPIOA8 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //下拉 GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_ResetBits(GPIOA, GPIO_Pin_8); TIM_CtrlPWMOutputs(TIM1, DISABLE); //20201020 TIM_Cmd(TIM1, DISABLE); //使能TIM1 }

TIM1->CNT=0;//防止PWM信号的第一个脉冲宽度不确定的现象。该现象如下图所示

最新回复(0)