欢迎来到天天文库
浏览记录
ID:13336075
大小:82.50 KB
页数:3页
时间:2018-07-22
《用stm32的systick时钟做延时函数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、用STM32的SysTick时钟做延时函数的学习笔记 SysTick 就是一个定时器而已,只是它放在了NVIC(嵌套中断控制器)中,主要的目的是为了给操作系统提供一个硬件上的中断(号称滴答中断)。 滴答中断:操作系统进行运转的时候,也会有“心跳”。它会根据“心跳”的节拍来工作,把整个时间段分成很多小小的时间片,每个任务每次只能运行一个“时间片”的时间长度就得退出给别的任务运行,这样可以确保任何一个任务都不会霸占整个系统不放。这个心跳,可以通过定时器来周期性触发,而这个定时器就是systick。很明显,这个“心跳”是不允许任何人来随意
2、地访问和修改的。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息。 systick 的使用有四个寄存器: STK_CSR, 0xE000E010-- 控制寄存器 STK_LOAD,0xE000E014 -- 重载寄存器 STK_VAL,0xE000E018 -- 当前值寄存器 STK_CALRB,0xE000E01C -- 校准值寄存器1、STK_CSR控制寄存器:寄存器内有4个位具有意义 第0 位:ENABLE,
3、Systick使能位(0:关闭Systick 功能;1:开启Systick功能) 第1 位:TICKINT,Systick中断使能位(0:关闭Systick 中断;1:开启Systick 中断) 第2 位:CLKSOURCE,Systick时钟源选择(0:使用HCLK/8 作为Systick时钟;1:使用HCLK作为Systick 时钟) 第3 位:COUNTFLAG,Systick计数比较标志,如果在上次读取本寄存器后,SysTick 已经数到了0,则该位为1。如果读取该位,该位将自动清零。2、STK_LOAD 重载寄存器
4、 Systick 是一个递减的定时器,当定时器递减至0 时,重载寄存器中的值就 会被重装载,继续开始递减。STK_LOAD 重载寄存器是个24 位的寄存器最大计数0xFFFFFF。3、STK_VAL当前值寄存器 也是个24 位的寄存器,读取时返回当前倒计数的值,写它则使之清零,同时还会清除在SysTick 控制及状态寄存器中的COUNTFLAG 标志。4、STK_CALRB 校准值寄存器 位31 NOREF :1=没有外部参考时钟(STCLK 不可用)0=外部参考时钟可用 位30 SKEW:1=校准值不是准确的1ms 0=校准值是
5、准确的1ms具体如图所示:例程如下:/*************************************************************** SysTick四个寄存器的地址入口定义****************************************************************/#define SysTick_Tenms (*((volatile unsigned long *)0xE000E01C)) //要定义成volatile类型#define
6、 SysTick_Current (*((volatile unsigned long *)0xE000E018)) #define SysTick_Reload (*((volatile unsigned long *)0xE000E014)) #define SysTick_CSR (*((volatile unsigned long *)0xE000E010)) /***************************************************************
7、 SysTick的配置****************************************************************/void SysTick_Configuration(void) { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);//置AHB 时钟为SysTick 时钟,72MHZ SysTick_Current=0; //当前值寄存器 SysTick_CSR=0x06;// HCLK作为Systick时钟,Systick中断使能位}/*****
8、*********************************
此文档下载收益归作者所有