×

0STM32中的SysTick是个啥?咋用?(可下载)

消耗积分:0 | 格式:pdf | 大小:778.25 KB | 2025-04-01

张飞实战电子官方

  • 191内容
  • 32w+阅读
  • 8.5k粉丝

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

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

SysTick 控制和状态寄存器

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

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

SysTick 重装载值寄存器

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

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

SysTick->LOAD = 8999;

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

Void SysTick_Init(void)

{

     /*

第一步:装载值

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

第三步:设置 SysTick 优先级

完整版技术文档请点击文章开头普通下载

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !