历史上的今天
返回首页

历史上的今天

今天是:2025年03月16日(星期日)

正在发生

2020年03月16日 | STM32F407ZGT6芯片SysTick定时器模块介绍

2020-03-16 来源:eefocus

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


SysTick简介

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


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


SysTick寄存器介绍


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


表1.SysTick寄存器汇总

image.png?imageView2/2/w/550

表2. SysTick控制及状态寄存器

image.png?imageView2/2/w/550

表3. SysTick重装载数值寄存器

image.png?imageView2/2/w/550

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


SysTick配置库函数


__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

{

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

if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) 

{

return (1UL);

}

 

/* 设置重装载寄存器 */

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

 

/* 设置中断优先级0x0F */

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

 

/* 设置当前数值寄存器的值为0 */

SysTick->VAL = 0UL;

 

/* 设置系统定时器的时钟源为AHB_CLK=168MHz

* 使能系统定时器中断

* 使能定时器

*/

SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |

SysTick_CTRL_TICKINT_Msk |

SysTick_CTRL_ENABLE_Msk;

 

/* 正常情况返回0 */

return (0UL);

}


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


SysTick_Config()库函数主要配置了SysTick中的三个寄存器:LOAD、VAL和CTRL,有关具体的部分看代码注释即可。其中还调用了固件库函数NVIC_SetPriority()来配置系统定时器的中断优先级,该库函数也在core_m4.h中定义,原型如下:


__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

{

if ((int32_t)IRQn < 0) 

{

SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8 - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

}else 

{

NVIC->IP[((uint32_t)(int32_t)IRQn)] = (uint8_t)((priority << (8 - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);

}

}

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


本文完结!

推荐阅读

史海拾趣

FORYARD公司的发展小趣事

进入21世纪后,随着新能源汽车产业的兴起,FORYARD敏锐地捕捉到了这一市场机遇。公司开始将研发重心转向汽车电子领域,特别是新能源汽车的电池管理系统(BMS)和电机控制器(MCU)等关键技术。通过持续的技术创新和研发投入,FORYARD成功开发出了一系列高性能、高可靠性的汽车电子产品,并成功应用于多家知名新能源汽车制造商的车型中。这一举措不仅为公司带来了新的增长点,也推动了新能源汽车产业的快速发展。

Brainboxes公司的发展小趣事

Brainboxes公司成立于1984年,总部位于英国利物浦市。创立之初,公司专注于数据和I/O连接产品的设计和制造。凭借对串行通信技术的深刻理解,Brainboxes迅速在行业内崭露头角。其早期产品,如串口服务器和适配器,因高度可配置和可靠的特性而受到市场的欢迎。随着业务的发展,公司逐渐扩大产品线,涵盖IO模块等多个领域。

Fischer Elektronik公司的发展小趣事

为了更好地服务全球客户,Fischer Elektronik积极实施国际化战略。公司在全球范围内建立了多个生产基地和销售网络,以确保能够快速响应市场需求并提供高质量的产品和服务。通过多年的努力,Fischer Elektronik已经成功进入了众多国际市场,并与众多知名企业建立了长期合作关系。这些合作不仅提升了公司的品牌知名度,也为其带来了更多的商业机会和发展空间。

AR RF/Microwave Instrumentation公司的发展小趣事

面对未来的发展,AR RF/Microwave Instrumentation制定了明确的战略规划。他们将继续加大在研发和创新方面的投入,推出更多具有创新性和竞争力的产品。同时,公司还将积极拓展新的应用领域和市场,寻求更多的合作机会,以实现更加广泛的发展。

请注意,以上仅为概述性的故事框架,并非具体的事实描述。如果你需要更详细、具体的故事内容,建议查阅AR RF/Microwave Instrumentation公司的官方资料、新闻报道或行业分析报告等,以获取更准确的信息。

Forge Europa Ltd公司的发展小趣事

在全球化布局的同时,Forge Europa Ltd公司也注重在中国市场的本土化深耕。公司在中国设立了研发中心和生产基地,以更好地服务中国市场并融入本土产业链。通过深入了解中国市场的需求和特点,Forge Europa不断调整产品策略,推出了一系列符合中国市场需求的LED灯带产品。此外,公司还积极与中国本土企业合作,共同推动LED照明技术的发展和应用。

DFI公司的发展小趣事

随着市场竞争的加剧,DFI意识到单一产品的竞争力有限。因此,公司开始寻求垂直整合的机会,与罗升等公司合作,共同开发智能制造的全面性解决方案。这一举措不仅使DFI能够提供更完整的产品线,还增强了其在行业中的竞争力。通过与合作伙伴的紧密合作,DFI成功推出了一系列具有竞争力的智能制造解决方案,赢得了市场的广泛认可。

问答坊 | AI 解惑

mifare卡读写器开发心得『转』

坛子里好像越来越多的人对此产生了兴趣。我最初的读卡器是用CM200开发的,硬件开发没有什么特别的,CM200内部带地址锁存,接口很方便,其它的按照datasheet照搬就行了。关键是天线板的设计,尺寸形状都会影响,而我觉得这些定了之后,设计的关键又 ...…

查看全部问答>

数控电源

单片机控制开关电源有没有可能实现频率在10Hz到500KHz连续可调 做过的讲下啊 我看报道说没有办法控制精度 都是采用DDS专用芯片做 …

查看全部问答>

Windows CE系统中卫星通信的实现.pdf

Windows CE系统中卫星通信的实现.pdf…

查看全部问答>

飞龙教程------51单片机=====最小51系统

飞龙教程------51单片机=====最小51系统 51单片机=====最小51系统 电子工程师之家 单片机学习网   http://www.eehome.cn/ 新势力电子单片机                    &n ...…

查看全部问答>

有没有做数控机床的朋友请进来下

我想开发一套数控机床的操作软件,有没有知道这方面的朋友,可以联系我,我在北京,只要你认为你可以做,或者朋友可以做都可以找我,真诚请教!可以加我QQ:913410767…

查看全部问答>

两个小问题,散分了~

1. 用硬件定时器编写程序,设置时、分、秒定时器,分别对应的地址为:4000H、4002H、4004H,晶振频率为12MHZ(用8096编写) 2.C08__2  MODULE MAIN     $INCLUDE(8096.INT) PORT   EQU   OFFA8H  ...…

查看全部问答>

请高手介绍个学习单片机的好网站

请高手介绍个学习单片机的好网站,多谢!…

查看全部问答>

求CPU源码

哪位大虾可以告诉我哪可以下到16位或32位CPUvhdl源代码 …

查看全部问答>

51单片机P1口驱动能力的理解

在51单片机系列中,现在生产厂家很多,兼容型号也很多。不同厂家生产的单片机P1口的驱动能力 是不同的。下面仅举最常用的3种单片机为例,谈谈驱动能力。 先说说LS型TTL负载。 LS型TTL负载是指单片机端口所接负载是74LS系列的数字芯片。以TI公司的74 ...…

查看全部问答>

USB编程器问题

我在淘宝买了USB编程器,型号是LSD-FET430UIF 430 价格在250元左右 与在PCB板上的14脚并口仿真器接口完全兼容吧? 相应的驱动软件在哪里下呢?…

查看全部问答>