嘀嗒定时器,作为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. pandas使用query函数删除dataframe中某一列数值小于某一特定值的行(remove dataframe rows baed on column value)
  2. java B2B2C 源码 Springcloud多租户电子商城系统- Stream重新入队(RabbitMQ)
  3. flask 检测post是否为空_用Flask和Vue制作一个单页应用(五)
  4. 服务器设置为自动登录,Windows Server 2008 R2怎样设置自动登陆(登录)
  5. Xcode7常见问题汇总
  6. 试解析Tomcat运行原理(一)--- socket通讯(转)
  7. eclipse 代码上传github 笔记
  8. 搭配购买(信息学奥赛一本通-T1387)
  9. python 字符串格式化语法_Python:字符串格式化
  10. Hadoop集群启动时NameNode未启动解决方法
  11. Bailian2912 三个完全平方数【进制+枚举】
  12. qt msvc编译中文乱码解决
  13. 我的联想拯救者y7000p怎么安装双系统Linux ubuntu 18.04呢?
  14. ABAQUS软件实训(四):Mesh模块之六面体网格划分技巧
  15. Python开发技术—面向对象程序设计2
  16. nginx 安装和使用godaddy颁发证书
  17. 差分隐私(DP)中隐私预算ε的理解
  18. poj 3975hdu 1850 (nim)
  19. 大学生一定要理解的15件事
  20. uni-app隐藏钉钉小程序左侧返回按钮

热门文章

  1. phantomjs介绍
  2. [转]SQL交叉表实例
  3. 让你成为有钱人的25种方法!
  4. 阶段-关口系统--范围界定阶段---学习记录
  5. React Ways1——函数即组件
  6. 一秒解决CentOS下service 功能 不能使用 bash: service: command not found
  7. 数据分析之pandas常见的数据处理(四)
  8. 1057. 数零壹(20)
  9. ansible2.4 api调用
  10. 数人云CEO王璞:容器正成为软件交付的标准