1、系统定时器SysTick的简介

  系统定时器SysTick属于内核外设,内嵌在NVIC中。SysTick是一个24位的向下递减的计数器,计数器根据SysTick的时钟源计数,当SysTick的计数器计数到0的时候,SysTick就产生一次中断,并且SysTick的重装载寄存器会给计数器重新赋值,以此循环往复。

  SysTick一般用于带操作系统的应用,用来产生时基,维持操作系统的心跳。

2、SysTick的寄存器

  SysTick有4个寄存器:

    • 控制及状态寄存器CTRL;
    • 重装载数值寄存器LOAD;
    • 当前数值寄存器VAL,即SysTick的计数器;
    • 校准数值寄存器CALIB;

  一般只需要配置CTRL、LOAD、VAL这三个寄存器,CALIB基本不使用。

  控制及状态寄存器CTRL

  CTRL的bit16位COUNTFLAG用来判断SysTick计数器是否递减到0,当SysTick递减到0的时候,COUNTFLAG会被置1,如果没有使用SysTick的中断功能,可以通过查询该位是否为1来判断SysTick定时器是否溢出。

  CTRL的bit2位CLKSOURCE用来选择SysTick的时钟源:

  当CLKSOURCE = 0时,SysTick的时钟源为AHB/8;

当CLKSOURCE = 1时,SysTick的时钟源为AHB;

一般ABH为SYSCLK的1分频,所以SysTick的时钟源可以选择为SYSCLK或SYSCLK/8。

  CTRL的bit1位TICKINT用来设置当SysTick计数到0的时候是否产生中断:

  当TICKINT = 0时,在SysTick计数到0的时候不会产生中断;

当TICKINT = 1时,当SysTick计数到0的时候产生中断。

  CTRL的bit1位ENABLE是SysTick的使能位,当ENABLE = 1时,SysTick开始计数。

  重装载数值寄存器RELOAD

  RELOAD寄存器是SysTick的自动重载数值寄存器,当SysTick的计数器递减到0的时候,RELOAD寄存器的值会重新赋值给SysTick的计数器,让SysTick可以重复计时。

  当前数值寄存器VAL

  当去读取VAL寄存器的值时,返回的是SysTick计数器的当前值;当去写VAL寄存器的时候,会使SysTick计数器的值清零,而且还会清除CTRL寄存器的bit16位COUNNTFLAG。

3、HAL库操作SysTick

  SysTick相关的寄存器定义和库函数操作都是在Core_CM3.h头文件内实现的。

  在HAL中使用SysTick比较简单,只需要通过Core_CM3.h文件中的SysTick_Config函数就可以了,通过将参数传入SysTick_Config函数设置SysTick的自动重载数值。

  调用SysTick_Config函数,SysTick的时钟源会被配置成AHB,并且使能中断,SysTick的中断优先级也在SysTick_Config函数中配置了。如果需要更改配置,可以找到SysTick_Config函数,并修改。

  SysTick的中断服务函数在stm32f1xx_it.c文件中,SysTick的中断处理过程在SysTick_Handler中实现。

  初始化代码如图:

  中断服务函数

最新文章

  1. jQuery事件绑定on()、bind()与delegate() 方法详解
  2. 利用HTML5的canvas制作万花筒动画特效
  3. 谷歌的ajax.googleapis.com被墙导致访问很多国外网站很慢的解决方法
  4. Android ImageView scaleType属性
  5. 对ArrayList 进行深拷贝
  6. Mysql 备份恢复之 Mysqldump 工具
  7. OpenCart本地调试环境搭建
  8. Sass学习
  9. 使用DbUtils实现CRUD
  10. Bootstrap 模态对话框只加载一次 remote 数据的解决办法 转载
  11. JS中的运算符和JS中的分支结构
  12. SPI FLASH与NOR FLASH的区别?
  13. Analysis of Web.xml in Hello1 project
  14. Java判断水仙花数
  15. wap2app(九)-- 使用mui.previewImage之后,页面a链接不能跳转
  16. Nginx 性能优化有这篇就够了!
  17. linux命令排序
  18. The Shortest Statement CodeForces - 1051F(待测试)
  19. 01 响应式页面-@media介绍,
  20. Python首次安装后运行报错(0xc000007b)的解决方法

热门文章

  1. linux-TFTP服务
  2. BERT实现QA中的问句语义相似度计算
  3. 痞子衡嵌入式:恩智浦SDK驱动代码风格检查工具预览版
  4. burpsuit之Spider、Scanner、Intruder模块
  5. Pyppeteer入门(转载)
  6. MQTT抓包分析
  7. liunx 安装 zookeeper(转)
  8. docker安装mysql主从
  9. Block详解二(底层分析)
  10. JAVA系列-JVM