Systick :系统心跳定时器,提供系统节拍

裸机程序中可作为独立的延时定时器

用途:

1.产生操作系统的时钟节拍

2.便于不同处理器之间程序移植

SysTick定时器被捆绑在NVIC中,异常号15

3.作为一个闹铃测量时间用于测量时间,

但当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作

它有四个寄存器

STK_CSR, 0xE000E010 -- 控制寄存器

STK_LOAD, 0xE000E014 -- 重载寄存器

STK_VAL, 0xE000E018 -- 当前值寄存器

STK_CALRB, 0xE000E01C -- 校准值寄存器

stm32的时钟源

选择外部时钟源时,则Systick时钟为HCLK /8

选择内核时钟源时,则Systick时钟为HCLK

延时编程原理

systick定时器是24位的递减计数器,设定初值并使能它后,它会每个系统时钟周期计数器减1,

计数到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息.

延时编程步骤

1.计算出产生1us 需要多少个时钟周期 fac_us;

2.计算出RELOAD寄存器的值

也就是产生相应延时所需要的时钟周期数

RELOAD=fac_us * nus

3.开启计数

4.循环检测计数到0的标志位;

5.清空计数器,关闭定时器

=======================================

SysTick异常配置步骤

1对CTRL//LOAD/VAL三个寄存器进行了配置,

2初始化SysTick使用的时钟,

3清除系统当前值,装入重装值,

4使能SysTick,使SysTick能响应中断

=======================

当SysTick定时器计到0时,将把COUNTFLAG位置位;而下述方法可以对其清零:

1.读取SysTick 控制及状态寄存器(STCSR)

2.往SysTick 当前值寄存器(STCVR)中写任何数据

只有当VAL 值为0 时,计数器自动重载RELOAD

======================

库函数

使用ST的函数库使用systick的方法,严格按照以下顺序:

1、调用SysTick_CounterCmd() -- 失能SysTick计数器

2、调用SysTick_ITConfig () -- 失能SysTick中断

3、调用SysTick_CLKSourceConfig() -- 设置SysTick时钟源。

4、调用SysTick_SetReload() -- 设置SysTick重装载值。

5、调用SysTick_ITConfig () -- 使能SysTick中断

6、调用SysTick_CounterCmd() -- 开启SysTick计数器

Systick中断服务函数

void SysTick_Handler(void);

==========================

寄存器版代码注解

使用外部8M时钟,锁相环里出来的频率是72M,AHB预分频后是72M,

systick固定HCLK时钟的1/8,即9M,那么延时1us是9个时钟

void delay_init(u8 SYSCLK) //系统时钟是72MHz,SYSCLK=72

{

SysTick->CTRL &= 0xfffffffb ; //bit2清0,也就是配置选择外部时钟

fac_us=SYSCLK/8; //硬件8分频,fac_us得出的值是要给下面的时钟函数用的

fac_ms =(u16)fac_us*1000;

}

void delay_us(u32 nus) //nus假如为10us

{

u32 temp;

SysTick->LOAD = nus*fac_us; //延时10us的话就是 10*9=90,装到load寄存器中

SysTick->VAL=0x00;//计数器清0,因为currrent字段被手动清零时,load将自动重装到VAL中

SysTick->CTRL = 0x01;//配置使异常生效,也就是计数器倒数到0时将发出异常通知

do

{

temp = SysTick->CTRL; //时间到了之后,该位将被硬件置1,但被查询后自动清0

}

while(temp & 0x01 && !(tmep &(1<<16))); //查询

SysTick->CTRL = 0x00; //关闭计数器

SysTick->VAL = 0x00; //清空val

}

//这个while循环,判断如果Systick还在Enable的状态,并且计数器还没数到0,

就不停的循环把当前的SysTick->CTRL寄存器值写入变量temp,继续下一次判断。

当Systick被Disable或者计数器数到0了,就停止循环

还有一个注意点:

LOAD寄存器是24位的 最大值0xffffff

那么延时最大值计算公式为

nms<=0xffffff*8*1000/SYSCLK (SYSCLK单位Hz)

则nms的最大值为1864.135ms ,即1864毫秒

