第18章 SysTick—系统定时器—零死角玩转STM32-F429系列

STM32(四):Systick (标准库函数) 上一篇文章已经介绍了如何用外部中断的方式进行点灯,实现了点灯的第三种方式。这篇文章我们来介绍一下如何用STM32单片机中的Systick嘀嗒定时器来控制LED灯的交替闪烁以及如何使用系统滴答定时器实现精准的 ms 和 μs 延时。 阅读详情
第18章     SysTick—系统定时器

全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn

野火视频教程优酷观看网址:http://i.youku.com/firege

 

 

本章参考资料《 ARM Cortex™-M4F 技术参考手册》-4.5 章节SysTick Timer(STK),和4.48章节SHPRx,其中STK这个章节有SysTick的简介和寄存器的详细描述。因为SysTick是属于CM4内核的外设,有关寄存器的定义和部分库函数都在core_cm4.h这个头文件中实现。所以学习SysTick的时候可以参考这两个资料,一个是文档,一个是源码。

18.1 SysTick简介

SysTick—系统定时器是属于CM4内核中的一个外设,内嵌在NVIC中。系统定时器是一个24bit的向下递减的计数器,计数器每计数一次的时间为1/SYSCLK,一般我们设置系统时钟SYSCLK等于180M。当重装载数值寄存器的值递减到0的时候,系统定时器就产生一次中断,以此循环往复。

因为SysTick是属于CM4内核的外设,所以所有基于CM4内核的单片机都具有这个系统定时器,使得软件在CM4单片机中可以很容易的移植。系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。

18.2 SysTick寄存器介绍

SysTick—系统定时有4个寄存器,简要介绍如下。在使用SysTick产生定时的时候,只需要配置前三个寄存器,最后一个校准寄存器不需要使用。

表 181 SysTick寄存器汇总

寄存器名称

寄存器描述

CTRL

SysTick控制及状态寄存器

LOAD

SysTick重装载数值寄存器

VAL

SysTick当前数值寄存器

CALIB

SysTick校准数值寄存器

表 182 SysTick控制及状态寄存器

位段

名称

类型

复位值

描述

16

COUNTFLAG

R/W

0

如果在上次读取本寄存器后, SysTick 已经计到
了 0,则该位为 1。

2

CLKSOURCE

R/W

0

时钟源选择位,0=AHB/8,1=处理器时钟AHB

1

TICKINT

R/W

0

1=SysTick倒数计数到 0时产生 SysTick异常请
求,0=数到 0 时无动作。也可以通过读取COUNTFLAG标志位来确定计数器是否递减到0

0

ENABLE

R/W

0

SysTick 定时器的使能位

表 183 SysTick 重装载数值寄存器

位段

名称

类型

复位值

描述

23:0

RELOAD

R/W

0

当倒数计数至零时,将被重装载的值

表 184 SysTick当前数值寄存器

位段

名称

类型

复位值

描述

23:0

CURRENT

R/W

0

读取时返回当前倒计数的值,写它则使之清零,同时还会清除在SysTick控制及状态寄存器中的COUNTFLAG 标志

表 185 SysTick校准数值寄存器

位段

名称

类型

复位值

描述

31

NOREF

R

0

NOREF flag. Reads as zero. Indicates that a separate reference clock is provided.
The frequency of this clock is HCLK/8

30

SKEW

R

1

SKEW flag: Indicates whether the TENMS value is exact. Reads as one. Calibration
value for the 1 ms inexact timing is not known because TENMS is not known. This can affect
the suitability of SysTick as a software real time clock

23:0

TENMS

R

0

Calibration value. Indicates the calibration value when the SysTick counterruns on HCLK max/8 as external clock. The value is product dependent, please refer to theProduct Reference Manual, SysTick Calibration Value section. When HCLK is programmed atthe maximum frequency, the SysTick period is 1ms.
If calibration information is not known, calculate the calibration value required from thefrequency of the processor clock or external clock

