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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章