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));
}
}
}