系统定时器的校准数值寄存器在定时实验中不需要用到。有关各个位的描述这里引用手册里面的英文版本,比较晦涩难懂,暂时不知道这个寄存器用来干什么。有研究过的朋友可以交流,起个抛砖引玉的作用。

18.3 SysTick定时实验

利用SysTick产生1s的时基,LED以1s的频率闪烁。

18.3.1 硬件设计

SysTick属于单片机内部的外设,不需要额外的硬件电路,剩下的只需一个LED灯即可。

18.3.2 软件设计

这里只讲解核心的部分代码,有些变量的设置,头文件的包含等并没有涉及到,完整的代码请参考本章配套的工程。我们创建了两个文件:bsp_SysTick.c和bsp_ SysTick.h文件用来存放SysTick驱动程序及相关宏定义,中断服务函数放在stm32f4xx_it.h文件中。

1.    编程要点

1、设置重装载寄存器的值

2、清除当前数值寄存器的值

3、配置控制与状态寄存器

2.    代码分析

SysTick 属于内核的外设,有关的寄存器定义和库函数都在内核相关的库文件core_cm4.h中。

SysTick配置库函数

代码 181SysTick配置库函数

1 __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

2 {

3 // 不可能的重装载值,超出范围

4 if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {

5 return (1UL);

6 }

7

8 // 设置重装载寄存器

9 SysTick->LOAD = (uint32_t)(ticks - 1UL);

10

11 // 设置中断优先级

12 NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);

13

14 // 设置当前数值寄存器

15 SysTick->VAL = 0UL;

16

17 // 设置系统定时器的时钟源为AHBCLK=180M

18 // 使能系统定时器中断

19 // 使能定时器

20 SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |

21 SysTick_CTRL_TICKINT_Msk |

22 SysTick_CTRL_ENABLE_Msk;

23 return (0UL);

24 }

用固件库编程的时候我们只需要调用库函数SysTick_Config()即可,形参ticks用来设置重装载寄存器的值,最大不能超过重装载寄存器的值2^24,当重装载寄存器的值递减到0的时候产生中断,然后重装载寄存器的值又重新装载往下递减计数,以此循环往复。紧随其后设置好中断优先级,最后配置系统定时器的时钟为180M,使能定时器和定时器中断,这样系统定时器就配置好了,一个库函数搞定。

SysTick_Config()库函数主要配置了SysTick中的三个寄存器:LOAD、VAL和CTRL,有关具体的部分看代码注释即可。

配置SysTick中断优先级

在SysTick_Config()库函数还调用了固件库函数NVIC_SetPriority()来配置系统定时器的中断优先级,该库函数也在core_m4.h中定义,原型如下:

1 __STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

2 {

3 if ((int32_t)IRQn < 0) {

4 SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL)-4UL] =

