stm32滴答计时器_stm32笔记:Systick系统滴答定时器
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系统滴答定时器相关推荐
- stm32滴答计时器_stm32中的系统滴答定时器使用
系统滴答定时器对于stm32的初学者来说还是非常重要的,因为随着你学习的深入编程过程中肯定会调用延时函数,比如我之前的一些gpio相关的实验中.那么延时函数的编写也是几种方法的,一般开始接触都是让系统 ...
- stm32滴答计时器_STM32之系统滴答定时器
一.SysTick(系统滴答定时器)概述 操作系统需要一个滴答定时器周期性产生中断,以产生系统运行的节拍.在中断服务程序里,基于优先级调度的操作系统会根据进程优先级切换任务,基于时间片轮转系统会根据时 ...
- SysTick系统滴答定时器
工作原理 SysTick系统滴答定时器是一个24位递减计数器计数器,向下计数,最大计数值为() SysTick系统滴答定时器,每个时钟周期-1,减到0后申请中断,并且会自动重装初值. 注意: 定时器的 ...
- SysTick系统滴答定时器(STM32F4xx系列)
定时器概念 1.1 定时器的含义 1.2片上外设的定时器 1.3定时/延时原理 系统滴答定时器 2.1 为什么需要系统滴答定时器 2.2 系统滴答定时器概述 2.3 系统滴答定时器框架 2.4 系统滴 ...
- stm32滴答计时器_STM32 的系统滴答定时器( Systick) 彻底研究解读
作者:王健 前言 SysTick 比起那些 TIM 定时器可以说简单多啦~~~~~哥的心情也好了不少, 嘎嘎!! ARM Cortex-M3 内核的处理器内部包含了一个 SysTick 定时器,它是一 ...
- stm32滴答计时器_STM32嵌入式开发学习笔记(四):使用滴答计时器实现精准计时...
前面我们讲过,因为在STM32上没有系统时间的接口,因此无法调用sleep函数,在本文中,笔者将利用滴答计时器实现精准延时. 查阅技术手册,滴答计时器依赖于一个SysTick_Type类型寄存器,定义 ...
- stm32滴答计时器_STM32——系统滴答定时器
STM32--系统滴答定时器 一.SysTick[内核中] [风格:先描述一下库对寄存器的封装,再举例实现某些功能] SysTick定时器被捆绑在NVIC中,用于产生SysTick异常(异常号: 15 ...
- stm32滴答计时器_STM32的系统滴答定时器(Systick)
1.systick时钟来源 2.SysTick库函数 3.源码 /** *@} */ /** @defgroup SysTick_clock_source *@{ */ #define SysTick ...
- 【STM32F407 开发板】实验六 :SysTick 系统滴答实验
前言: 这是第六个实验,实验五的博客我没有写,不是因为太简单了,而是因为太难了,当初给我直接干蒙圈了,其实实验五的代码很简单,就是深入底层配置寄存器原理,我就直接跪了,想要把实验五的博客写出来,至少又 ...
最新文章
- 大咖 | 斯坦福教授骆利群:为何人脑比计算机慢1000万倍,却如此高效?
- 京东11·11:撬动数据中心的支点——京东阿基米德
- Delphi 与 DirectX 之 DelphiX(52): TDIB.DoSaturation();
- IPython基础使用_Round2
- poj-1062-昂贵的聘礼
- Ajax原理详细说明
- CSS--选择符大全(常用css选择符)
- 抽象 java 1614868764
- 多层陶瓷电容器用处_陶瓷电容器的作用是什么
- centos usb转网口_CentOS 6.5安装qf9700 USB网卡驱动
- eclipse中Debug调试基本操作
- 串口通信基础知识(UART)
- 计算机专业哪个考研简单,考研哪些专业比较简单好考?
- moment 计算日期差
- 简单快速复制CSDN上的博客到自己的电脑上(带图片和格式)
- 红米5 Android 8.0,红米 5 获得 Android 8.0 稳定版更新:修复大量问题
- Doc和Docx有什么区别
- linux能运行安卓模拟器吗,Android模拟器的使用方法(Linux)
- 信号的用法,signal函数、sigaction函数及信号集(sigemptyset,sigaddset)操作函数
- 非线性函数模型(多项式拟合)预测土壤侵蚀模数
热门文章
- python 替换字符串
- Flash Media Server 4.5下载
- ListView排序并隔色显示
- KDB支持单步调试功能(ARM架构)
- 数据结构——图的C语言实现
- Leetcode--55. 跳跃游戏
- rosserial_java_[学习笔记]Rosserial实现Windows-ROS交互操作(1)
- python离线安装pip.whl_20180903 - Python Pip 工具下载whl包与离线安装
- 桌面图标设计里的计算机是灰色的,小技巧教您如何将Windows 10上的桌面图标设置中的回收站为灰色!...
- 如何评判软件测试的效率,如何衡量测试效率,提高测试效率?