在制作平衡小车的过程中,焊接好pcb发现,BIN2口没有定时器通道功能,无法输出PWM,但这样就不能用了吗,肯定不是啊。
别忘了使用51单片机的时候是如何产生PWM波的,于是我就用这种方法来实现PWM。
- 直接用定时器和定时器中断。
- 利用HAL库的回调函数。
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) //Âö³å½áÊø£¬Ò²¾ÍÊǸߵçƽ½áÊø£¬ÖÃΪµÍµçƽ
{
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_3)
{
GPIOA->BRR = GPIO_PIN_3;//±äΪµÍµçƽ
} else if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_4)
{
GPIOA->BRR = GPIO_PIN_4;
}
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) //µ±Õû¸öÖÜÆÚ½áÊø£¬ÖÃΪ¸ßµçƽ
{
/* USER CODE BEGIN Callback 0 */
if(TIM3->CCR3 != 0)
GPIOA->BSRR = GPIO_PIN_3; //±äΪ¸ßµçƽ
if(TIM3->CCR4 != 0)
GPIOA->BSRR = GPIO_PIN_4;
/* USER CODE END Callback 0 */
if (htim->Instance == TIM1) {
HAL_IncTick();
}
}