Q:什么是SYSTick定时器?
SysTick是一个24位的倒计数定时器,当计到0时,将从RELOAD寄存器中
自动重装载定时初值。只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息。
Q:为什么要设置SysTick定时器?
(1)产生操作系统的时钟节拍
SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。
在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。
(2)便于不同处理器之间程序移植。
Cortex‐M3处理器内部包含了一个简单的定时器。因为所有的CM3芯片都带有这个定时器,软件在不同CM3器件间的移植工作得以化简。该定时器的时钟源可以是内部时钟(FCLK,CM3上的自由运行时钟),或者是外部时钟(CM3处理器上的STCLK信号)。
不过,STCLK的具体来源则由芯片设计者决定,因此不同产品之间的时钟频率可能会大不相同,你需要检视芯片的器件手册来决定选择什么作为时钟源。SysTick定时器能产生中断,CM3为它专门开出一个异常类型,并且在向量表中有它的一席之地。它使操作系统和其它系统软件在CM3器件间的移植变得简单多了,因为在所有CM3产品间对其处理都是相同的。
(3)作为一个闹铃测量时间。
SysTick定时器除了能服务于操作系统之外,还能用于其它目的:如作为一个闹铃,用于测量时间等。要注意的是,当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作。
Q:Systick如何运行?
首先设置计数器时钟源,CTRL->CLKSOURCE(控制寄存器)。设置重载值(R
ELOAD寄存器),清空计数寄存器VAL(就是CURRENT)。置CTRL->ENABLE位开始计时。
如果是中断则允许Systick中断,在中断例程中处理。如采用查询模式则不断读取控制寄存器的COUNTFLAG标志位,判断是否计时至零。或者采取下列一种方法
当SysTick定时器从1计到0时,它将把COUNTFLAG位置位;而下述方法可以清零:
1.读取SysTick控制及状态寄存器(STCSR)
2.往SysTick当前值寄存器(STCVR)中写任何数据
只有当VAL值为0时,计数器自动重载RELOAD。
Q:如何使用SysTicks作为系统时钟?
SysTick的最大使命,就是定期地产生异常请求,作为系统的时基。OS都需要这种“滴答”来推动任务和时间的管理。如欲使能SysTick异常,则把STCSR.TICKINT置位。另外,如果向量表被重定位到SRAM中,还需要为SysTick异常建立向量,提供其服务例程的入口地址.
关键字:SYSTick STM32 定时器
引用地址:
关于SYSTick的一些问题
推荐阅读最新更新时间:2024-11-09 13:57
从芯片架构到stm32
一.stm32的发展历程 1.芯片领域三大架构 和stm32有啥关系?别急! 2.ARM架构发展历程 注: 1 ARM公司在经典的ARM11以后的产品改用cortex命名,并分为A,R和M三类(针对不同市场需求),cortex系列属于ARMv7架构,ARMv7架构定义了三大分工明确的系列:“A”系列面向尖端的基于虚拟内存的操作系统和用户应用;“R”系列针对实时系统;“M”系列对微控制器。我们所用的stm32就属于M系列 2 以stm32F103为例,就是属于ARMv7架构,cortex-M系列下的M3核 3.ST公司及产品线 上面我们也说了,ARM公司只负责设计不负责生产芯片。stm32是ST公司生产的芯片。 简介
[单片机]
基于STM32+ESP8266+华为云IoT设计的健康管理系统并完成应用侧开发
近几年随着科技的进步和智能化浪潮的到来,智能穿戴设备也在飞速火爆发展,各种健康智能手环,智能手表、智能跑鞋、智能眼镜纷纷上市,并出现了很多针对个人家庭的健康管理设备。比如: 智能血压计、智能心率检测、脂肪秤、智能体重秤等等,都带上了智能、健康各种标签。 可穿戴设备,即直接穿在身上,或是整合到用户的衣服或配件的一种便携式设备。可穿戴设备不仅仅是一种硬件设备,更是通过软件支持以及数据交互、云端交互来实现强大的功能,可穿戴设备将会对生活、感知带来很大的转变。 这篇文章就利用STM32加上各种外设传感器配合华为云IOT物联网平台设计一个健康管理设备,通过ESP8266+MQTT协议将数据传输导致华为云物联网平台,并通过华为云的应用
[单片机]
STM32 Cubemax(九) ——利用输入捕获中断实现超声波测距
前言 因为要实现一下卡尔曼滤波,所以这次先写一下超声波,顺便重温一下输入捕获中断。 一、超声波模块原理 但凡在网上搜过超声波这个模块的,对这个图都不陌生,简单的说就是想得到超声波的数据,包含以下几个步骤。 1.发送大于10us的触发信号。 2.检测超声波发出信号时产生的高电平。 3.检测超声波接收到信号时产生的低电平 而我们就是通过后两步,即去检测处因为超声波产生的高电平的时间,从而来得到距离信息的。而输入捕获的作用就是用来去捕获高电平或者低电平的持续时间的 我们的编程就是根据上图来实现的。 二、Cubmax配置 1.配置定时器输入捕获 本实验板子为F407,分频系数选择84-1,则计数精度达到1us。10
[单片机]
N76E003 看门狗定时器 WDCON
一、复位功能配置 N76E003 提供一个看门狗定时器(WDT),它可以配置成一个超时复位定时器用于复位整个设备。一旦由于外界干扰设备进入非正常状态或挂起,看门狗可以复位恢复系统。 WDTEN (CONFIG4 )初始化WDT工作在超时复位定时器或通用定时器模式。 二、通用定时器配置 WDT带一个独立的分频器用于分频10K LIRC时钟。分频器的时钟分频可选,来决定超时间间隔。当达到超时间隔,系统会被从空闲或掉电模式唤醒,且如果WDT中断使能会产生一个中断事件。如果WDT初始化为一个超时复位定时器,在经过一个延时周期而软件没有任何动作后会产生系统复位。 超时复位定时器 当配置 CONFIG 位 WDTEN (CON
[单片机]
CC2530基于定时器1摸模式的秒闪灯
实验要求 代码实现 #include ioCC2530.h #define T1CCOL unsigned int #define T1CCOH unsigned int #define D4 P1_1 #define D6 P1_4 unsigned int count = 0; //端口初始化函数 void Init_Prot() { //配置4个LED灯的引擎 //选择端口的功能 P1SEL &=~0x1B;//设置通用io端口 //配置端口的方向 P1DIR |=0x1B; //关闭LED灯 P1 &=~0x1B; } //定时器的初始化 void Init_Timer1() { /
[单片机]
STM32单片机输出比较模式解析
此项功能是用来控制一个输出波形,或者指示一段给定的的时间已经到时。 当计数器与捕获/比较寄存器的内容相同时,输出比较功能做如下操作: ● 将输出比较模式(TIMx_CCMRx寄存器中的OCxM位)和输出极性(TIMx_CCER寄存器中的CCxP位)定义的值输出到对应的引脚上。在比较匹配时,输出引脚可以保持它的电平 (OCxM=000)、被设置成有效电平(OCxM=001)、被设置成无效电平(OCxM=010)或进行翻转(OCxM=011)。 ● 设置中断状态寄存器中的标志位(TIMx_SR寄存器中的CCxIF位)。 ● 若设置了相应的中断屏蔽(TIMx_DIER寄存器中的CCxIE位),则产生一个中断。 ● 若设置了相应的使能
[单片机]
比较精简的stm32编码器程序
01.#define ROTATE_A PAin(2) 02.#define ROTATE_B PAin(3) 03.s16 DATA=0; 04. 05.void EXti2_IRQHandler(void) 06.{ 07. IF(EXTI_GetITStatus(EXTI_Line2) != RESET) 08. { 09. if(ROTATE_A!=ROTATE_B) 10. { 11. DATA++; 12. } 13. else DATA--; 14. EXTI_ClearITPendingBit(EXTI_Line2); 15. }
[单片机]
一文详解STM32的嘀嗒时钟(SysTick)
简要说明 1概述 嘀嗒时钟(SysTick)是一个简单的系统时钟节拍计数器,它属于Cortex-M4内核嵌套向量中断控制器(NVIC)里的一个功能单元。他是一个24位的倒计时定时器(在NVIC中),当systick计数值到0的时候,SysTick重装载寄存器就会自动重新装载初值。只要SysTick控制和状态寄存器(CTRL)中的使能位没有ENABLE清除掉,那么就会永远的执行下去。 SysTick定时器被捆绑在NVIC中,可产生SysTick异常(异常号:15),属于Cortex-M4内核里的一个功能单元。 SysTick常作为系统节拍定时器用于操作系统(如mCOS-Ⅱ、FreeRTOS等)的系统节拍定时,从而推动任务和时间的
[单片机]