SysTick 定时器

文章目录

寄存器

SysTick控制和状态寄存器(SysTick->CTRL)

名称 描述
16 COUNTFLAG 当 SysTick 定时器递减计数到 0,该位自动变成 1,如果 TICINT 设置为 1,会产生 SysTick 异常。同时,重装载寄存器 SysTick->LOAD 中的值会载入到当前计数器 SysTick->VAL。读该寄存器或清除计数器则该位清零
2 CLKSOURCE 时钟源选择,0 外部参考时钟(STCLK),1 使用内核时钟
1 TICKINT 允许产生异常配置,1 允许异常
0 ENABLE SytTick 定时器使能,1 使能
  • 当 CLKSOURCE 设置为0,选择参考时钟时,由 RCC 模块中的寄存器 RCC_CCIPR1完成 SysTick 时钟源的选择

Bits 23:22 SYSTICKSEL1:0: SysTick 时钟源选择:

00: HCLK/8 selected

01: LSI selected

10: LSE selected

11: reserved

SysTick重装载值寄存器(SysTick->LOAD)

  • 23:0:重装载值

SysTick当前值寄存器(SysTick->VAL)

  • 23:0:SysTick当前计数值,写入任何值,清除该寄存器

SysTick校准值寄存器(SysTick->CALIB)

  • 提供了SysTick的校准值。目前,很少使用,芯片供应商一般通过其他的可替代方案

使用方法

  • 在具备嵌入式实时操作系统(RTOS)的软件中,很多RTOS已经支持了SysTick
  • 在未使用RTOS的软件中,可以通过CMSIS-CORE提供的接口函数下面的函数,使用处理器时钟作为时钟源,让SysTick按参数 ticks 产生周期性的中断,中断优先级为最低
c 复制代码
uint32_t SysTick_Config(uint32_t ticks);

//按当前系统时钟的千分之一(周期是1ms)产生中断
SysTick_Config(SystemCoreClock / 1000);

产生周期性的中断

  • CubeMX生成的代码,已经自动完成,并将中断周期设置为1ms

初始化

c 复制代码
HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority);

阻塞延时

c 复制代码
void HAL_Delay(uint32_t Delay);

非阻塞延时

  • 获取当前中断计数值,并以此为计数初值,根据需要,通过查询判断延时
c 复制代码
uint32_t HAL_GetTick(void);
c 复制代码
if(HAL_GetTick() >= led1_delay)
{
    led1_delay = HAL_GetTick() + 500;
    HAL_GPIO_TogglePin(Led1_GPIO_Port, Led1_Pin);
}

注意

  • SysTick定时器中的寄存器只能在特权状态下访问
  • 若使用嵌入式OS,则SysTick会被OS占用,不能再被应用任务使用
  • SysTick会在调试暂停时,停止计数,也会在某些休眠状态中停止计数
  • 利用CubeMX生成的初始化代码中,SysTick中断因为优先级最低,所以不能在其他的中断中调用依赖SysTick中断计时的函数,比如 HAL_Delay()
  • 周期性中断计数值会有溢出的问题,当程序连续运行可能满足溢出条件时,需要注意
相关推荐
ylscode1 天前
加密合规性:1Password 解决硬件令牌配置差异问题
stm32·单片机·嵌入式硬件
清风6666661 天前
基于单片机的锅炉压力与温度监测报警系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
ACP广源盛139246256731 天前
GSV2221 显示转换芯片@ACP#赋能 RTX Spark 端侧 AI 设备,构建多屏全模态视觉交互新生态
大数据·人工智能·嵌入式硬件·gpt·spark·电脑·音视频
Szime1 天前
TJA1044T/1现货查询与汽车CAN通信应用采购注意事项
嵌入式硬件·汽车
rhythm-ring1 天前
《汽车智能高边开关PROFET:电流检测与标定实战》
嵌入式硬件·汽车
点灯小铭2 天前
基于单片机的鱼缸监测与远程管理系统设计
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
Szime2 天前
DS90UB924TRHSRQ1现货交期与车载视频SerDes项目采购说明
嵌入式硬件·汽车
清风6666662 天前
基于单片机的罐体压力控制器设计与实现
单片机·嵌入式硬件·毕业设计·51单片机·课程设计·期末大作业
嵌入式-老费2 天前
esp32开发与应用(题外话之j-link调试)
嵌入式硬件
点灯小铭2 天前
基于单片机的热量计测量系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业