当前位置: 首页>关注 >

今日热讯:STM32 - 利用 SysTick 实现非中断式延时函数

2023-03-16 14:57:29 来源:哔哩哔哩


(资料图片)

SysTick 是 Cortex-M 系列内核中普遍存在的系统定时器,共 24 位(高 8 位保留),通过不断递减进行计数,到达 0 时将 SYST_CSR 的 COUNTFLAG 标志位置 1 并根据 TICKINT 标志位决定是否产生内核中断。

因此,利用 SysTick 实现延时函数就分为中断式和非中断式两种。前者容易产生优先级冲突,也不适合在中断函数中调用;这里选择的是后者,直接对寄存器进行操作和查询。需要注意的是,使用 FreeRTOS 等实时操作系统时,修改 SysTick 会影响系统时钟,建议采用软件延时或使用其他定时器。

代码部分如下(包含 SysTickDelay.c 以及 SysTickDelay.h):

延时函数的准确性依赖于 SYSCLK,这里使用的是 STM32F1 系列单片机,因此 SYSCLK 频率设置为 72 MHz。若使用 STM32F4 系列,则需修改 SysTickDelay.c:

其他代码主要用于操作寄存器,具体信息如下:

更多内容参见 ARM 官网:https://developer.arm.com/documentation/dui0552/a/cortex-m3-peripherals/system-timer--systick

随便写的代码,还能进一步优化(主要是为了把文件存档,方便日后参考)。

关键词:

推荐内容