用SysTick做的延时计时器
CM3、CM4的内核中都有个24位的SysTick定时器。这两个MCU里边的SysTick大同小异。SysTick的介绍可以参考:(来自CSDN博客的参考)或者(来自百度文库的参考)或者参考《CM3权威指南》这个书。在ST的参考手册中没有SysTick的介绍。因为它是属于内核的东西。
这个实验是使用Systick中断方式做延时定时器。主要目的是熟悉下SysTick的使用。
首先,定义个延时函数,目的是计数
void Delay(__IO uint32_t nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
} void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
其中TimingDelay_Decrement是供SysTick的中断响应函数调用的。每次调用就将TimingDelay减少1,知道0为止.
Delay函数就是一直等着TimingDelay 减到0.
然后配置SysTick定时器。使用系统函数
SysTick_Config(SystemCoreClock/1000);
这个函数打开了SysTick的中断,同时也设置了Systick的重装载寄存器。SystemCoreClock/1000既是系通时钟频率的千分之一。也就是说没每秒钟,Systick寄存器会装满1000次,每次1ms。这就是计时的基础单位了。当重装载寄存器装满时,就会产生Systick中断,之后我们就在中断函数中处理TimingDelay这个标量了。
在文件stm32F4xx_it.c中添加一点Systick的中断处理函数:
extern void TimingDelay_Decrement(void); void SysTick_Handler(void)
{
TimingDelay_Decrement();
}
这样,延时函数就配置好了。
在main函数中的用法:
int main(void)
{
。。。。。。 if(SysTick_Config(SystemCoreClock/1000))
{
while(1);
} while (1)
{
Delay(500);
GPIO_WriteBit(GPIOG,GPIO_Pin_13,Bit_SET);
Delay(500);
GPIO_WriteBit(GPIOG,GPIO_Pin_13,Bit_RESET);
}
}
这里的不足之处是你不管使用没有,SysTick总是会反复地产生中断,消耗了一些MCU的资源。当然,如果SysTick用在OS中,作为OS的心跳,这个中断是免不了的。
用SysTick做的延时计时器的更多相关文章
- 基于Systick系统时钟延时的LED闪烁灯
1.回顾我们的51 单片机编程,当我们需要做系统延迟的时候,最常采用的一种方式就是使用for 循环的空语句等待来实现. 当然,在STM32 里面也可以这么实现.但是在STM32 的Cortex 内核里 ...
- EasyDarwin做转发延时太大?
很多人反映,在用EasyDarwin做流媒体转发服务时,延时太大,实际Darwin在转发模块中,有一个控制转发Buffer时间的配置reflector_buffer_size_sec,我们将这个配置改 ...
- 使用系统定时器SysTick实现精确延时微秒和毫秒函数
SysTick定时器简介 SysTick定时器是存在于系统内核的一个滴答定时器,只要是ARM Cortex-M0/M3/M4/M7内核的MCU都包含这个定时器,它是一个24位的递减定时器,当计数到 0 ...
- STM32学习及应用笔记一:SysTick定时器学习及应用
这几年一直使用STM32的MCU,对ARM内核的SysTick计时器也经常使用,但几乎没有仔细了解过.最近正好要在移植一个新的操作系统时接触到了这块,据比较深入的了解了一下. 1.SysTick究竟是 ...
- 延时函数出错,volatile一例
莫名其妙的错误.使用Systick做的延时. 初始化是这样的: //SysTick配置 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); if ...
- SYSTick 定时器
CM3 内核的处理器,内部包含了一个 SysTick 定时器,(SysTick 的时钟源自 HCLK 的 8 分频,8个系统时钟周期systick跳一个,即8*1/72M=1/9 us)Sys ...
- stm32的systick原理与应用
/* SysTick滴答定时器 一.功能 SysTick定时器是一个简单的定时器,CM3\CM4内核芯片都具备此定时器.SysTick定时器常用来做延时,采用实时系统时则用来做系统时钟.无论用作延时还 ...
- 用Python和摄像头制作简单的延时摄影
“延时摄影(英语:Time-lapse photography)是以一种较低的帧率拍 下图像或者视频,然后用正常或者较快的速率播放画面的摄影技术.在一段延时摄影视频中,物体或者景物缓慢变化的过程被压缩 ...
- 【QT】计时器制作
应小伙伴的要求,做一个小计时器.功能是点击开始就从00:00:00开始计时,点击暂停就暂停计时,点击停止就停止计时. 界面如上图,使用ui设计师直接拖的.按钮和图标的图片都是网上下载的.用美图秀秀抠成 ...
随机推荐
- asp.net页面事件执行顺序
转自http://www.cnblogs.com/hnlyh/articles/4230388.html C#代码 using System; using System.Data; using Sys ...
- bookstores网上书店测试缺陷报告1
Bookstore网上书店系统测试缺陷报告 缺陷编号 01.01.0001 发现人 吴赵昕 记录日期 2016-06-10 所属模块 购物车 确认人 吴赵昕 确认日期 2016-06-10 当前状 ...
- JUnit4参数的使用
用JUnit4进行参数化测试 参数化测试是一个JUnit 3不具备的功能. 基本使用方法 @RunWith 当类被@RunWith注解修饰,或者类继承了一个被该注解修饰的类,JUnit将会使用这个注解 ...
- Html 之div+css布局之css基础
Css是什么 CSS即层叠样式表(Cascading StyleSheet). 在网页制作时采用层叠样式表技术,可以有效地对页面的布局.字体.颜色.背景和其它效果实现更加精确的控制. 只要对相应的代码 ...
- CTO干点啥?
1.负责技术 2.负责人才 3.负责业务(需求) 4.负责组织
- Java 在指定目录建立指定文件名的文件 并输入内容
package runoob; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream ...
- Twitter API 申请key
最近听了一下coursera的python课(https://www.coursera.org/learn/python-network-data/home/welcome),讲的挺简单也挺有意思.其 ...
- css 设置背景图片模糊,内容不模糊
需求:一个div设置了background: url,现在需要使图片背景模糊,div内的文字清晰显示. 原始代码: <!DOCTYPE html> <html lang=" ...
- 《Android深度探索HAL与驱动开发》第一章阅读心得
首先了解到Android系统架构是由四层构成:其中第一层是Linux内核,他的作用是负责Linux的驱动程序以及内存.进程.电源等管理操作:第二层是C/C++代码库,也就是Linux下.so的文件:第 ...
- 论SCRM系统对传统行业的冲击
SCRM(Social Customer Relationship Management)顾名思义是社会型客户关系管理系统,这在当前的电子商务领域是一个创新的概念,由于社交媒体(Social Medi ...