systick运用
systick的原理前一篇博文有介绍,简而言之就是
SysTick定时器是一个24位的倒计数,当倒计数为0时,将从RELOAD寄存器中取值作为定时器的初始值,同时可以选择在这个时候产生中断(异常号:15)。
例如从RELOAD的值为999,那么当倒计数为0时,就会从复位为999继续倒计数。
库文件当中有systick的专用库函数的,这里暂时不用到。
在keil工程当中,新建systick.c,systick.h文件,
#ifndef __SYSTICK_H
#define __SYSTICK_H
#include "stm32f10x.h"
void RCC_Configuration(void);
void Delay_SYSTICK(__IO uint32_t nTime);
#endif /* __SYSTICK_H */
#include "SYSTICK.h"
static __IO uint32_t TimingDelay;
/****************************************************************************
* 名 称:void TimingDelay_Decrement(void)
* 功 能:获取节拍程序
* 入口参数:无
* 出口参数:无
* 说 明:此函数在stm32f10x_it.c文件调用
* 调用方法:无
****************************************************************************/
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
/****************************************************************************
* 名 称:void Delay(__IO uint32_t nTime)
* 功 能:定时延时程序 1ms为单位
* 入口参数:无
* 出口参数:无
* 说 明:
* 调用方法:无
****************************************************************************/
void Delay_SYSTICK(__IO uint32_t nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
***注意在CC++的目录中添加相应的头文件目录。
在stm32f10x_it.c文件中添加如下声明:extern void TimingDelay_Decrement(void);
同时更新如下函数为:
void SysTick_Handler(void)
{
TimingDelay_Decrement();
}
在main函数中,
添加 //First to config the system clock
RCC_Configuration(); //系统时钟设置及各外设时钟使能
if (SysTick_Config(72000)) //时钟节拍中断时1ms一次 用于定时
{
/* Capture error */
while (1);
}
让clock运行起来,同时,开启systick定时器,其时钟可以是HCLK的8分频或是HCLK,SysTick_Config函数默认是选用HCLK时钟的,72000/72000000 = 1/1000 = 1ms。
之后就可以调用Delay_SYSTICK(500)来延时500ms。而且不占用cpu,比for(;;)循环高效多了。
systick运用的更多相关文章
- STM32F10xxx 之 System tick Timer(SYSTICK Timer)
背景 研究STM32F10xxx定时器的时候,无意间看到了System tick Timer,于是比较深入的了解下,在此做个记录. 正文 System tick Timer是Cotex-M内核的24位 ...
- STM32学习及应用笔记一:SysTick定时器学习及应用
这几年一直使用STM32的MCU,对ARM内核的SysTick计时器也经常使用,但几乎没有仔细了解过.最近正好要在移植一个新的操作系统时接触到了这块,据比较深入的了解了一下. 1.SysTick究竟是 ...
- SYSTick 定时器
CM3 内核的处理器,内部包含了一个 SysTick 定时器,(SysTick 的时钟源自 HCLK 的 8 分频,8个系统时钟周期systick跳一个,即8*1/72M=1/9 us)Sys ...
- 用SysTick做的延时计时器
CM3.CM4的内核中都有个24位的SysTick定时器.这两个MCU里边的SysTick大同小异.SysTick的介绍可以参考:(来自CSDN博客的参考)或者(来自百度文库的参考)或者参考<C ...
- STM32学习笔记(六) SysTick系统时钟滴答实验(stm32中断入门)
系统时钟滴答实验很不难,我就在面简单说下,但其中涉及到了STM32最复杂也是以后用途最广的外设-NVIC,如果说RCC是实时性所必须考虑的部分,那么NVIC就是stm32功能性实现的基础,NVIC的难 ...
- [stm32] Systick
(一) 背景介绍在传统的嵌入式系统软件按中通常实现 Delay(N) 函数的方法为:for(i=0;i<=x;i++); x--: 对应于N毫秒的循环值对于STM32系列微 ...
- SysTick 定时器的使用
SysTick是STM32中的一个24位的定时器. Cortex‐M3处理器内部包含了一个简单的定时器.因为所有的CM3芯片都带有这个定时器,软件在不同 CM3器件间的移植工作得以化简.该定时器的时钟 ...
- STM32学习笔记:系统时钟和SysTick定时器
原文:http://blog.sina.com.cn/s/blog_49cb42490100s60d.html 1. STM32的时钟系统 在STM32中,一共有5个时钟源,分别是HSI.HS ...
- systick优先级的理解
sysTick系统嘀嗒定时器并非STM32独有的,它是Cortex内核的部分,CM3为它专门开出一个异常类型,并且在中断向量表中占有一席之地(异常号15).这样它可以很方便的移植到不同厂商出CM3内核 ...
- Keil RTX systick 初始化
在STM32F215上移植Keil的RTX操作系统,随便设置下就能好使,但是当我想知道systick到底是怎么设置的时候,就得翻翻代码了,原来在 rt_HAL_CM.h中以一个内联函数的形式定义的 _ ...
随机推荐
- *.rpm is not signed解决
1.# yum install qemu*报错如下:Package qemu-kvm-tools-0.12.1.2-2.113.el6.x86_64.rpm is not signed2.解决# vi ...
- tcpick
tcpick 是一款基于文本的嗅探器,能追踪,重组和重排tcp流.
- Struct2标签的传值方式(转载)
"#request.userList"> "center"> "id"/> : "username"/ ...
- cms-登陆
先介绍下登陆的思路: 1.在登陆页面首先前端验证用户名和密码是否正确,如果验证通过,则ajax的方式向后台提交数据. 2.在controller层,将得到的用户名名和密码封装进shiro的token, ...
- LeetCode Number of 1 Bits 计算1的个数
题意: 提供一个无符号32位整型uint32_t变量n,返回其二进制形式的1的个数. 思路: 考察二进制的特性,设有k个1,则复杂度为O(k).考虑将当前的数n和n-1做按位与,就会将n的最后一个1去 ...
- weka属性选择使用
醉了--- package edu.dcy.weka; import java.io.FileWriter; import java.util.ArrayList; import java.util. ...
- JSP开发过程遇到的中文乱码问题及解决方案
对于程序猿来说,乱码问题真的很头疼,下面列举几种常见的乱码. 1.数据库编码不一致导致乱码 解决方法: 首先查看数据库编码,输入: show variables like "%char%&q ...
- noip模拟赛#42
T1:给len=1e5的数字串,操作为将某个位置起始的后缀搬到最前面.求有多少个不重复的比原串大和多少个小. =>maya这铁定可以找出些什么规律来.然后就over 了. =>字符串has ...
- 2018.10.29 NOIP2018模拟赛 解题报告
得分: \(70+60+0=130\)(\(T3\)来不及打了,结果爆\(0\)) \(T1\):简单的求和(点此看题面) 原题: [HDU4473]Exam 这道题其实就是上面那题的弱化版,只不过把 ...
- 【BZOJ2243】[SDOI2011] 染色(树链剖分)
点此看题面 大致题意: 有一棵\(n\)个节点的无根树和\(m\)个操作,且每个节点有一个颜色.操作有两种:一种是将两点树上路径之间所有点染成颜色\(c\),另一种是询问两点树上路径之间颜色段的数量. ...