16 SysTick—系统定时器

本文介绍了Cortex-M内核单片机中的SysTick系统定时器,包括其作为24bit向下递减计数器的工作原理、寄存器介绍以及编程要点。详细解析了CTRL、RELOAD、Current和CALRB四个寄存器的功能,并展示了如何通过SysTick_Config库函数进行配置,以及如何设置中断优先级。此外,还探讨了基于SysTick的延迟实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

16.0 前言

SysTick 是属于 Cortex 内核的外设,内嵌在 NVIC 中,无论在 Cortex-M3、M4 和 M7,他们都是完全一样的

16.1 SysTick 简介

系统定时器是一个 24bit 的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK

  • 一般我们设置系统时钟SYSCLK 等于 AHB 时钟
  • 在 RT1052 中,AHB 时钟等于 528MHZ。

SysTick 是属于 Cortex-M 内核的外设,所以所有基于 Cortex-M 内核的单片机都具有这个系统定时器

16.2 SysTick 寄存器介绍

SysTick—系统定时器有 4 个寄存器
在这里插入图片描述
与STM32F407中的一样

16.2.1 CTRL 控制及状态寄存器

在这里插入图片描述

16.2.2 RELOAD 重载数值寄存器

在这里插入图片描述

16.2.3 Current当前数值寄存器

在这里插入图片描述

16.2.4 CALRB 校准值寄存器

在这里插入图片描述系统定时器的校准数值寄存器在定时实验中不需要用到。

16.3 SysTick 定时实验

16.3.1 编程要点

1、设置重装载寄存器的值
2、清除当前数值寄存器的值
3、配置控制与状态寄存器

16.3.2 代码分析

16.3.2.1 SysTick 配置库函数

SysTick 配置库函数 (core_cm7.h)

1 __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
2 {
   
3 // 不可能的重装载值,超出范围
4 if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {
   
5 return (1UL);
6 }
7
8 // 设置重装载寄存器
9 SysTick->LOAD = (uint32_t)(ticks - 1UL);
10
11 // 设置中断优先级
12 NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);
13
14 // 设置当前数值寄存器
15 SysTick->VAL = 0UL;
16
17 // 设置系统定时器的时钟源为 AHBCLK
18 // 使能系统定时器中断
19 // 使能定时器
20 SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
21 SysTick_CTRL_TICKINT_Msk |
22 SysTick_CTRL_ENABLE_Msk;
23 return (0UL);
24 }

用固件库编程的时候我们只需要调用库函数 SysTick_Config() 即可。

  • 形参 ticks 用来设置重装载寄存器的值
  • 最大不能超过重装载寄存器的值 2的24次
    • 当重装载寄存器的值递减到 0 的时候置位SysTick 控制及状态寄存器的位 16 或者产生中断(如果中断已经使能)
    • 然后重装载寄存器的值又重新装载往下递减计数,以此循环往复。

设置好中断优先级
配置系统定时器的时钟等于 AHBCLK
使能定时器和定时器中断

16.3.2.2 配置 SysTick 中断优先级

在 SysTick_Config() 库函数还调用了固件库函数 NVIC_SetPriority() 来配置系统定时器的中断优先级

NVIC_SetPriority 函数定义(core_cm7.h)

1 __STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
2 {
   
3 if ((int32_t)IRQn < 0) {
   
4 SCB->SHP[(((uint32_t)(int32_t)IRQn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

万码无虫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值