一、Systick定时器
1、SysTick定时器简介
SysTick定时器也称为滴答定时器,SysTick定时器是内核中的一个外设,内嵌在NVIC(嵌套向量中断控制器)里面,在cortex M3、M4中都存在,很方便用户移植。
虽然我用的是cortex M4的内核,但是他的内核文档在这方面和Cortex M3的相似。
所以我这里参考了M3的内核中文文档。M3和M4内核文档——密码:0423。
注意:因为Systick定时器是内核外设,所以在STM32F4中文参考手册是找不到的,可以参考Cortex M3权威指南(第8章) + M3/M4内核权威指南(9.5章节)。
Systick定时器是一个24bit的倒计时(向下计数)定时器,功能就是实现简单的延时。
24位向下计数定时器。
2、SysTick时钟源
SysTick定时器有两个时钟源可以选择,具体可以参考下图中的中文手册的时钟树。(stm32f4xx中文手册)密码同上。
我们主要看粉色虚线框中的内容,从左往右看,首先是AHBPRESC/1,...,512这一个输出的AHB频率为168MHz,向上分为两个方向,一个是到Cortex 系统定时器,一个是FCLK Cortex自由运行时钟,这两个时钟源都可以作为SysTick定时器的时钟源。这两个的频率分别是8分频:21MHz和没有分频的168MHz。
也可以参考stm32CubeMX中的图片:
让我们思考一下为什么要分频呢?为什么有不同频率的时钟源?
因为选择不同频率的时钟源会影响延时的长短。
如果选择168MHz的时钟源作为SysTick的时钟源,168MHz:1s震荡168 000 000次,也就是1us(1s == 1 000 000 us)震荡168次,而我们的SysTick定时器是一个24位的向下计数定时器。所以最多计数2^24-1(从零开始计数,所以要减一),所以可以算出最大延时时间:99.864ms
计算过程:2^24/168 = 99864.380952380952380952380952381us = 99.864ms
如果选择21MHz作为时钟源,则1s震荡21 000 000次,所以1us 震荡 21次,最大延时时间:
2^24/21 = 798,915.04761904761904761904761905 us = 798.915 ms
关于Systick定时器的寄存器说明以及函数接口都存储在内核文件misc.c以及misc.h,同时在core_cm4.h页定了关于Systick定时器的内容。
内核中提供了一个函数接口可以去修改Systick的时钟源 函数为 SysTick_CLKSourceConfig()
我们来讲一下 SysTick_CLKSourceConfig()这个函数:
函数原型
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
函数参数
参数一:SysTick_CLKSource 选择时钟源 一般选SysTick_CLKSource_HCLK_Div8 21MHZ
@brief配置SysTick时钟源。
@param SysTick_CLKsource: SysTick时钟源。该参数可以是以下值之一:
@arg SysTick_CLKSource_HCLK_Div8:选择AHB时钟除以8作为SysTick时钟源
@arg SysTick_CLKSource_HCLK:选择AHB时钟作为SysTick时钟源。
@retval 无
3、SysTick定时器的应用
内核提供两种方案来使用systick定时器,分别是 中断方式 + 非中断方式
①中断方式:
第一步:设置Systick的中断周期(SysTick_Config函数)
让我们分析一下这个SysTick_Config函数:
函数原型:__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
函数参数分析:
ticks是两个中断中的滴答数,我们回头看内核文档:
滴答数 = 时钟源 / 时间,假如中断周期为1us,时钟源为168MHz,则ticks = 168 000 000 / 1 000 000 = 168
第二步:编写延时函数
文章来源地址https://www.toymoban.com/news/detail-762839.html
第三步:在Systick中断服务函数中修改中断次数
②非中断方式:
直接操作Systick定时器的4个寄存器,使用流程如下
文章来源:https://www.toymoban.com/news/detail-762839.html
到了这里,关于stm32的学习——SysTick定时器的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!