STM32F103定时器控制普通IO口翻转模拟输出PWM控制步进电机

stm32f103HAL库如何设置定时器计时翻转普通IO,模拟输出PWM控制步进电机。

举例,PWM周期T,占空比D:
使用定时器中断,先配置周期为T1=T*D,在溢出中断中配置IO电平为高、改周期为T2=T-T1;在下一次中断中配置IO电平为低、改周期为T1;
可以设置一个flag来表示当前的配置状态,大体思路如下,未测试过,仅供参考;

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if (htim == &htim1)
    {
        if(flag)
        {
            flag=0;
            HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
            __HAL_TIM_SetAutoreload(&htim1,T*D);
        }
        else
        {
            flag=1;
            HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);
            __HAL_TIM_SetAutoreload(&htim1,T*(1-D));
        }
    }
}