STM32 HAL库 通用定时器介绍及相关应用例程 定时器中断 输出PWM (点亮LED呼吸灯、输出PWM、输入捕获) CubeMX

通用定时器简介(以F429为例)

(部分图引自于ATK)

前情提要(基本定时器)

点此进入

通用定时器类别

在这里插入图片描述
通用定时器和基本定时器相比大致的工作方式是相似的,不过通用定时器比基本定时器多了一些很好用的功能,比如:

  • 外部输入捕获
  • 输出比较
  • 输出PWM

时钟源

CubeMX为我们提供了配置时钟的非常方便的工具。首先还是看这张图:
CLOCK
通用定时器的时钟源可以选择以下四种:

  • 内部时钟
  • 外部时钟模式1
  • 外部时钟模式2
  • 内部触发输入

一般用的最多的还是内部时钟源。以TIM3为例,由上图,TIM3挂载于APB1总线。在Cube MX中可以设置APB1总线定时器的时钟频率。
CLOCK
本文内APB1定时器频率均设置为75MHz。

计数模式

通用定时器的计数模式有三种,分别为:

  • 向上(递增)计数
  • 向下(递减)计数
  • 中心对齐
    在这里插入图片描述
    这部分和基本定时器的内容基本一致。

功能

通用定时器可以实现输入捕获、输出比较等功能。以输入捕获为例,其顾名思义是定时器对输入的某个信号的上升沿、下降沿或者双边沿进行检测。输入信号通常来自于定时器的4个通道中的某一通道,其通过GPIO的复用功能引入。比如我们在CubeMX中随便选中一个GPIO,以PB0为例:

在这里插入图片描述
TIM3_CH3表明该GPIO可以被复用为TIM3的第3通道。

输入捕获功能可以测量输入信号的脉冲宽度、测量 PWM 输入信号的频率和占空比等。其他功能同理都基于这些定时器通道实现。

通用定时器中断应用(TIM3)

预期功能

使用通用定时器TIM3在定时器中断中以2s的间隔点亮LED0,在main.c的While(1)中以500ms间隔点亮LED1,比较二者的点亮间隔。

CubeMX配置

LED配置
时钟源选择内部时钟。此处没用到定时器通道,因此4个通道都是禁用状态。在Parameter Settings里配置PSC、ARR寄存器的写入值和计数方式。这一部分和基本定时器相同。(截图里的PSC写错了,应该是15000)
TIM3
NVIC中开启TIM3全局中断。抢占优先级设为1.
NVIC

tim.c配置

重写HAL_TIM_PeriodElapsedCallback()

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
   
   
  UNUSED(htim);
  if (htim->Instance == TIM3)	//确认中断由TIM3申请
  {
   
   
    HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);		//反转LED0电平
  }
}

main.c配置

打开TIM3时基:

HAL_TIM_Base_Start_IT(&htim3);

重写死循环:

 while (1)
  {
   
   
     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
     HAL_Delay(500);
  }

编译下载

实物演示就不放了。这一部分和基本定时器的使用是一致的,只不过改了定时器的编号。

通用定时器输出PWM应用(TIM3)

简介

生成PWN是定时器最为实用的功能之一,PWM可以用在很多地方,最常见的就是驱动调速。

在计数器频率固定时,PWM的频率由ARR确定,其占空比由CCR(捕获/比较寄存器)确定。产生原理如下图:
PWM
显然上图中的定时器工作在向上计数模式,纵轴为CNT。当CNT小于CCR写入值时,IO视为输出低电平;CNT大于等于CCR写入值时,IO视为输出高电平。CNT=ARR时定时器事件更新,CNT清零,进入下一个PWM周期。

定时器可以通过多种方式产生PWM,一般使用边沿对齐模式:
PWM

预期功能

使用TIM3通道3(复用PB0)输出PWM至LED,通过PWM控制LED亮度。

CubeMX配置

GPIO(PB0)选择复用推挽输出,上拉,高速。
GPIO
定时器选择TIM3,时钟源选择内部时钟,通道3选择PWM Generation CH3.

接下来开始配置定时器参数。根据以下顺序一步步的进行:

1.配置TIM3时钟频率:这部分在Clock Configuartion中设置。根据上文,APB2总线定时器频率为75MHz。

2.配置PWM频率:根据
T o u t = ( A R R + 1 ) ∗ ( P S C + 1 ) f c l k T_{out} = \frac{(ARR+1)*(PSC+1)}{f_{clk}} Tout=fclk(ARR+1)(PSC+1)
KaTeX parse error: Expect

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值