stm32滴答计时器_stm32笔记:Systick系统滴答定时器相关推荐

  1. stm32滴答计时器_stm32中的系统滴答定时器使用

    系统滴答定时器对于stm32的初学者来说还是非常重要的,因为随着你学习的深入编程过程中肯定会调用延时函数,比如我之前的一些gpio相关的实验中.那么延时函数的编写也是几种方法的,一般开始接触都是让系统 ...

  2. stm32滴答计时器_STM32之系统滴答定时器

    一.SysTick(系统滴答定时器)概述 操作系统需要一个滴答定时器周期性产生中断,以产生系统运行的节拍.在中断服务程序里,基于优先级调度的操作系统会根据进程优先级切换任务,基于时间片轮转系统会根据时 ...

  3. SysTick系统滴答定时器

    工作原理 SysTick系统滴答定时器是一个24位递减计数器计数器,向下计数,最大计数值为() SysTick系统滴答定时器,每个时钟周期-1,减到0后申请中断,并且会自动重装初值. 注意: 定时器的 ...

  4. SysTick系统滴答定时器(STM32F4xx系列)

    定时器概念 1.1 定时器的含义 1.2片上外设的定时器 1.3定时/延时原理 系统滴答定时器 2.1 为什么需要系统滴答定时器 2.2 系统滴答定时器概述 2.3 系统滴答定时器框架 2.4 系统滴 ...

  5. stm32滴答计时器_STM32 的系统滴答定时器( Systick) 彻底研究解读

    作者:王健 前言 SysTick 比起那些 TIM 定时器可以说简单多啦~~~~~哥的心情也好了不少, 嘎嘎!! ARM Cortex-M3 内核的处理器内部包含了一个 SysTick 定时器,它是一 ...

  6. stm32滴答计时器_STM32嵌入式开发学习笔记(四):使用滴答计时器实现精准计时...

    前面我们讲过,因为在STM32上没有系统时间的接口,因此无法调用sleep函数,在本文中,笔者将利用滴答计时器实现精准延时. 查阅技术手册,滴答计时器依赖于一个SysTick_Type类型寄存器,定义 ...

  7. stm32滴答计时器_STM32——系统滴答定时器

    STM32--系统滴答定时器 一.SysTick[内核中] [风格:先描述一下库对寄存器的封装,再举例实现某些功能] SysTick定时器被捆绑在NVIC中,用于产生SysTick异常(异常号: 15 ...

  8. stm32滴答计时器_STM32的系统滴答定时器(Systick)

    1.systick时钟来源 2.SysTick库函数 3.源码 /** *@} */ /** @defgroup SysTick_clock_source *@{ */ #define SysTick ...

  9. 【STM32F407 开发板】实验六 :SysTick 系统滴答实验

    前言: 这是第六个实验,实验五的博客我没有写,不是因为太简单了,而是因为太难了,当初给我直接干蒙圈了,其实实验五的代码很简单,就是深入底层配置寄存器原理,我就直接跪了,想要把实验五的博客写出来,至少又 ...

最新文章

  1. 大咖 | 斯坦福教授骆利群:为何人脑比计算机慢1000万倍,却如此高效?
  2. 京东11·11:撬动数据中心的支点——京东阿基米德
  3. Delphi 与 DirectX 之 DelphiX(52): TDIB.DoSaturation();
  4. IPython基础使用_Round2
  5. poj-1062-昂贵的聘礼
  6. Ajax原理详细说明
  7. CSS--选择符大全(常用css选择符)
  8. 抽象 java 1614868764
  9. 多层陶瓷电容器用处_陶瓷电容器的作用是什么
  10. centos usb转网口_CentOS 6.5安装qf9700 USB网卡驱动
  11. eclipse中Debug调试基本操作
  12. 串口通信基础知识(UART)
  13. 计算机专业哪个考研简单,考研哪些专业比较简单好考?
  14. moment 计算日期差
  15. 简单快速复制CSDN上的博客到自己的电脑上(带图片和格式)
  16. 红米5 Android 8.0,红米 5 获得 Android 8.0 稳定版更新:修复大量问题
  17. Doc和Docx有什么区别
  18. linux能运行安卓模拟器吗,Android模拟器的使用方法(Linux)
  19. 信号的用法,signal函数、sigaction函数及信号集(sigemptyset,sigaddset)操作函数
  20. 非线性函数模型(多项式拟合)预测土壤侵蚀模数

热门文章

  1. python 替换字符串
  2. Flash Media Server 4.5下载
  3. ListView排序并隔色显示
  4. KDB支持单步调试功能(ARM架构)
  5. 数据结构——图的C语言实现
  6. Leetcode--55. 跳跃游戏
  7. rosserial_java_[学习笔记]Rosserial实现Windows-ROS交互操作(1)
  8. python离线安装pip.whl_20180903 - Python Pip 工具下载whl包与离线安装
  9. 桌面图标设计里的计算机是灰色的,小技巧教您如何将Windows 10上的桌面图标设置中的回收站为灰色!...
  10. 如何评判软件测试的效率,如何衡量测试效率,提高测试效率?