STM32学习之定时器

目录

一、Systick系统定时器

二、APB总线

三、微秒级延时

1、定时器

2、配置

3、代码


一、Systick系统定时器

        SysTick 是 ARM Cortex-M 系列处理器中的一个系统定时器,用于提供系统级的定时和延时功能。它通常用于实现系统的时钟节拍、延时函数、定时任务等功能。

以下是 SysTick 的一些主要特点和用法:

  1. 定时器计数器:SysTick 定时器是一个 24 位的自动递减计数器。它的计数器会根据设置的时钟频率自动递减,并在计数器减到零时触发中断或者产生定时器到期事件。

  2. 时钟源:SysTick 定时器的时钟源可以是处理器的内部时钟(HCLK)或者处理器的内部时钟分频后的时钟。

  3. 定时器中断:SysTick 定时器可以配置为在计数器递减到零时触发中断。这个中断通常用于实现定时任务、时钟节拍等功能。

  4. 延时函数:通过 SysTick 定时器可以实现延时功能,例如实现毫秒级的延时等待。这对于需要精确时间控制的应用非常有用。

  5. 系统时钟节拍:SysTick 定时器常用于实现操作系统的时钟节拍功能,用于任务调度和时间管理。通过配置合适的时钟频率和中断处理函数,可以实现系统的时钟管理功能。

        所有Cortex-M3/M4 架构的微控制器都集成了SysTick模块,这大大降低了操作系统在Cortex-M3/M4 架构的微控制器之间移植的难度。为了避免用户进程意外修改操作系统的心跳参数,SysTick的控制寄存器只能在特权模式下访问。当不需要操作系统时,SysTick可以作为普通计时器使用。

        我们可以通过SysTick实现毫秒级延时。假设SysTick的时钟源为80MHz,即一秒钟要来80M次时钟脉冲;而此时重装载数值寄存器(LOAD)的值设置为80 000,即每来80k个脉冲就产生一次中断;那每次中断的时间间隔就是:80k / 80M = 1/1000秒 = 1ms 。

二、APB总线

        APB(Advanced Peripheral Bus)总线是 ARM Cortex-M 系列处理器中用于连接外设的一种总线。它是一种低功耗、高效率的串行总线,用于连接微控制器内部的外设模块,例如串口通信接口、定时器、GPIO 控制器等。

        在 ARM Cortex-M 微控制器中,通常会有两个 APB 总线:APB1 和 APB2。它们之间的区别在于连接的外设不同,具体如下:

1、APB1总线

        连接一些低速外设,例如串口通信接口(USART)、I2C 接口、定时器等。APB1 总线的时钟频率通常是系统主时钟频率(HCLK)的一半。

2、APB2总线

        连接一些高速外设,例如串口通信接口(USART)、SPI 接口、定时器等。APB2 总线的时钟频率通常与系统主时钟频率(HCLK)相同。

        在 ARM Cortex-M 微控制器中,外设模块通常被分组连接到不同的总线上,这种分组有助于提高总线效率和降低功耗。通过将低速外设连接到 APB1 总线,可以避免它们占用系统主时钟频率过多的资源,从而保证高速外设在 APB2 总线上的稳定运行。

三、微秒级延时

1、定时器

        以我用的STM32单片机为例,除了通用的SysTick定时器之外,另外还有6个定时器:TIM1、TIM2、TIM6、 TIM7、TIM15、TIM16。TIM6和 TIM7是两个16位的自装载基本定时器,它们比较简单,功能较少,适合用于一些简单的定时功能。

        而TIM1、TIM2、TIM15和TIM16则是通用高级定时器,除了定时功能以外,还支持 PWM 输出等。

        接下来我们选择基本定时器TIM6来实现微秒级的定时功能。

2、配置

 配置预分配:TIM6的输入时钟为APB1时钟80MHz,这个速率对定时器来说实在太快,这时需要对它做个预分频:CK_CNT = TIMxCLK/(PSC+1) = 80MHz/(80-1+1)= 1MHz;

微秒延时配置:通过修改TIM6定时器的ARP(自动重装载寄存)的值,就可以配置定时器的超时时间:ARP = 1/1MHz = 1 us。

3、代码

tim.c

main.c中通过点灯进行验证

        烧录程序,我们可以看到LED灯每2s闪烁一次。 

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

努力学代码的小信

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

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

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

打赏作者

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

抵扣说明:

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

余额充值