STM32库函数与滴答定时器(SysTick)

发布者:Joyful444Life最新更新时间:2024-10-09 来源: cnblogs关键字:STM32  库函数  滴答定时器  SysTick 手机看文章 扫描二维码
随时随地手机看文章

SysTick定时器:系统滴答定时器是一个非常基本的倒计时定时器,每隔一定的时间产生一个中断,即使是系统在睡眠模式下也能工作,它使得OS在各CM3器件间的移植过程中不必修改系统定时器的代码,将移植变得简单。滴答定时器被捆绑在NVIC中,用于产生SYSTICK异常。
功能:大多数操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。比如,为多个任务给予不同数目的时间片,确保没有一个任务能一直抢占CPU;或者将每个定时器周期的某个时间范围赐予特定的任务,为系统提供各种定时功能。
下面来看一下SysTick相关的几个寄存器

在V3.5库函数中,有关SysTick的相关配置在core_cm3.h中:

点击(此处)折叠或打开

  1. /**

  2.  * @brief Initialize and start the SysTick counter and its interrupt.

  3.  *

  4.  * @param ticks number of ticks between two interrupts

  5.  * @return 1 = failed, 0 = successful

  6.  *

  7.  * Initialise the system tick timer and its interrupt and start the

  8.  * system tick timer / counter in free running mode to generate

  9.  * periodical interrupts.

  10.  */

  11. static __INLINE uint32_t SysTick_Config(uint32_t ticks)

  12. {

  13.   if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */

  14.                                                                

  15.   SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */

  16.   NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */

  17.   SysTick->VAL = 0; /* Load the SysTick Counter Value */

  18.   SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |

  19.                    SysTick_CTRL_TICKINT_Msk |

  20.                    SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */

  21.   return (0); /* Function successful */

  22. }


从上面可以看出,V3.5库函数默认使用HCLK作为SysTick时钟,如想用SysTick计一个很长的值,可以选用HCLK/8作为其时钟,滴答定时器的校准值固定为9000,当时钟设置为9MHZ(HCLK/8)产生1ms的时间基准。


关键字:STM32  库函数  滴答定时器  SysTick 引用地址:STM32库函数与滴答定时器(SysTick)

上一篇:stm32中将结构体数据写到内部Flash时遇到的问题
下一篇:STM32最小系统设计

推荐阅读最新更新时间:2026-03-25 12:26

