STM32G031 HAL库TIM2 PWM使用 占空比可调

废话不多直接上代码

void HAL_TIM_MspPostInit()
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    __HAL_RCC_GPIOA_CLK_ENABLE();
    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF2_TIM2;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}


void TIM2_Init(uint16_t arr, uint16_t CCR4_Val)
{
    TIM_ClockConfigTypeDef sClockSourceConfig = {0};
    TIM_MasterConfigTypeDef sMasterConfig = {0};
    TIM_OC_InitTypeDef sConfigOC = {0};
    __HAL_RCC_TIM2_CLK_ENABLE();

    uint16_t psr = 0;
    if(arr < 999)
    {
        psr = 99;
        arr =  64000000 / arr / 100 - 1;
    }
    else
    {
        psr = 0;
        arr =  64000000 / arr - 1;
    }
    CCR4_Val = (CCR4_Val * arr) / 100;

    htim2.Instance = TIM2;
    htim2.Init.Prescaler = psr;
    htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim2.Init.Period = arr;
    htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
    HAL_TIM_Base_Init(&htim2);

    sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
    HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig);
    
    sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
    HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig);
   
    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = CCR4_Val;
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
    HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
    HAL_TIM_OC_Init(&htim2);
   
    HAL_TIM_MspPostInit();
    HAL_TIM_Base_Start_IT(&htim2);
    HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
    
}

void TIM2_Channel_1_Set_Duty(uint16_t arr, uint16_t CCR4_Val)
{
    if(arr < 999)
    {
        arr =  64000000 / arr / 100 - 1;
    }
    else
    {
        arr =  64000000 / arr - 1;
    }
    CCR4_Val = (CCR4_Val * arr) / 100;
    __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, CCR4_Val);
}
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  Led_GPIO_Init();
  TIM2_Init(100, 0);
  TIM3_Init();
  USART1_UART_Init();
  IIC_GPIO_Init();
  calc_value_pressure();
  TIM2_Channel_1_Set_Duty(100, 20);
  uint8_t val = 0;
  while (1)
  {
  /*  if(get_sys_time_100us() % 2000 == 0)
    {
        val += 20;
        if(val > 100) val = 0;
        TIM2_Channel_1_Set_Duty(100, val);
        
       // Put_press_and_temp_value();
        //JHM1200_get_cal();
        //DEBUG_PRINTF("Pressure %f\r\n",pressure);
        //DEBUG_PRINTF("TEMP %f\r\n",temp); 
    }*/
    led_task_ontick();
  }
}

 

STM32G031 HAL库TIM2 PWM使用 占空比可调_第1张图片

你可能感兴趣的:(ST单片机开发,stm32,嵌入式,c语言)