STM32F42系列PWM波生成——库函数版本

这里我给出的是STM32F427系列定时器4的PWM输出源代码,本人实测是完全好用的,看到网上的很多代码很难实际加进去就用,需要驱动直流电机的可以直接拿走,不懂的可以私下交流,后续将一些STM32的源代码就都放出来,我也是新手,互相交流,相互提升。qq:643375731

针对这个图可以把一个坑给大家说出来,底下图片VCC写的是5V,其实是驱动不了的,用一个IO输出高电平即3.3V就可以解决

int main(void)
{
  HAL_Init();            
  SystemClock_Config();
  MX_GPIO_Init();   
  MX_TIM4_Init();
  HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);//
  HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2);//
  HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);//
  HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4);//
    while (1)
  {

   __HAL_RCC_TIM4_CLK_ENABLE();//这个地方必须写,否则无效
  
    __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_1,1200);
    __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_2, 1200);
    __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, 1200);
    __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4, 1200);

  }

}

/* TIM4 init function */
void MX_TIM4_Init(void)
{
  TIM_MasterConfigTypeDef sMasterConfig;
  TIM_OC_InitTypeDef sConfigOC;

  htim4.Instance = TIM4;
  htim4.Init.Prescaler = 89;
  htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim4.Init.Period = 2499;
  htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  HAL_TIM_PWM_Init(&htim4);
 

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig);
 
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 0;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1);
  HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2);
  HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3);
  HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4);
  HAL_TIM_MspPostInit(&htim4);

}

void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* tim_pwmHandle)
{
  if(tim_pwmHandle->Instance==TIM4)
    __HAL_RCC_TIM4_CLK_ENABLE();
}

void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct;
    if(timHandle->Instance==TIM4)
  {
    /**TIM4 GPIO Configuration
    PD15     ------> TIM4_CH4        
    PD14     ------> TIM4_CH3
    PD13     ------> TIM4_CH2
    PD12     ------> TIM4_CH1
    */

    GPIO_InitStruct.Pin = GPIO_PIN_15|GPIO_PIN_14|GPIO_PIN_13|GPIO_PIN_12;     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;     GPIO_InitStruct.Pull = GPIO_NOPULL;     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;     GPIO_InitStruct.Alternate = GPIO_AF2_TIM4;     HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);   }