一、SysTick定时器
SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常。他的作用是为各个不同任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期 的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时 器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问 它的寄存器,以维持操作系统“心跳”的节律。
SysTick系统定时器中有4个寄存器,分别是:
CTRL——SysTick控制及状态寄存器
LOAD——SysTick重装载数值寄存器
VAL——SysTick当前数值寄存器
CALIB——SysTick校准数值寄存器
在使用SysTick产生定时的时候,只需要配置前3个寄存器,最后一个校准寄存器不需要使用。
二、SVC和PendSV
SVC(系统服务调用,亦简称系统调用)和 PendSV(可悬起系统调用),它们多用于在 操作系统之上的软件开发中。SVC 用于产生系统函数的调用请求。例如,操作系统不让用户 程序直接访问硬件,而是通过提供一些系统服务函数,用户程序使用 SVC 发出对系统服务函 数的呼叫请求,以这种方法调用它们来间接访问硬件。因此,当用户程序想要控制特定的硬 件时,它就会产生一个 SVC 异常,然后操作系统提供的 SVC 异常服务例程得到执行,它再 调用相关的操作系统函数,后者完成用户程序请求的服务。
在一个系统中,如果有两个就绪的任务(任务A、任务B),通过SysTick的轮转调度启动两个任务的切换,如下图所示:

但是,如果在产生SysTick异常时正在响应一个中断,则SysTick异常会抢占其中断服务响应。在这时,系统会执行SysTick异常的上下文切换,而且在本次切换期间不能执行中断,只能等待下一次SysTick异常,因此中断请求就会被延迟,如下图所示:

为解决上述问题,引入了PendSV来解决这个问题,PendSV异常会自动延迟上下文切换的请求,直到其它的 ISR 都完成了处理后才放行。为实现这个机制,需要把 PendSV 编程为最低优先级的异常。如果 OS 检测到某 IRQ 正在活动并且被 SysTick 抢占,它将悬起一个 PendSV 异常, 以便缓期执行上下文切换。如下图所示:

个中事件的流水账记录如下:

  1. 任务 A 呼叫 SVC 来请求任务切换(例如,等待某些工作完成)
  2. OS 接收到请求,做好上下文切换的准备,并且 pend 一个 PendSV 异常。
  3. 当 CPU 退出 SVC 后,它立即进入 PendSV,从而执行上下文切换。
  4. 当 PendSV 执行完毕后,将返回到任务 B,同时进入线程模式。
  5. 发生了一个中断,并且中断服务程序开始执行
  6. 在 ISR 执行过程中,发生 SysTick 异常,并且抢占了该 ISR。
  7. OS 执行必要的操作,然后 pend 起 PendSV 异常以作好上下文切换的准备。
  8. 当 SysTick 退出后,回到先前被抢占的 ISR 中,ISR 继续执行
  9. ISR 执行完毕并退出后,PendSV 服务例程开始执行,并且在里面执行上下文切换
  10. 当 PendSV 执行完毕后,回到任务 A,同时系统再次进入线程模式。
    三、使用SysTick
    1、要使用systick定时器,只需调用SysTick_Config(uint32_t ticks)函数即可,
    函数自动完成:重装载值的装载,时钟源选择,计数寄存器复位,中断优先级的设置(最低),开中断,开始计数的工作。
    2、要修改时钟源调用SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource),也可按照SysTick_Config()中默认设置FCLK不变。
    3、要修改中断优先级调用
    void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
    应用说明:
    1、因systick是一个24位的定时器,故重装值最大值为2的24次方=16 777 215,要注意不要超出这个值。
    2、systick是cortex_m3的标配,不是外设。故不需要在RCC寄存器组打开他的时钟。
    3、每次systick溢出后会置位计数标志位和中断标志位,计数标志位在计数器重装载后被清除,而中断标志位也会随着中断服务程序的响应被清除,所以这两个标志位都不需要手动清除。
    4、采用使用库函数的方法,只能采用中断的方法响应定时器计时时间到,如要采用查询的方法,那只能采用设置systick的寄存器的方法,具体操作以后再做分析。

