16 SysTick—系统定时器

发布时间:2024年01月14日

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
使能定时器和定时器中断</

文章来源:https://blog.csdn.net/qq_45578181/article/details/135582801
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。