4.关于SysTick、用systick实现delay

(一)SYS文件夹介绍:

在这里插入图片描述

(二)SysTick工作原理

定义:该定时器是24位的,永不停息的, 递减计数器。即系统滴答定时器。包含在M3/4/7内核里面。
在这里插入图片描述
每次VAL到0时,VAL自动从LOAD重载,开始新一轮递减计数。
Systick的两大作用(系统的心跳):

(三)Systick的两大作用(系统的心跳)

1、可以产生精确延时(原先的Delay只是盲等)。
2、可以提供给操作系统一个单独的心跳(时钟)节拍。一次心跳中断一次。

(四)运行机制

SysTick设定初值并使能后,每经过一个系统时钟周期,计数值就减1,计数到0时,SysTick计数器自动重装初值并继续计数,同时内部的COUNTFLAG标志会置位,若中断使能就会触发中断。
系统时钟周期:外部晶振为8MHz,9倍频,系统时钟为72MHz,SysTick频率可以为72MHZ或者9MHZ(只有1分频或者8分频),为了更精准一般使用时会选择8分频。
在9MHZ情况下:

  • 把SysTick计数值设置为9000,就能产生1ms的时间基值,即SysTick产生1ms的计数。
  • 把SysTick计数值设置为9,就能够产生1us的时间基值,即SysTick产生1ms的计数.
    在这里插入图片描述

(五)Systick的寄存器们

控制寄存器:STK_CSR, 0xE000E010:
在这里插入图片描述
第16位是计数标志位,SysTick自减到0时,该位置1。读取该位后,该位自动清零。COUNTFLAG为计数完毕标志,读取后会自动清零。
第2位是时钟源选择位,可以选择内部时钟或外部时钟作为时钟源。
第1位是中断使能位,用于决定自减为0后是否执行中断。TICKINT产生SysTick异常请求意思是产生中断。
第0位是定时器使能位。

重载寄存器:STK_LOAD, 0xE000E014
在这里插入图片描述
这个寄存器是用来装载我们需计数的次数的寄存器。(它给VAL寄存器装作数值)

当前值寄存器:STK_VAL, 0xE000E018: 在这里插入图片描述
每一个时钟周期,VAL的值自减1。
当VAL值为0时,会重新加载LOAD中的值,并且产生COUNTFLAG标志。(COUNTFLA标志在CTRL寄存器)

校准值寄存器:STK_CALRB, 0xE000E01C:
不是很重要

(六)Systick初始化:

思路:先使能,关闭中断,再装载值,最后再开启。
SysTick_Config()函数,功能:初始化systick、打开systick、打开systick的中断并设置优先级)
SysTick_CLKSourceConfig()函数,功能:用来选择时钟源

(七) deley文件夹介绍:

我们学习的是不使用OS的情况
在这里插入图片描述

(八)Systick写延迟函数:

思路:设置重装载值、当前值清零、使能SysTick、等待计数器计数完毕、当前值清零、关闭计数器、设置重装载值、当前值清零、使能SysTick、等待计数器计数完毕、当前值清零、关闭计数器
不使用OS系统时三个函数介绍:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
引用\[1\]是一段代码,其中定义了两个函数SysTick_Delay_us和SysTick_Delay_ms,用于延时一定的时间。这段代码还包括了一些头文件的引用和函数的声明。引用\[2\]是一个示例程序的一部分,其中调用了SysTick_DelayMS函数来实现LED灯的闪烁效果。在主函数中,先进行了一些初始化操作,然后通过循环不断地使LED灯亮和灭,每次延时500毫秒。引用\[3\]是关于系统定时时间的计算公式,其中的参数是SysTick_Config函数中的参数,通过这个公式可以计算出系统定时的时间。根据你的问题,你需要包含一个名为"bsp_SysTick.h"的头文件。 #### 引用[.reference_title] - *1* [SysTick系统定时器](https://blog.csdn.net/weixin_43772611/article/details/123413944)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [STM32F4无人机Systick滴答定时器](https://blog.csdn.net/xhj1021/article/details/123088515)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32学习笔记15:SysTick(系统定时器)](https://blog.csdn.net/qq_34471646/article/details/81977657)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值