关于RT-Thread中PWM无法正常输出的学习

按照官方的PWM配置,并没有输出PWM,网上有比较多的办法,试了很多,有些还是不能实现输出,这里做个记录。记录自己完成PWM输出的过程,以及修改的地方。
关于STM32CubeMX配置就不多说了,网上有很多。

  1. 首先必定是按照流程来,一定一定按照流程来!!!
    关于RT-Thread中PWM无法正常输出的学习_第1张图片
    需要注意的是加上通道数!!!!
    这是流程上没有的,也是RTT的一点小BUG吧

配上board.c中添加的代码,我用的是PA2定时2的通道3,需要使用的朋友修改对应定时器和GPIO!

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
{
  if(htim_base->Instance==TIM2)
  {
    __HAL_RCC_TIM2_CLK_ENABLE();
  }
}

void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(htim->Instance==TIM2)
  {  
    __HAL_RCC_GPIOA_CLK_ENABLE();
    /**TIM2 GPIO Configuration    
    PA2     ------> TIM2_CH3 
    */
    GPIO_InitStruct.Pin = GPIO_PIN_2;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  }
}

到这里按照官方教程是配完了,至于怎么使用文档上有
关于RT-Thread中PWM无法正常输出的学习_第2张图片

实际运行没有输出PWM波形。
问题在这
关于RT-Thread中PWM无法正常输出的学习_第3张图片

添加以下代码

    if (HAL_TIM_Base_Init(tim) != HAL_OK)	/* 注意这里是定时器的初始化,别看混了!!! */
    {
        LOG_E("%s tim init failed", device->name);
        result = -RT_ERROR;
        goto __exit;
    }

添加后如图
关于RT-Thread中PWM无法正常输出的学习_第4张图片
运行可以看到PWM,这是我设置的占空比一半的PWM(实测的哦)
关于RT-Thread中PWM无法正常输出的学习_第5张图片
有什么问题请留言哈

你可能感兴趣的:(RT-Thread和STM32,stm32)