嘀嗒定时器,作为stm32特有的系统定时器,它的出现,旨在为用户在使用OS以及延时的时候提供一个精确的定时。

SysTick 是 MDK 定义了的一个结构体(在 core_m4.h 里面),里面包含 CTRL、LOAD、VAL、CALIB 等 4 个寄存器;


CTRL寄存器:顾名思义就是SYSTick的控制寄存器。它的几个常用位如下图,其中CLKSOURCE位为1的时候,嘀嗒计时器将选择系统时钟8分频后的时钟(即168/8=21),我们一般采用这个。


LOAD:重装载的值(0-23位)


VAl:返回当前倒计数的值(0-23)


根据以上,我们可以编写一小段程序作为延时程序:

//nus应小于2^24/21=798915
void _Delay_us(u32 nus)
{SysTick->CTRL&=~(1<<2);//选择时钟源为21MHzSysTick->CTRL&=~(1<<1);//SYsTick数到0时无动作SysTick->LOAD=21*nus;//装载的值,此值每减1,需要1/21us,故用21*nusSysTick->CTRL|=(1<<0);//使能SySTickwhile(!(SysTick->CTRL&(1<<16)));//等待倒计数数到0}
void _Delay_ms(u32 nms)
{SysTick->CTRL&=~(1<<2);//选择时钟源为21MHzSysTick->CTRL&=~(1<<1);//SYsTick数到0时无动作SysTick->LOAD=21000*nms;//装载的值,此值每减1,需要1/21us,故用21*nusSysTick->CTRL|=(1<<0);//使能SySTickwhile(!(SysTick->CTRL&(1<<16)));//等待倒计数数到0}

Systick 的时钟来自系统时钟 8 分频, 正因为如此,系统时钟如果不是 8 的倍数(不能被 8 整除),则会导致延时函数不准确,所以STM32的外部晶振一般采用8MHz的。

【STM32】STM32f4学习之路--嘀嗒定时器相关推荐

  1. STM32入门:Systick(嘀嗒定时器)学习

    Systick(系统嘀嗒定时器)学习 一.Systick 介绍 Systick 是 STM32 的一个系统定时器,又名系统嘀嗒定时器,是一个 24 位的倒计数定时器,当计数到 0 时,将从 RELOA ...

  2. 【STM32学习】SysTick定时器(嘀嗒定时器)

    SysTick定时器 一.参考资料 二.时钟源选择与定时时间计算 1.时钟源选择 2.定时时间计算 三.SysTick_Handler中断服务函数 一.参考资料 嘀嗒定时器:时钟源.寄存器 二.时钟源 ...

  3. 调试模式和定时器,看门狗和嘀嗒定时器

    文章目录 一.调试模块 二.定时器模块 三.看门狗 四.系统时基定时器 五.定时器与内核之间的关系 杨桃32学习笔记,本文图片文字皆为转述 参考博客连接 一.调试模块 所谓调试的过程便是,写好程序然后 ...

  4. 【STM32F103】嘀嗒定时器(Systick)_延时函数

    STM32嘀嗒定时器--延时函数 一 系统Systick定时器 Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器,计到0 时,将从RELOAD 寄存器中自动重装载定时初值.只要不把它 ...

  5. stm32f407IGT的SYS_TICK嘀嗒定时器(一)

    打开cubeMX看一下默认的嘀嗒定时器 从下图可以看出默认嘀嗒定时器中断是打开的:最高优先级 中断向量表中找到标记的函数地址: 一路追代码之后会找到这个虚函数,我们可以重写这个函数,来实现我们自己的嘀 ...

  6. stm32专题九:SysTick(一)系统嘀嗒定时器原理

    SysTick是存在于stm32内核的定时器,嵌套在NVIC中,24位,只能递减.在stm32中文参考手册中,对于SysTick的描述其实很少,主要如下.systick的时钟可以为AHB时钟,或者是A ...

  7. 【STM32】STM32f4学习之路--时钟

    文章目录 初学STM32,发现他的时钟系统有点复杂(相对于之前学的51单片机来说).这是为什么? –51单片机的I/O口少,外设简单,所以时钟一般来说都是固定的,这也导致了51单片机应用场景的局限性. ...

  8. STM32的系统嘀嗒定时器(SysTick)实现简单计时功能

    SysTick是属于内核里的外设,只要是Cortex M内核的单片机,都拥有这个24位的SysTick定时器. SysTick的counter是一个递减计数器,首先要填入reload自动重装载计数器的 ...

  9. STM32系统嘀嗒定时器实现1ms中断事件

    int main() {//系统定时器实现周期性1000hz中断事件,即1msSysTick_Config(SystemCoreClock / 1000);}void SysTick_Handler( ...

最新文章

  1. unity3d小小白之导入素材、添加天空盒
  2. HNCU1101:马的移动---BFS
  3. ACP-PMP备考交流
  4. C++输入、输出优化模板整理
  5. ARM(IMX6U)裸机官方SDK包使用
  6. Nacos 计划发布v0.2版本,进一步融合Dubbo和SpringCloud生态
  7. Visual Studio 2010旗舰版正式版序列号 - civilman的专栏 - 博客频道 - CSDN.NET
  8. MySQL内连接和外连接
  9. Java面向对象的思想
  10. 截图转文字怎么操作?截图转文字的软件有哪些?
  11. 2022最新简历模板
  12. 结合个人规划对物联网(IOT)的一点思考
  13. 影响ERP软件价格的要素有哪些?
  14. 用Python分析豆瓣,评分最低的演员原来是他
  15. linux下的oracle安装
  16. java的jdk安装教程附百度网盘链接环境配置遇到的各种问题版本选择
  17. html汉字间的间距,div字间距-div内文字之间间距设置方法
  18. OA办公系统选购,千万别犯这些错
  19. 计算机毕业设计——基于HTML电商购物商城项目设计与实现-快购优品 带论文6500字 答辩ppt
  20. 兜兜的乐扣刷题算法小记(不停更)

热门文章

  1. 如何理解c和c ++的复杂类型声明 (转)
  2. 【Java】Servlet 工作原理解析
  3. 《windows核心编程》 17章 内存映射文件
  4. CEikEdWin 类的使用
  5. Android 7.0 init.rc的一点改变
  6. 程序员生存定律--管理向左,技术向右
  7. java连接rabbitmq_没用过消息队列?一文带你体验RabbitMQ收发消息
  8. 企业网站制作要以简约为主
  9. ORA-03001,GATHER_TABLE_STATS数据库自动收集统计信息报错
  10. Java TCP/UDP socket 编程流程总结