5.Systick滴答定时器初始化(HAL库)&无OS延时函数
目录
1.Systick滴答定时器简介
SysTick是属于CM4内核中的外设,其寄存器的定义和部分库函数都在core_cm4.h中实现。Systick是一个24bit的向下递减的计数器,一般设置其时钟等于SYSCLK的180M(另一个选择是HCLK/8)。当重装载数值寄存器的值递减到0的时候,系统定时器就产生一次中断,以此循环往复。基于CM4内核的MCU都有这个系统定时器,使得软件在CM4 单片机中可以很容易的移植。因此它一般用于RTOS,用于产生时基,维持操作系统的心跳。Systick用于RTOS的总结我打算以后写UCOS博客的时候总结,这篇博客主要介绍无OS时,Systick初始化过程和延时函数使用方法。
2.Systick主要寄存器

控制寄存器: CLKSOURCE用于选择时钟源,一般会选择处理器时钟;ENABLE位用于使能Systick;TICKINT位置1会开启Systick中断。
重装载值寄存器:
; 3.Systick中断优先级
SysTick属于内核外设,和普通外设的中断优先级不同,没有抢占优先级和响应优先级的说法。在F429 中,内核外设的中断优先级由内核SCB的外设的寄存器SHPRx(x=1.2.3)配置。SPRH1-SPRH3是32位的寄存器,只能通过字节访问,每 8个字段控制着一个内核外设的中断优先级的配置。在F429 中只有位 7:3 这高四位有效,所以内核外设的中断优先级可编程为:0~15,数值越小优先级越高。

4.Systick初始化流程
- HAL_Init()是主函数main中执行的第一个函数,会设置中断优先级,将时钟源选为16M的HSI。我们可以注意到它还调用了HAL_InitTick()函数,它的输入参数是中断优先级,函数作用是初始化Systick并配置1ms中断一次。
1 | HAL_StatusTypeDef HAL_Init(void) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 秋意寒!
评论