STM32菜鸟成长记录---系统滴答定时器systick)应用
1.systick介绍 Systick就是一个定时器而已,只是它放在了NVIC中,主要的目的是为了给操作系统提供一个硬件上的中断(号称滴答中断)。滴答中断?这里来简单地解释一下。操作系统进行运转的时候,也会有“心跳”。它会根据“心跳”的节拍来工作,把整个时间段分成很多小小的时间片,每个任务每次只能运行一个“时间片”的时间长度就得退出给别的任务运行,这样可以确保任何一个任务都不会霸占整个系统不放。或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。只要不把它在S
[单片机]
<font color='red'>STM32</font>菜鸟成长记录---系统<font color='red'>滴答</font><font color='red'>定时器</font>(<font color='red'>systick</font>)应用
STM32 F4 (8) Systick滴答定时器-延时函数讲解
SysTick定时器适用所有的STM32开发板,这节课讲解SysTick定时器产生的 延时函数,STM32开发指南5.1小节有有关SysTick相关的 介绍,在程序中在delay文件夹中,SysTick定时器是内核级别的,这个定时器很简单,主要用来延时和用作实时系统里面的心跳时钟 可以节省单片机资源,SysTick定时器就是系统滴答定时器,是一个24位的倒计数定时器,当他计数到0时就会从RELOD寄存器(重装载寄存器)重新装载计数初值,由此循环。只要 不把他的使能 位清除,他就会永不停息的工作,即使在睡眠模式下也能正常工作。 SysTick定时器它是捆绑在NVIC中,可以产生SysTick异常,SysTick也可以产生中断 ,
[单片机]
<font color='red'>STM32</font> F4 (8) <font color='red'>Systick</font><font color='red'>滴答</font><font color='red'>定时器</font>-延时函数讲解
STM32 SysTick 滴答定时器原理及应用
SysTick滴答定时器 一、功能 SysTick定时器是一个简单的定时器,CM3\CM4内核芯片都具备此定时器。SysTick定时器常用来做延时,采用实时系统时则用来做系统时钟。 无论用作延时还是用作系统心跳时钟,不需要太复杂的功能,SysTick即可胜任。 二、实现原理 SysTick定时器是一个24位的倒计数,当倒计数为0时,将从RELOAD寄存器中取值作为定时器的初始值,同时可以选择在这个时候产生中断(异常号:15)。 例如从RELOAD的值为999,那么当倒计数为0时,就会从复位为999继续倒计数。 只要不把它在SysTick控制及状态寄存器中的使能位清楚,就永不停息,即使在睡眠模式下也能继续工作。 三、SysT
[单片机]
Cortex-M4 Systick滴答定时器
Tickclock可以实现精确延时,在K60的datasheet中没有详细将,现在我把我找到资料分享一下,关于systick在Cortex-M4中有讲到 我们大家平常在单片机开发中经常会使用到延时函数,一般的,我们会使用变量自加循环判断的方法来实现软件延时。但是, 这种方法有个弊端——延时时间不精确。 主要体现在: 1, 在C语言编写的延时函数中,每条函数语句的执行时间可能不同,这样,在实现延时的过程中,想通过增加或减少函数语 句来实现延时的增加或减小控制起来不太方便,时间的精确性当然很难控制; 2, 由于各种不同的控制器运行的主频可能不同,执行相同的延时函数所需要的的时间值可能就不同。这样,使得这种延时函 数在不同
[单片机]
stm32 系统滴答定时器
使用步骤: 1.设置SysTick定时器的时钟源。 2.设置SysTick定时器的重装初始值 --中断要打开中断使能 3.清零SysTick定时器当前计数器的值 4.打开SysTick定时器 库函数:SysTick.c 初始化函数: void SysTick_Init(u8 SYSCLK) { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); fac_us = SYSCLK / 8; //SYSCLK的8分频保存1us所需的计数次数 fac_ms = (u16)fac_us*1000; //每个ms需要的systick时钟数
[单片机]
STM32——系统滴答定时器
一、SysTick【内核中】 【风格:先描述一下库对寄存器的封装,再举例实现某些功能】 SysTick定时器被捆绑在NVIC中,用于产生SysTick异常(异常号: 15)。在以前,操作系统还有所有使用了时基的系统,都必须一个硬件定时器来产生需要的“滴答”中断,作为整个系统的时基。滴答中断对操作系统尤其重要。例如,操作系统可以为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。 Corte
[单片机]
<font color='red'>STM32</font>——系统<font color='red'>滴答</font><font color='red'>定时器</font>
stm32滴答定时器(4):滴答定时器的优先级设置
上次讲的只剩滴答定时器的优先级设置函数NVIC_SetPriority没有讲,这个函数具体如下 static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) { if(IRQn 0) { SCB- SHP = ((priority (8 - __NVIC_PRIO_BITS)) & 0xff); } * set Priority for Cortex-M3 System Interrupts */ else { NVIC- IP = ((priority (8 - __NVIC_PRIO_BITS)) & 0xff); }
[单片机]
<font color='red'>stm32</font>之<font color='red'>滴答</font><font color='red'>定时器</font>(4):<font color='red'>滴答</font><font color='red'>定时器</font>的优先级设置
STM32之系统滴答定时器
一、SysTick(系统滴答定时器)概述   操作系统需要一个滴答定时器周期性产生中断,以产生系统运行的节拍。在中断服务程序里,基于优先级调度的操作系统会根据进程优先级切换任务,基于时间片轮转系统会根据时间片切换任务。总之,滴答定时器是一个操作系统的 心跳 。   Cortex-M3在内核部分封装了一个滴答定时器--SysTick,在之前的ARM内核通常是不会把定时器做进内核,定时器都是SOC厂商自己制作的外设。显然,Cortex-M3封装了这么一个定时器,对于将操作系统移植到不同SOC厂商生产的Cortex-M3系类MCU上,带来了极大的方便。Cortex-M3内核统一了这样的一个系统滴答定时器,移植操作系统的时候可以使用内
[单片机]
<font color='red'>STM32</font>之系统<font color='red'>滴答</font><font color='red'>定时器</font>
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved