首页 > 版块 > STM32 > 帖子正文

STM32中SystTick是个啥?咋用?

蔡琰 发布于 2021-10-12 11:57
收藏 0 回复 0 浏览 69 原创

Cortex-Mx内核内部包含了一个SysTick定时器, SysTick 是一个24 位的倒计数定时器, 当计到0 时, 将从RELOAD寄存器中自动重装载定时初值。只要不把它在 SysTick 控制及状态寄存器中的使能位清除,就永不停息。SysTick 在《STM32xx 中文参考手册》里面基本没有介绍,其详细介绍,内核编程手册中 在工程中我们将STM32F373为例,为SysTick配置1ms,利用1ms中断处理系统任务。下面我们介绍下寄存器:

下图是SysTick定时器的4个寄存器概括,我们介绍部分使用的寄存器:

1.jpg 

SysTick控制和状态寄存器

 

2.jpg 

这个寄存器的EBNALE(0)SysTick的使能位,TICKINT(1)为设置是否产生中断,CLKSOURCE(2)为时钟选择,当为1 AHB时钟不分频,为0AHB时钟8分频。当然我们选择使能定时器,产生中断,并选择AHB 8分频假如系统时钟为72M,即可获得 72/8 = 9MSysTick时钟频率。使能SysTick并产生中断,8分频时钟,代码如下:

                 SysTick->CTRL = (0<<2) | (1<<1) | (1<<0);

SysTick重装载值寄存器

 3.jpg


 

                     该图来自数据手册中断和事件章节

5SysTick重载计数值寄存器RELOAD([23:0]),从该介绍我们可以得出结论,SysTick的计数方式为向下计数,也就是从RELOAD([23:0])值向下递减,当减到0的时候产生标志位,这个时候会重新装载该寄存器值,循环执行上面的步骤。那麽我们可以利用这个功能做一个1ms的定时器,我们已经配置系统时钟为72M,使用系统时钟的8分频(9M)作为SysTick定时器的时钟,也就是说时钟周期T = 1/9M(ns),SysTick1需要1/9M(ns),我们定时1ms那麽重载寄存器的值为 1ms/(1/9M(ns))-1 = 8999(注意这里要进行单位换算),这也就是我们的重装载值,下面给出具体代码配置,其中使能等操作包含在SysTick_Config();函数里面。配置代码如下:

                         SysTick->LOAD = 8999;

单个寄存器讲完了我们总结一下综合起来让SysTick工作起来,我们把SySTick的配置单独做成一个函数如下:

 

Void SysTick_Init(void)

{

   /*

   第一步:装载值

   第二步:使能SysTick并允许中断,8分频时钟

第三步:设置SysTick优先级

*/

SysTick->LOAD = 8999;

SysTick->CTRL = (0<<2) | (1<<1)  | (1<<0);

NVIC_SetPriority (SysTick_IRQn, (1<<4) - 1);

}

我们用库函数表示为:

4.jpg 

    对于官方库函数的查找我们可以使用《stm32f37x_dsp_stdperiph_lib_um.chm》这文档,想要找某一方面的函数在里面直接搜索就可以,具体的使用方法我们下面仔细介绍。

0 0
发表评论 侵权投诉
评论 (0)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表乌云踏雪网立场。

文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。