定时器开发基础及PWM波的生成


1. 配置

2. 函数定义

  • 在stm32f4xx_hal_gpio.c中找到

    __weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

  • 复制其中的

    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

  • 到main.c中进行重定义:

    1
    2
    3
    4
    5
    6
    7
    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    {
    if(htim->Instance == TIM1)
    {
    HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_9);
    }
    }
  • 其中小灯闪的实践间隔为

    间隔时间=(Prescaler+1)×(Counterperiod+1)定时器时钟频率频率=定时器时钟频率(Prescaler+1)×(Counterperiod+1)\begin{aligned} \text{间隔时间}=\frac{\left( Prescaler+1 \right) \times \left( Counter\,\,period+1 \right)}{\text{定时器时钟频率}}\\ \text{频率}=\frac{\text{定时器时钟频率}}{\left( Prescaler+1 \right) \times \left( Counter\,\,period+1 \right)} \end{aligned}

  • 到tim.c中找到
    HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)

  • 到main()函数中添加
    HAL_TIM_Base_Start_IT(&htim1);
    来打开对应时钟,此时中断实践可使用
    用于定时触发某些任务

3. PWM波的生成

  • 在main()函数中添加
    HAL_TIM_PWM_Start(&htim8,TIM_CHANNEL_1);
    打开对应时钟对应通道的PWM输出

  • 在while(1)中添加
    __HAL_TIM_SET_COMPARE(&htim8, TIM_CHANNEL_1, 420);
    来控制PWM的占空比,占空比等于

    占空比=设定值CounterPeriod×100%\text{占空比}=\frac{设定值}{Counter Period}\times100\%


这是跟随B站小蜜蜂老师的干货铺【小蜜蜂笔记】基于STM32CubeMX的嵌入式开发基础教程所写的学习笔记。

此教程以应用为主,辅以简单的原理讲解,能够快速的上手STM32的开发。