0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

个人对STM32 SysTick的总结(寄存器操作)

撞上电子 2024-01-06 08:00 次阅读

一、概述:

SysTick是一个简单的递减24位计数器。如果你不需要再应用程序中嵌入操作系统,SysTick可以作为简单的延时和产生周期性的中断。

状态控制寄存器的第0位可以使能计数器,当前值寄存器随着时钟一直递减,当他减到0的时候,重装载寄存器就会重新装载这只的值,计数器继续从这个值递减。


二、相关寄存器:

2.1SysTick->CTRL 状态和控制寄存器

a6b115d4-ac26-11ee-aa22-92fbcf53809c.jpg

位16:当前值寄存器递减到0,位16置1

位2:时钟源选择位,0:使用外部参考时钟;1:使用内核时钟

位1:使能SysTick中断,当前值寄存器递减到0时产生中断

位0:SysTick时钟使能


2.2SysTick->LOAD 重装载值寄存器

a6bd978c-ac26-11ee-aa22-92fbcf53809c.jpg

当前值寄存器为0时,自动将重装载值重装到当前值计数器,重装载值的大小需要自己设置。


2.3 SysTick->VAL当前值寄存器

a6c179d8-ac26-11ee-aa22-92fbcf53809c.jpg

可读可写,当计数器使能时,这个寄存器的值开始递减,使用前后注意清零。

三、SysTick逻辑图

a6c58bd6-ac26-11ee-aa22-92fbcf53809c.jpg

a6d2c760-ac26-11ee-aa22-92fbcf53809c.jpg


四、时钟频率与延时

4.1时钟选择采用参考8分频的参考时钟比较准,所以此处SysTick计数器选择21M的时钟。

a6e0a4c0-ac26-11ee-aa22-92fbcf53809c.jpg

4.2如何延时1us时钟频率为21M,也就是1s的时间技术21M次。由此可知计数一次用了 (1/21000000)s ,用了(1/21000)ms, 用了(1/21) us,所以,1us计数21次。
4.3如何延时1ms因为1ms = 1000us,所以综上所述,1ms计数1000*21次计数,1ms也就是21000次计数
4.4最大延时24位计数器能保存的最大值 : 16777215。最大延时时间=16777215 /21=798915us=798.915ms

五、示例代码

#include "delay.h"

#define Value_us 21#define Value_ms 21000