5 (uint8_t)((priority << (8 - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

6 } else {

7 NVIC->IP[((uint32_t)(int32_t)IRQn)] =

8 (uint8_t)((priority << (8 - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

9 }

10 }

因为SysTick属于内核外设,跟普通外设的中断优先级有些区别,并没有抢占优先级和子优先级的说法。在STM32F429中,内核外设的中断优先级由内核SCB这个外设的寄存器:SHPRx(x=1.2.3)来配置。有关SHPRx寄存器的详细描述可参考《Cortex-M4内核编程手册》4.4.8章节。下面我们简单介绍下这个寄存器。

SPRH1-SPRH3是一个32位的寄存器,但是只能通过字节访问,每8个字段控制着一个内核外设的中断优先级的配置。在STM32F429中,只有位7:3这高四位有效,低四位没有用到,所以内核外设的中断优先级可编程为:0~15,只有16个可编程优先级,数值越小,优先级越高。如果软件优先级配置相同,那就根据他们在中断向量表里面的位置编号来决定优先级大小,编号越小,优先级越高。

表 186 系统异常优先级字段

异常

字段

寄存器描述

Memory management fault

PRI_4

SHPR1

Bus fault

PRI_5

Usage fault

PRI_6

SVCall

PRI_11

SHPR2

PendSV

PRI_14

SHPR3

SysTick

PRI_15

如果要修改内核外设的优先级,只需要修改下面三个寄存器对应的某个字段即可。

图 181 SHPR1寄存器

图 182 SHPR2寄存器

图 183 SHPR3寄存器

在系统定时器中,配置优先级为(1UL << __NVIC_PRIO_BITS) - 1UL),其中宏__NVIC_PRIO_BITS为4,那计算结果就等于15,可以看出系统定时器此时设置的优先级在内核外设中是最低的。

1 // 设置系统定时器中断优先级

2 NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);

但是,问题来了,刚刚我们只是学习了内核的外设的优先级配置。如果我同时使用了systick和片上外设呢?而且片上外设也刚好需要使用中断,那systick的中断优先级跟外设的中断优先级怎么设置?会不会因为systick是内核里面的外设,所以它的中断优先级就一定比内核之外的外设的优先级高?

从《STM32中断应用概览》这章我们知道,外设在设置中断优先级的时候,首先要分组,然后设置抢占优先级和子优先级。而systick这类内核的外设在配置的时候,只需要配置一个寄存器即可,取值范围为0~15。既然配置方法不同,那如何区分两者的优先级?下面举例说明。

比如配置一个外设的中断优先级分组为2,抢占优先级为1,子优先级也为1,systick的优先级为固件库默认配置的15。当我们比较内核外设和片上外设的中断优先级的时候,我们只需要抓住NVIC的中断优先级分组不仅对片上外设有效,同样对内核的外设也有效。我们把systick的优先级15转换成二进制值就是1111(0b),又因为NVIC的优先级分组2,那么前两位的11(0b)就是3,后两位的11(0b)也是3。无论从抢占还是子优先级都比我们设定的外设的优先级低。如果当两个的软件优先级都配置成一样,那么就比较他们在中断向量表中的硬件编号,编号越小,优先级越高。

SysTick初始化函数

代码 182 SysTick初始化函数

1 /**

2 * @brief 启动系统滴答定时器 SysTick

3 * @param 无

4 * @retval 无

5 */

6 void SysTick_Init(void)

7 {

8 /* SystemFrequency / 1000 1ms中断一次

9 * SystemFrequency / 100000 10us中断一次

10 * SystemFrequency / 1000000 1us中断一次

11 */

12 if (SysTick_Config(SystemCoreClock / 100000)) {

13 /* Capture error */

14 while (1);

15 }

16 }

SysTick初始化函数由用户编写,里面调用了SysTick_Config()这个固件库函数,通过设置该固件库函数的形参,就决定了系统定时器经过多少时间就产生一次中断。

SysTick中断时间的计算

SysTick定时器的计数器是向下递减计数的,计数一次的时间TDEC=1/CLKAHB,当重装载寄存器中的值VALUELOAD减到0的时候,产生中断,可知中断一次的时间TINT=VALUELOAD * TDEC中断= VALUELOAD/CLKAHB,其中CLKAHB =180MHZ。如果设置为180,那中断一次的时间TINT=180/180M=1us。不过1us的中断没啥意义,整个程序的重心都花在进出中断上了,根本没有时间处理其他的任务。

SysTick_Config(SystemCoreClock / 100000))

SysTick_Config()的形我们配置为SystemCoreClock / 100000=180M/100000=1800,从刚刚分析我们知道这个形参的值最终是写到重装载寄存器LOAD中的,从而可知我们现在把SysTick定时器中断一次的时间TINT=1800/180M=10us。

SysTick定时时间的计算

当设置好中断时间TINT后,我们可以设置一个变量t,用来记录进入中断的次数,那么变量t乘以中断的时间TINT就可以计算出需要定时的时间。

SysTick定时函数

现在我们定义一个微秒级别的延时函数,形参为nTime,当用这个形参乘以中断时间TINT就得出我们需要的延时时间,其中TINT我们已经设置好为10us。关于这个函数的具体调用看注释即可。

1 /**

2 * @brief us延时程序,10us为一个单位

3 * @param

4 * @arg nTime: Delay_us( 1 ) 则实现的延时为 1 * 10us = 10us

5 * @retval 无

6 */

7 void Delay_us(__IO u32 nTime)

8 {

9 TimingDelay = nTime;

10

11 while (TimingDelay != 0);

12 }

 

函数Delay_us()中我们等待TimingDelay为0,当TimingDelay为0的时候表示延时时间到。变量TimingDelay在中断函数中递减,即SysTick每进一次中断即10us的时间TimingDelay递减一次。

SysTick中断服务函数

1 void SysTick_Handler(void)

2 {

3 TimingDelay_Decrement();

4 }

中断复位函数调用了另外一个函数TimingDelay_Decrement(),原型如下:

1 /**

2 * @brief 获取节拍程序

3 * @param 无

4 * @retval 无

5 * @attention 在 SysTick 中断函数 SysTick_Handler()调用

6 */

7 void TimingDelay_Decrement(void)

8 {

9 if (TimingDelay != 0x00) {

10 TimingDelay--;

11 }

12 }

TimingDelay的值等于延时函数中传进去的nTime的值,比如nTime=100000,则延时的时间等于100000*10us=1s。

主函数

1 int main(void)

2 {

3 /* LED 端口初始化 */

4 LED_GPIO_Config();

5

6 /* 配置SysTick 为10us中断一次,时间到后触发定时中断,

7 *进入stm32fxx_it.c文件的SysTick_Handler处理,通过数中断次数计时

8 */

9 SysTick_Init();

10

11 while (1) {

12

13 LED_RED;

14 Delay_us(100000); // 10000 * 10us = 1000ms

15

16 LED_GREEN;

17 Delay_us(100000); // 10000 * 10us = 1000ms

18

19 LED_BLUE;

20 Delay_us(100000); // 10000 * 10us = 1000ms

21 }

22 }

主函数中初始化了LED和SysTick,然后在一个while循环中以1s的频率让LED闪烁。

上面的实验,我们是使用了中断,而且经过多个函数的调用,还使用了全局变量,理解起来挺费劲的,其实还有另外一种更简洁的写法。我们知道,systick的counter从reload值往下递减到0的时候,CTRL寄存器的位16:countflag会置1,且读取该位的值可清0,所有我们可以使用软件查询的方法来实现延时。具体代码见代码 183和代码 184,我敢肯定这样的写法,初学者肯定会更喜欢,因为它直接,套路浅。

代码 183 systick 微秒级延时

1 void SysTick_Delay_Us( __IO uint32_t us)

2 {

3 uint32_t i;

4 SysTick_Config(SystemCoreClock/1000000);

5

6 for (i=0; i<us; i++) {

7 // 当计数器的值减小到0的时候,CRTL寄存器的位16会置1

8 while ( !((SysTick->CTRL)&(1<<16)) );

9 }

10 // 关闭SysTick定时器

11 SysTick->CTRL &=~SysTick_CTRL_ENABLE_Msk;

12 }

 

代码 184 systick 毫秒级延时

1 void SysTick_Delay_Ms( __IO uint32_t ms)

2 {

3 uint32_t i;

4 SysTick_Config(SystemCoreClock/1000);

5

6 for (i=0; i<ms; i++) {

7 // 当计数器的值减小到0的时候,CRTL寄存器的位16会置1

8 // 当置1时,读取该位会清0

9 while ( !((SysTick->CTRL)&(1<<16)) );

10 }

11 // 关闭SysTick定时器

12 SysTick->CTRL &=~ SysTick_CTRL_ENABLE_Msk;

13 }

另外一种更简洁的定时编程

在这两个微秒和毫秒级别的延时函数中,我们还是调用了SysTick_Config这个固件库函数,有关这个函数的说明具体见代码 185。配套代码注释理解即可。其中SystemCoreClock是一个宏,大小为72000000,如果不想使用这个宏,也可以直接改成数字。

代码 185 systick 配置函数

1 // 这个固件库函数在 core_cm3.h中

2 static __INLINE uint32_t SysTick_Config(uint32_t ticks)

3 {

4 // reload 寄存器为24bit,最大值为2^24

5 if (ticks > SysTick_LOAD_RELOAD_Msk) return (1);

6

7 // 配置 reload 寄存器的初始值

8 SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;

9

10 // 配置中断优先级为 1<<4 -1 = 15,优先级为最低

11 NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);

12

13 // 配置 counter 计数器的值

14 SysTick->VAL = 0;

15

16 // 配置systick 的时钟为 72M

17 // 使能中断

18 // 使能systick

19 SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |

20 SysTick_CTRL_TICKINT_Msk |

21 SysTick_CTRL_ENABLE_Msk;

22 return (0);

23 }

18.4 每课一问

1、如果修改SysTick的中断优先级?

2、如何计算SysTick进入一次中断的时间?

3、如何利用SysTick实现一个1ms的延时?

4、系统滴答时钟SysTick 系统滴答时钟SysTick 阅读详情

相关推荐

五、stm32-SysTick(系统定时器)

五、stm32-SysTick(系统定时器)

洛尘的博客 2143

[STM32 - 野火] - - - 固件库学习笔记 - - -四.SysTick——系统定时器

官方详细介绍在 STM32F10xxx Cortex-M3编程手册 - 英文版 4.5 SysTick timer(STK)。

优快云_PBB的博客 1711

Ubuntu的初步环境配置(VMware)

4.屏幕显示不全解决完后,在试用Ubuntu里面,直接双击“安装Ubuntu 20.04.6 LTS”。如果不存在“屏幕显示不全”的问题,直接点击安装即可,大致安装步骤与以下步骤类似。15.点击现在重启,重启成功后,会出现“清除安装介质”的问题。19.此时点开火狐,可以上网,但只可输入英文,不可以输入中文,具体解决方法见3.2。3.进入安装界面,此时可能会出现“屏幕显示不全”的问题,具体解决方法见3.1。8.选择“正常安装”、“安装Ubuntu时下载更新”,点击继续。最后,点击保留更改,设置成功。

森菌蛙诺的博客 2276

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)

基于STM32的实时操作系统FreeRTOS移植教程(手动移植与CubeMX快速生成),文章内容充实详尽,文末有代码开源!

black_sneak的博客 1万+

MS1861宏晶微视频显示与控制器芯片:开发资料全解析与应用指南

本文全面解析了宏晶微MS1861视频显示与控制器芯片的核心功能与开发流程。该芯片作为高性能的“视频信号翻译官”,支持HDMI、LVDS等多种输入与MIPI、LVDS等输出,集成强大的图像处理与OSD叠加功能。文章详细介绍了从资料获取、环境搭建到以HDMI转MIPI为例的实战配置与调试技巧,为工业HMI、广告机等应用的开发者提供了完整的应用指南。

weixin_29198045的博客 337

TekTronix 高速信号完整性基础以及测试方法分析

如果信号速率比较高,则CTLE与FFE都无法满足要求,尤其是大于10G,比如USB3.1Gen2 10Gbps,PCIe4.0 16Gbps,这些场合都会采用DFE均衡,DFE的优点是,它既可以识别当前比特,并且可以判决前面的n个比特(Tap的阶数越高,看到的前面的比特数越多),根据前面比特的变化来计算出要处理当前比特所要变化的幅度,来补偿由于前面比特变化所引起的信号幅度的变化。10G以下,一般都不太关心这个串扰,高于10G的信号,会发现相互之间的串扰越来越明显,已经成为引起误码的重要的原因之一。

weixin_45365488的博客 4142

SysTick滴答定时器使用库函数实现1us和1ms精确定时(超短代码)(内含源码.c/.h)

SysTick—系统定时器是属于CM4内核中的一个外设,内嵌在NVIC中。一般我们叫他系统定时器或者滴答定时器。是一个24bit的向下递减的计数器,计数器每计数一次的时间为1/SYSCLK,当重装载数值寄存器的值递减到 0的时候,系统定时器就产生一次中断,以此循环往复。嵌入式操作系统常有一个类似“心跳”的定时器,来分配时间片,实现宏观上的多任务。其实,操作系统的多任务,在微观上,CPU对多任务的管理是分时的。

Msuperhl的博客 4657

告别电机啸叫!手把手教你配置TMC5160的StealthChop2静音模式(附参数自整定避坑指南)

本文详细介绍了如何通过配置TMC5160的StealthChop2模式彻底消除3D打印机电机噪音。从硬件准备到参数自整定,再到高级调优与异常处理,手把手教你实现实验室级别的静音效果,提升打印质量和使用体验。

weixin_33724659的博客 487

嵌入式软硬件结合(二)——SysTick系统定时器

下一章,琢磨中断!

zmudong的博客 696

抖音小游戏上架避坑指南:从软著申请到ICP备案全流程解析

本文详细解析了抖音小游戏上架前必须完成的软著申请和ICP备案全流程,提供了清晰的时间线规划与实操避坑指南。文章重点阐述了个人与企业备案的区别、材料准备要点以及平台审核常见问题,旨在帮助独立开发者和小团队高效、合规地完成游戏上架,避免在行政流程中延误项目。

weixin_29276847的博客 1557

使用 Cadence ams 仿真器 对 混合信号电路 进行仿真

