STM32CubeMX教程:使用HAL库实现定时器生成PWM基础

目录:

  • 一、STM32CubeMX 配置
  • 1、选择定时器通道:
  • 2、设置 TIM2 channel1 的预分频器、自动重装等值:
  • 二、keil5 进一步编程
  • 1、开启定时器2 通道 1 的 PWM 输出:
  • 2、改变 CCR 值(改变占空比):
  • 参考文章
  • 一、STM32CubeMX 配置

    1、选择定时器通道:

    此处选择 TIM2 的 Channel1 通道,时钟源设置为内部时钟,设置 Channel1 为 PWM 产生:


    解析:

    使能 TIM2 全局中断:

    2、设置 TIM2 channel1 的预分频器、自动重装等值:

    一、向上计数模式(Up-Counting):

  • 在向上计数模式下,PWM 计数器从 0 开始递增计数,直到达到预设的自动重装值(ARR
  • 当计数器达到 ARR 值,它将产生一个计数器溢出中断事件,计数器计数值置 0,重新开始计数
  • PWM 的输出电平会根据计数器的值与比较匹配寄存器(CCR)之间的关系来确定。通常,当计数器的值小于 CCR 时,PWM 输出高电平;当计数器的值大于或等于 CCR 时,PWM 输出低电平
  • 二、向下计数模式(Down-Counting):

  • 在向下计数模式下,PWM 计数器从预设的自动重装值(ARR)开始递减计数,直至计数到 0
  • 当计数器计数至 0 值,它将产生一个计数器溢出中断事件,计数器重新从 ARR 开始递减计数
  • PWM 的输出电平也会根据计数器的值与 CCR 之间的关系来确定,与向上计数模式类似
  • 三、上下计数模式(Up-Down Counting):

  • 在上下计数模式下,PWM 计数器首先从 0 开始递增计数,达到预设的自动重载值(ARR)后,计数器从 ARR 开始递减计数,直到达到 0 值。这个过程会不断重复,形成一个周期性的上下计数循环
  • PWM 的输出电平在计数器的值小于 CCR 时输出高电平,而在计数器的值大于或等于 CCR 时输出低电平
  • PWM 频率: Freq = CK_PSC / (PSC+1) / (ARR+1)
  • PWM 占空比:Duty = CRR / (ARR+1)
  • PWM 分辨率:Reso = 1 / (ARR+1)
  • 二、keil5 进一步编程

    1、开启定时器2 通道 1 的 PWM 输出:

      /* USER CODE BEGIN TIM2_Init 2 */
    	HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
      /* USER CODE END TIM2_Init 2 */**
    

    2、改变 CCR 值(改变占空比):

    占空比:CRR / (ARR + 1)

      /* USER CODE BEGIN 2 */
    	int speed = 500;
    	__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, speed);
      /* USER CODE END 2 */
    

    或者:

      /* USER CODE BEGIN 2 */
    	int speed = 500;
    	TIM2->CCR1 = speed;
      /* USER CODE END 2 */
    

    参考文章

    【STM32CubeMX——PWM配置】——CSDN @w我想吃西瓜n

    作者:~莘莘

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32CubeMX教程:使用HAL库实现定时器生成PWM基础

    发表回复