void delay_init(void){ SysTick->CTRL &= (1 << 2); //控制寄存器位2置0,选择8分频时钟 SysTick->CTRL &= ~(1 << 0); //关闭计数器}void delay_us(u32 num){ SysTick->LOAD = num * Value_us; SysTick->VAL = 0; SysTick->CTRL |= (1 << 0); //使能计数器 while (!(SysTick->CTRL & 1<<16)); //判断是否计数完毕 SysTick->VAL = 0; SysTick->CTRL &= ~(1 << 0); //关闭计数器 }void delay_ms(u32 num){ SysTick->LOAD = num * Value_ms; SysTick->VAL = 0; SysTick->CTRL |= (1 << 0); //使能计数器 while (!(SysTick->CTRL & 1<<16)); SysTick->VAL = 0; SysTick->CTRL &= ~(1 << 0); //关闭计数器 }

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

    关注

    31

    文章

    5336

    浏览量

    120230
  • STM32
    +关注

    关注

    2270

    文章

    10895

    浏览量

    355740
  • 计数器
    +关注

    关注

    32

    文章

    2256

    浏览量

    94477
收藏 人收藏

    评论

    相关推荐

    SysTick的定义与相关寄存器详解

    一、概述:SysTick是一个简单的递减24位计数如果你不需要再应用程序中嵌入操作系统,SysTick可以作为简单的延时和产生周期性的中断;状态控制
    发表于 01-05 07:26

    SysTick寄存器介绍

    设置系统时钟SYSCLK 等于72M。当重装载数值寄存器的值递减到0 的时候,系统定时就产生一次中断,以此循环往复。SysTick 寄存器介绍Sy
    发表于 01-21 11:37

    stm32标准例程-寄存器

    stm32标准例程-寄存器版本的源代码,57个实验例程,从跑马灯到操作系统,全方位学习stm32开发
    发表于 11-26 16:17 0次下载

    ARM寄存器学习总结

    ARM寄存器学习总结
    发表于 01-04 15:10 0次下载

    寄存器操作方法的经验和其总结

    接触了一阵子的STM32函数库,使用起来挺方便的,但是很少有处理会有函数库,大部分情况下还是要自己来对寄存器进行操作,所以还是不要生疏了对寄存器
    的头像 发表于 12-19 09:30 8752次阅读
    对<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>方法的经验和其<b class='flag-5'>总结</b>

    寄存器操作方法_对寄存器操作的通用方法总结

    本文主要详解寄存器操作方法以及对寄存器操作的通用方法总结,具体的跟随小编来了解一下。
    的头像 发表于 05-22 15:53 2.3w次阅读

    SysTick定时介绍,SysTick定时寄存器

    STM32F1 库函数中,并没有提供相应的 SysTick 定时配置函数,我们要操作 SysTick 定时
    的头像 发表于 02-11 15:37 1.8w次阅读
    <b class='flag-5'>SysTick</b>定时<b class='flag-5'>器</b>介绍,<b class='flag-5'>SysTick</b>定时<b class='flag-5'>器</b><b class='flag-5'>寄存器</b>

    STM32F103:精准延时delay——SysTick使用

    处理的微控制都可以由这个定时获得一定的时间间隔。2. SysTick相关寄存器状态寄存器-
    发表于 12-02 18:36 10次下载
    <b class='flag-5'>STM32</b>F103:精准延时delay——<b class='flag-5'>SysTick</b>使用

    STM32 使用寄存器编写SysTick定时

    STM32 使用寄存器编写SysTick定时STM32入门一定要搞清楚定时可以通过syste
    发表于 12-04 11:51 2次下载
    <b class='flag-5'>STM32</b> 使用<b class='flag-5'>寄存器</b>编写<b class='flag-5'>SysTick</b>定时<b class='flag-5'>器</b>

    STM32学习笔记(2)——寄存器

    STM32 第二天寄存器寄存器功能:寄存器的功能是存储二进制代码,它是由具有存储功能的触发组合起来构成的。一个触发
    发表于 12-08 17:36 18次下载
    <b class='flag-5'>STM32</b>学习笔记(2)——<b class='flag-5'>寄存器</b>

    带你模仿正点原子编程风格到深入学习寄存器并手把手编写STM32F103寄存器程序(SYSTICK滴答时钟之delay延时)

    带你模仿正点原子到寄存器编写–SYSTICK(delay函数)以下是本篇文章正文内容,下面案例可供参考邓家文-广州华软软件学院一、 前提了解系统时钟systickSTM32内部的硬件
    发表于 12-08 18:21 0次下载
    带你模仿正点原子编程风格到深入学习<b class='flag-5'>寄存器</b>并手把手编写<b class='flag-5'>STM32</b>F103<b class='flag-5'>寄存器</b>程序(<b class='flag-5'>SYSTICK</b>滴答时钟之delay延时)

    stm32是如何将寄存器值通过标准库写入寄存器的?

    GPIO_Init函数3.总结0. 前言在平时的学习和工作中,可能很少有人会实际去操作寄存器,但是去了解库函数是如何去操作寄存器是很有必要
    发表于 12-16 16:58 18次下载
    <b class='flag-5'>stm32</b>是如何将<b class='flag-5'>寄存器</b>值通过标准库写入<b class='flag-5'>寄存器</b>的?

    [学习笔记]STM32F1 SYSTICK 滴答定时(寄存器、标准库、HAL库)

    目录0. 博主理解:1. 实验内容及步骤:2. 硬件说明3. 寄存器说明3.1 SysTick的时钟和使能:3.2 SysTick重装载数值寄存器:3.3
    发表于 12-23 20:02 7次下载
    [学习笔记]<b class='flag-5'>STM32</b>F1 <b class='flag-5'>SYSTICK</b> 滴答定时<b class='flag-5'>器</b>(<b class='flag-5'>寄存器</b>、标准库、HAL库)

    STM32寄存器操作

    STM32寄存器操作在使用STM32单片机编程时一般都用ST给的库函数编程,库函数编程的底层就是对单片机寄存器
    发表于 01-13 15:43 19次下载
    <b class='flag-5'>STM32</b>的<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>

    RAL寄存器模型操作指南

    寄存器模型操作,指的是通过寄存器模型对RTL中寄存器进行读写访问,或者同步寄存器模型与RTL中寄存器
    的头像 发表于 07-12 09:37 1075次阅读
    RAL<b class='flag-5'>寄存器</b>模型<b class='flag-5'>操作</b>指南