文章目录Cadence 基于ams仿真器的混合信号电路仿真建立数字(Digital)模块建立 Analog - Digital 混合仿真原理图建立 Analog - Digital 混合仿真config文件配置混合信号电路仿真环境针对混合信号电路demo进行仿真 Cadence 基于ams仿真器的混合信号电路仿真 你好,这里是一篇关于使用 Cadence 软件通过 ams 仿真器对混合信号电路(D...

mymatin1004的博客 2万+

systick 时间修改_第18章 SysTick—系统定时器—零死角玩转STM32-F429系列

第18章 SysTick—系统定时器全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn野火视频教程优酷观看网址:http://i.youku.com/firege本章参考资料《ARM Cortex™-M4F技术参考手册》-4.5章节SysTick Timer(STK),和4.48章节SHPRx,其中STK这个章节有SysTick的简介和寄存器的详细描述...

weixin_30380991的博客 442

Ubuntu22.04 上ROS1 Noetic的安装与常见问题解决

本文详细介绍了在Ubuntu 22.04系统上安装ROS1 Noetic的两种主要方法:推荐使用社区维护的适配仓库进行便捷安装,并提供了从源码编译的备选方案。文章重点解决了安装后编译ROS包时极易遇到的“shared_mutex”等C++标准库冲突问题,并给出了其他常见错误的排查与解决指南,帮助开发者顺利搭建稳定的ROS开发环境。

weixin_29295541的博客 363

第15讲-系统定时器(SysTick)

SysTick系统定时器。

weixin_73005210的博客 195

MATLAB 基于 Baker 映射和 Logistic 混沌序列的图像加解密实现

图像加密是信息安全领域的重要研究方向,在数字版权保护、隐私保护等领域有着广泛应用。本文将介绍基于 MATLAB 的 Baker 映射和 Logistic 混沌序列的图像加解密算法,该算法利用混沌系统的初值敏感性和伪随机性,能够有效地对图像进行加密和解密。基于 Baker 映射和 Logistic 混沌序列的图像加解密算法是一种有效的方法,可以应用于数字版权保护、隐私保护等领域。MATLAB 提供了强大的工具和函数,可以方便地实现该算法。

走向CTO的路上... 935

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

STM32学习笔记(5)——系统定时器SysTick

单独拿出来讲的一个内核外设(所以不要期望在STM32中文参考手册找到它!即使找到也只会叫你看cm3内核编程手册),说明它真的很重要。 STM32学习笔记(5)——系统定时器SysTick一、系统定时器Systick1. SysTick简介2. SysTick相关寄存器(1)SysTick control and status register (STK_CTRL)(2)SysTick reload value register (STK_LOAD)(3)SysTick current value regis

Mount256的博客 1984

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

stm32上最方便的定时器Systick[操作寄存器+库函数]

Systick 是stm32上一个用处很多的内设,所有基于arm-cortex m3 的芯片都有这个定时器,所以考虑到平台的可移植性时,可以多使用Systick。   Systick 是一个24位数据宽度的倒计数定时器,其计数范围只能到 1677215(2^24),当计数到0时会从RELOAD寄存器 中自动重装定时初值。只要不把SysTick的控制及状态寄存器中的使能位清除,计数器就不会停止。

生如夏花 4225

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

嵌入式学习笔记——SysTick(系统滴答)

SysTick(系统滴答)

qq_41954556的博客 1万+

SysTick——系统定时器(标准库)

STM32F4系统滴答时钟SYSTick

zhaodingxing的博客 2133

STM32学习 --SysTick定时器(寄存器)

Cortex-M处理器内集成了一个小型的名为SysTick(系统节拍)的定时器,它属于NVIC(的一部分,且可以产生SysTick 异常(异常类型#15)。SysTick为简单的向下计数的24位计数器,可以使用处理器时钟或外部参考时钟(通常是片上时钟源)。...

GHFR233的博客 4236

嵌入式开发(7)系统定时器(SysTick)之延时函数运用

SysTick 叫做系统滴答时钟、系统定时器,属于 Cortex-M4 内核中的一个外设(外围设备),也是属于NVIC的一部分,并且是24bit向下递减的计数器。2^24-1向下计数 往下-1到0 然后触发中断。《STM32中文参考手册》P108RCC向 Cortex 系统定时器 (SysTick) 馈送 8 分频的 AHB 时钟 (HCLK)——》21MHZ。SysTick 可使用此时钟。作为时钟源,也可使用HCLK。

Yank_k的博客 5097

STM32的SYSTICK详解

什么是SysTick? 这是一个24位的系统节拍定时器system tick timer,SysTick,具有自动重载和溢出中断功能,所有基于Cortex_M3处理器的微控制器都可以由这个定时器获得一定的时间间隔。 SysTick作用 在单任务引用程序中,因为其架构就决定了它执行任务的串行性,这就引出一个问题:当某个任务出现问题时,就会牵连到后续的任务,进而导致整个系

tianshi_1988的专栏 1万+

STM32_SysTick—系统定时器

SysTick 学习SysTick可以参考: 《Cortex-M3 内核编程手册》-4.5 章节 SysTick Timer(STK),和 4.48 章节 SHPRx,其中 STK 这个章节有 SysTick 的简介和寄存器的详细描述。因为 SysTick 是属于 CM3 内核的外设,有关寄存器的定义和部分库函数都在 core_CM3.h 这个头文件中实现。 所以学习 SysTick 的时候可以参考这两个资料,一个是文档,一个是源码。 SysTick 简介 SysTick—系统定时器是属于 CM3 内核中的

兰天禄的博客 4875

SysTick-系统定时器

Systick系统定时器是内核的24位定时器,只能够递减,嵌套在NVIC中,所有的Cortex-M内核的单片机都具有这个定时器,系统嘀嗒校准值固定为9000,当系统嘀嗒时钟设定为9MHz(HCLK/8的大值),产生1ms时间基准 功能框图如下: 下面是SysTick 控制和状态寄存器,只有0,1,2,16这四个位有效 Systick的时钟源可以选择AHB/8或者AHB Systick寄存器操...

qq_41936794的博客 743
上一篇: 第17章 EXTI—外部中断/事件控制器—零死角玩转STM32-F429系列
下一篇: 第19章 通讯的基本概念—零死角玩转STM32-F429系列
0木木0
博客等级 码龄17年 458粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值