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初始化流程

  1. HAL_Init()是主函数main中执行的第一个函数,会设置中断优先级,将时钟源选为16M的HSI。我们可以注意到它还调用了HAL_InitTick()函数,它的输入参数是中断优先级,函数作用是初始化Systick并配置1ms中断一次。
HAL_StatusTypeDef HAL_Init(void)
{
   
  /* Configure Flash prefetch, Instruction cache, Data cache */ 
#if (INSTRUCTION_CACHE_ENABLE != 0)
   __HAL_FLASH_INSTRUCTION_CACHE_ENABLE();
#endif /* INSTRUCTION_CACHE_ENABLE */

#if (DATA_CACHE_ENABLE != 0)
   __HAL_FLASH_DATA_CACHE_ENABLE();
#endif /* DATA_CACHE_ENABLE */

#if (PREFETCH_ENABLE != 0)
  __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
#
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值