STM32高级定时器输出互补PWM波详解

STM32使用高级定时器输出互补pwm波

  • 前言
  • 硬件和软件
  • cubemx新建工程
  • 打开Debug模式
  • 配置时钟源
  • 六大时钟的作用
  • 选择Crystal/Ceramic Resonator,即使用外部晶振作为HSE的时钟源。
  • 配置时钟
  • 配置高级定时器TIM8和通用定时器TIM3
  • 这里大概解释一下配置pwm输出用到的几个参数
  • 我们设置的是:
  • 高级控制和通用定时器通道引脚分布
  • 配置工程路径
  • 选MDK-ARM即keil5
  • 生成工程
  • 主函数调用案例
  • 配置下载器烧录验证
  • 输出结果
  • 前言

    最近做的一个项目用到stm32,网上查了很多资料,也踩了很多坑,这里记录一下配置的步骤和说明

    硬件和软件

    1. 硬件使用的是stm32h750vbt6;
    2. 软件用到了stm32cubemx和keil5;

    cubemx新建工程

    打开Debug模式

    打开Debug模式方便调试,可以忽略,不影响代码运行

    配置时钟源

    在用cube配置时钟源时,有下面三个选项
    Disable(禁用)
    BYPASS Clock Source(旁路时钟源)
    Crystal/Ceramic Resonator(晶体/陶瓷晶振)

    六大时钟的作用

    选择Crystal/Ceramic Resonator,即使用外部晶振作为HSE的时钟源。

    配置时钟

    照着下面的图配置即可,最高时钟频率240Mhz

    配置高级定时器TIM8和通用定时器TIM3



    这里大概解释一下配置pwm输出用到的几个参数

    Prescaler 分频系数
    Counter Mode 计数模式(分为向上和向下)
    Count Period 计数周期
    Interal Clock Division 内部时钟分频
    auto-reload preload 自动重装载
    TRGO Event Selection 触发事件

    Pulse 简单的理解为占空比,设置为Count Period 计数周期的一半即可输出占空比50%的方波

    其中分频系数和计数周期较为常用,可用于设置定时器溢出时间,一般来说溢出也代表定时器中断的产生(如果配置了中断)。溢出时间计算公式如下:

    上面那个公式中arr为Count Period的设置数值,psc为Prescaler的设置数值。
    Tclk为定时器挂载的时钟线的频率。对于STM32H750而言最高为240Mhz(根据自己的设置有关),不记得可以看看自己配置的时钟树。
    由下图可知TIM3挂在APB1上,TIM8挂在APB2上,我们刚刚配置的时钟的TO APB1 Timer clocksClocks和TO APB2 Timer clocksClocks都是240Mhz。

    如果我想要产生100HZ方波,那么需要配置溢出时间为10ms(100HZ的周期为10ms)。

    则可以选择配置psc为2399,arr为999
    那么溢出时间公式为:
    2400*1000/240(us)=10ms
    按照上述计算结果进行配置,其他参数不用改即可

    或者另一种算法:
    (240*10^6 Hz)/ (2399+1) / (999+1) = 100Hz

    我们设置的是:

    TIM3:(240 10^3 KHz) / 20 / 100 = 120KHz
    TIM8:(240
    10^6 Hz)/ (24000) / (10000) = 1Hz

    高级控制和通用定时器通道引脚分布

    配置工程路径

    选MDK-ARM即keil5


    生成工程

    主函数调用案例

    打开main.c

    在main函数中添加如下代码

      /* USER CODE BEGIN 2 */
    	
    	/* 定时器3通道1输出PWM */
    	HAL_TIM_PWM_Start_IT(&htim3,TIM_CHANNEL_1);
    	//占空比百分之50
    	__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,12000);
    	
    		/* 定时器8通道1输出PWM */
    	HAL_TIM_PWM_Start_IT(&htim8,TIM_CHANNEL_1);
    	/* 定时器8通道1互补输出PWM */
    	HAL_TIMEx_PWMN_Start(&htim8, TIM_CHANNEL_1);
    	//占空比百分之50
    	__HAL_TIM_SET_COMPARE(&htim8,TIM_CHANNEL_1,50);
    
    
      /* USER CODE END 2 */
    

    配置下载器烧录验证


    输出结果



    和我们预期的结果一致

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32高级定时器输出互补PWM波详解

    发表评论