Stm32中SysTick 定时器的使用

ysTick_Config(SystemCoreClock / 100); 这行代码通常出现在基于 ARM Cortex - M 内核微控制器的程序中,用于配置 SysTick 定时器,下面结合代码进行详细解释:

1. SysTick 定时器

SysTick 定时器是 ARM Cortex - M 内核中一个简单的 24 位递减定时器,也被称为系统滴答定时器。它常用于产生精确的时间延迟、实现周期性的任务调度等功能。

2. SystemCoreClock

SystemCoreClock 是一个宏定义,它代表微控制器的系统时钟频率,单位是赫兹(Hz)。这个值通常在微控制器的启动代码或相关的头文件中定义,具体数值取决于微控制器的工作频率设置。例如,对于某些工作在 72MHz(72000000Hz)的 Cortex - M3 微控制器,SystemCoreClock 就会被定义为 72000000。

3. SystemCoreClock / 100

SystemCoreClock / 100 这部分代码是计算 SysTick 定时器的重载值(reload value)。SystemCoreClock / 100 表示将系统时钟频率除以 100 。假设 SystemCoreClock 为 72000000Hz,那么 SystemCoreClock / 100 的结果就是 720000。这意味着每经过 720000 个系统时钟周期,SysTick 定时器就会产生一次溢出事件。

4. SysTick_Config 函数

SysTick_Config 是一个函数,通常在 core_cm3.h(Cortex - M3)或 core_cm4.h(Cortex - M4)等相关头文件中声明,其功能是配置 SysTick 定时器并使能它。它接受一个参数,就是要设置的重载值。

当调用 SysTick_Config(SystemCoreClock / 100); 时,函数会执行以下主要操作:

  • 将传入的重载值(这里是 SystemCoreClock / 100 计算得到的值)写入 SysTick 定时器的重载寄存器(STRELOAD)。
  • 使能 SysTick 定时器的时钟。
  • 将 SysTick 定时器的当前值寄存器(STCURRENT)清零。
  • 使能 SysTick 定时器的中断(如果在函数实现中包含了相关中断使能操作)。
  • 启动 SysTick 定时器,定时器开始从重载值递减计数,当计数到 0 时,会产生一次溢出事件,触发中断(如果中断已使能),并且会自动重新从重载值开始计数,实现周期性的定时功能。

例如,在一个基于 Cortex - M3 的简单程序中:

复制代码
#include "stm32f10x.h"
#include "core_cm3.h"

void SysTick_Handler(void)
{
    // 在这里处理SysTick定时器溢出事件
    // 例如翻转一个LED的状态等
}

int main(void)
{
    // 配置SysTick定时器,每100个系统时钟周期产生一次溢出
    SysTick_Config(SystemCoreClock / 100); 

    while (1)
    {
        // 主循环执行其他任务
    }
}

在上述代码中,SysTick_Config(SystemCoreClock / 100); 配置了 SysTick 定时器,每经过 SystemCoreClock / 100 个系统时钟周期就会产生一次溢出,触发 SysTick_Handler 中断服务函数,在该函数中可以实现需要周期性执行的任务。 主循环 while(1) 可以继续执行其他的非周期性任务。

相关推荐
scilwb8 小时前
RoboCon考核题——scilwb
单片机
点灯小铭9 小时前
基于STM32单片机智能RFID刷卡汽车位锁桩设计
stm32·单片机·汽车·毕业设计·课程设计
bai54593610 小时前
STM32 软件I2C读写MPU6050
stm32·单片机·嵌入式硬件
逼子格12 小时前
AT89C52单片机介绍
单片机·嵌入式硬件·51单片机·硬件工程师·硬件工程师真题·at89c52·器件手册
生涯にわたる学び14 小时前
ARM 实操 流水灯 按键控制 day53
arm开发·嵌入式硬件
whaosoft-14314 小时前
w嵌入式分享合集68
嵌入式硬件
竹照煜_ysn17 小时前
STM32——软硬件I2C
stm32·嵌入式硬件·mongodb
Ronin-Lotus17 小时前
嵌入式硬件篇---电感串并联
嵌入式硬件
Wallace Zhang18 小时前
STM32 - Embedded IDE - GCC - 显著减少固件的体积
stm32·单片机·嵌入式硬件
fengfuyao9851 天前
STM32如何定位HardFault错误,一种实用方法
stm32·单片机·嵌入式硬件