系统滴答定时器(SYSTICK)相关推荐

  1. linux调度周期systick怎么看,Cortex-M0系统滴答定时器Systick详解

    上图是LPC1114系统滴答定时器(SysTick)的结构图.系统滴答定时器位于Cortex-M0内核中,也就是说,不论是LPC1114,还是其他的Cortex-M0内核单片机,都有这个系统定时器.其 ...

  2. 【STM32】HAL库-系统滴答定时器SysTick

    SysTick定时器被捆绑在NVIC中,是一个简单的定时器,对于CM3.CM4内核芯片,都有Systick定时器.Systick定时器常用来做延时,或者实时系统的心跳时钟.这样可以节省MCU资源,不用 ...

  3. stm32滴答计时器_STM32 的系统滴答定时器( Systick) 彻底研究解读

    作者:王健 前言 SysTick 比起那些 TIM 定时器可以说简单多啦~~~~~哥的心情也好了不少, 嘎嘎!! ARM Cortex-M3 内核的处理器内部包含了一个 SysTick 定时器,它是一 ...

  4. stm32滴答计时器_STM32的系统滴答定时器(Systick)

    1.systick时钟来源 2.SysTick库函数 3.源码 /** *@} */ /** @defgroup SysTick_clock_source *@{ */ #define SysTick ...

  5. STM32系统滴答定时器(systick)应用

    一:系统滴答定时器(systick) 1.systick介绍 Systick就是一个定时器而已,只是它放在了NVIC中,主要的目的是为了给操作系统提供一个硬件上的中断(号称滴答中断).滴答中断?这里来 ...

  6. stm32滴答计时器_STM32之系统滴答定时器

    一.SysTick(系统滴答定时器)概述 操作系统需要一个滴答定时器周期性产生中断,以产生系统运行的节拍.在中断服务程序里,基于优先级调度的操作系统会根据进程优先级切换任务,基于时间片轮转系统会根据时 ...

  7. cube 设置滴答定时器_STM32CubeMX | 27-系统滴答定时器Systick的使用

    本篇文章主要介绍如何使用STM32中的系统滴答定时器Systick. 1. 准备工作 硬件准备开发板 首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi): 软件准备需要安装好 ...

  8. SysTick系统滴答定时器

    工作原理 SysTick系统滴答定时器是一个24位递减计数器计数器,向下计数,最大计数值为() SysTick系统滴答定时器,每个时钟周期-1,减到0后申请中断,并且会自动重装初值. 注意: 定时器的 ...

  9. 系统滴答定时器(systick)应用

    1.systick介绍 Systick就是一个定时器而已,只是它放在了NVIC中,主要的目的是为了给操作系统提供一个硬件上的中断(号称滴答中断).滴答中断?这里来简单地解释一下.操作系统进行运转的时候 ...

  10. SysTick系统滴答定时器(STM32F4xx系列)

    定时器概念 1.1 定时器的含义 1.2片上外设的定时器 1.3定时/延时原理 系统滴答定时器 2.1 为什么需要系统滴答定时器 2.2 系统滴答定时器概述 2.3 系统滴答定时器框架 2.4 系统滴 ...

最新文章

  1. linux 基础命令2
  2. vscode终端没显示_记一个VS Code终端显示问题的较完美解决
  3. 十八、梯度下降与反向传播
  4. 这代码她不美吗?——试题 基础练习 十六进制转八进制
  5. 我的Java后端书架
  6. python代码加密解密_在python中加密 – 在Javascript中解密
  7. 华岗(1977-),男,博士,宁波市智慧城市规划标准发展研究院副研究员.
  8. Multi-thread--C++11中thread的使用
  9. 关于Java锁机制面试官会怎么问,深刻易懂
  10. 三维闭合B样条曲线拟合算法Matlab代码
  11. JavaScript学习手册八:JS函数
  12. Docker - 基于NVIDIA-Docker的Caffe-GPU环境搭建
  13. NYOJ234吃土豆
  14. 新建 umi 项目,Error: Rendered more hooks 或者 Rendered fewer hooks
  15. IE浏览器低版本判断及升级提示
  16. 【已解决】树莓派新系统连接vcn后无任务栏如何解决?
  17. java两个字符串 相隔天数,计算两个日期之间相隔天数
  18. Ins任务侠v1.5.0
  19. 联邦学习开创团队锘崴科技获亿元级B轮融资, “隐私计算+”赋能重点行业
  20. 人人都是极客网络电子书出炉!!!

热门文章

  1. 分享:一个Java GUI五子连珠(附码云源码)~~~
  2. react 数据筛分绑定_处理实际生活污水短程硝化好氧颗粒污泥的快速培养_高景峰...
  3. css类选择器与id选择器_一点点的类:有效地使用CSS类选择器
  4. 【飞思卡尔 MC9S12】内部D-Flash模拟EEPROM
  5. 一、phpBB的安装
  6. 英国留学生论文Synthesis Essay写作技巧
  7. Stable Diffusion +ChatGPT+文本转语音+剪映制作视频
  8. 上海澜斌计算机有限公司,CIFX 50E-DP( )
  9. 电脑备忘录中怎么保存表格文件?
  10. C++基础课 —vi编辑器与C入门Demo