STM32学习笔记(六)SysTick

发布者:清新天空最新更新时间:2025-02-05 来源: jianshu关键字:STM32  学习笔记  SysTick 手机看文章 扫描二维码
随时随地手机看文章

SysTick 是一个 24bit 的系统计时器计数器从 LOAD寄存器 中读取数值(该数值最大为24bit),不断递减,递减为 0 时相应标志位置 1,产生一个中断请求;
该寄存器通常用来产生精确的 延时(Delay)函数;

SysTick寄存器

SysTick寄存器映射——STM32F10xxx Cortex-M3编程手册

  • 端口配置低寄存器 --- CTRL(Control and status register):使能SysTick和相应中断请求,并配置时钟来源;

    • 作用---使能计数器(counter):位0 置 1 时计数器使能,置 0 时计数器关闭;

    • 作用---使能中断请求:位1 置 1 时中断请求使能,置 0 时中断请求关闭(SysTick中断为中断向量表 系统中断第16项);


      SysTick中断

    • 作用---选择时钟源:位2 置 1 时选择 AHB 时钟作为源,置 0 时选择 AHB / 8 作为时钟源;(默认情况下AHBCLK = 72M)

    • 位16 为标志位 COUNTFLAG,为 1 时表明计数器的值为 0;

    • 复位值:0x0000 0000

  • 读取值寄存器 --- LOAD(reload value register):位23:0 储存计数器要读取的值;

    • 复位值:0x0000 0000

  • 当前值寄存器 --- VAL(current value register):位23:0 储存计数器当前的值;

    • 复位值:0x0000 0000

  • 校准值寄存器 --- CALIB(calibration value register):位23:0 储存计数器校准值和相应标志位的寄存器;

    • 复位值:0x0002328

常用SysTick固件库函数 (core_cm3.h)

SysTick配置函数 --- SysTick_Config

static __INLINE uint32_t SysTick_Config(uint32_t ticks);
  • 作用:使能 SysTick,使能中断请求并把该中断优先级设置为最低(0x1111),把时钟源设置为 AHBCLK,同时设置 reload = ticks;

  • 注意:SysTick中断优先级寄存器与外设中断优先级寄存器不同,但仍可按优先级规则判断优先级;

  • ticks:LOAD寄存器中的值,为reload值,必须是24位以内的树;

  • 返回值:0则表示配置成功,1则表示配置失败;

  • 示例:

SysTick_Config(72000);          //默认系统为72M

//一般可不需读取返回值,只要ticks值在24位以内即可配置成功


编写Delay函数

编写一个 毫秒(ms) 级Delay函数

计算

设 SysTick 时钟源的频率为 CLK (MHz),LOAD寄存器中存储的值为 reload;
可得计数器在 1毫秒(ms) 内震荡 CLK×1000 次(即递减 CLK×1000 次),我们要让计数器中的值在 1毫秒(ms) 从 reload 递减至 0,将 reload 的值设置为 CLK×1000 即可;

若采用默认情况下 选取 AHBCLK = 72MHz,则将 LOAD 寄存器设置为 72000 即可。

程序思路

  • SysTick_Config函数 使能SysTick并配置 reload值;

  • 不断读取 COUNTFLAG 位直至其值为 1,确认计数器已经递减至 0;

  • 产生相应中断;

实现代码

void SysTick_Delay_ms(uint32_t tms){
    uint32_t i;
    SysTick_Config(72000);          //默认系统为72M
    
    for(i=0; iCTRL) & (1<<16)));
    }
    //使能中断请求
    SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;}


关键字:STM32  学习笔记  SysTick 引用地址:STM32学习笔记(六)SysTick

上一篇:解决方法:STM32下载提示Cannot enter Debug Mode
下一篇:stm32配合xshell串口输入

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved