《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.8 TIM---PWM输出实验

写在前面——
《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.8 TIM—PWM输出实验,讲解TIM 定时与PWM输出的STM32CubeMX配置和程序设计方法
官方例程下载:https://pan.baidu.com/s/1QC5BnDgY1m1me6-ihQ_OUQ?pwd=nqb1
提取码:nqb1

4.8 TIM—PWM输出实验

4.8.1. 实验任务

  1. TIM定时作用:参考官方例程HAL_10_TIM_BASE,实现流水灯。
  2. TIM PWM输出:产生PWM波(频率固定、占空比可调),实现呼吸灯
  3. TIM PWM输出:可调频率/占空比的PWM波

4.8.2. TIM原理解析

  定时器(Timer)最基本的功能就是定时,可以延伸到测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等。
  STM32G4 的定时器功能十分强大,共有10个定时器:
  表1 定时器类型
在这里插入图片描述
查看STM32G431RB数据手册(资料包芯片手册中),可获得各个定时器通道的引脚分布,如(资料包芯片手册中)
可以汇总为表2:
在这里插入图片描述
STM32G431的通用 TIMx定时器功能特点包括:
 16 /32 位向上、向下、向上/向下(中心对齐)计数模式,自动装载计数器(TIMx_CNT)。
 16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数 为 1~65535 之间的任意数值。
 4 个独立通道(TIMx_CH1~4)
计数器模式
通用定时器可以向上计数、向下计数、向上向下双向计数模式。
 向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。
 向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。
 中央对齐模式(向上/向下计数):计数器从0开始计数到最大值,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。
在这里插入图片描述
定时时间计算
  基本定时器计数过程主要涉及到三个寄存器内容,分别是计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)、自动重载寄存器(TIMx_ARR),这三个寄存器都是 16 位有效数字,即可设置值为 0 至 65535。
  CNT表示当前计数值,ARR是自动重载的最大计数值。PSC是分频系数,对定时器时钟AB1或AB2进行分频,得到当前计数器的频率。)
  首先设置预分频器寄存器TIMx_PSC (简写成PSC),得到分频后的频率,频率的倒数就是周期时长。如,定时器时钟fCK_PSC =80MKz、(PSC+1)设为(7999+1),这样fCK_CNT /(PSC+1)分频后的频率值就为10kHz,每一个周期时长也就是0.1ms。
  fCK_CNT = fCK_PSC/(PSC+1) // fCK_PSC为定时器时钟频率,来自APB1或者APB2。
  再把把(ARR+1)设为(9999+1)。这样我们得到的定时时长就是1s。
  Tout(定时时间)=(ARR+1)(PSC+1)/ fCK_PSC
PWM波输出
  PWM 输出就是产生一个周期的方波信号,频率、占空比(高电平占总周期的比值)是它的关键参数。
  如下图,假定定时器工作在向上计数PWM模式,且当 CNT(当前计数值)<CCRx(比较寄存器) 时,输出 0,当 CNT>=CCRx 时输出 1。实际上配置CCRx、ARR的数值,就控制PWM波的输出脉宽了。
在这里插入图片描述
  STM32G431 定时器可以用来产生 PWM 输出,其中高级定时器 TIM1 可以输出 4 路。而通用定时器(TIM2、TIM3、TIM4)也可同时产生多达 4 路的 PWM 输出。
在这里插入图片描述
  通常单片机GPIO口只能输出高电平和低电平,可以利用PWM波,通过改变PWM方波的占空比,从而获得不同的模拟电压值。如,100%对应5v,0%对应0v,50%对应2.5v。
在这里插入图片描述
  因此,利用PWM波,可以实现呼吸灯(电压值变化,导致LED亮度强弱变化)、电机调速(电压值变化,导致电机速度变化)等。

4.8.3. TIM定时作用

  定时器(Timer)最基本的功能就是定时,这里以官方例程HAL_10_TIM_BASE为例,阐述TIM定时作用的设计方法,实现流水灯。
定时器的定时设计方法:
 参数配置:PSC、ARR,开启定时中断。可采用STM32CubeMX或者程序设计来实现。
 main.c中调用TIM初始化语句、开启定时中断HAL_TIM_Base_Start_IT(&htim1)。
 编写中断回调函数HAL_TIM_PeriodElapsedCallback,实现功能要求。

1. 初始化配置(STM32CubeMX)

  定时器的参数配置,可以首先使用STM32CubeMX进行初步设置。还可以在程序设计时,进行二次修改。
  以TIM3为例,配置出1HZ的频率,也就是1s发生一次溢出中断。
  80MHZ经过PSC分频,80MHZ/(7999+1) ,得到10KHZ的时钟频率(周期0.0001s)。ARR设为10K-1,则计数10K次,产生溢出中断,即实现1s的计时 。
  STM32CubeMX配置,如下图:
在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是春老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值