微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 整理系统时钟定时器--SysTick的应用

整理系统时钟定时器--SysTick的应用

时间:11-26 来源:互联网 点击:
Cortex-M3的内核中包含一个SysTick时钟。SysTick 为一个24位递减计数器,SysTick设定初值并使能后,每经过1个系统时钟周期,计数值就减1。计数到0时,SysTick计数器自动重装初值并继续计数,同时内部的COUNTFLAG标志会置位,触发中断(如果中断使能)。

STM32的应用中,使用Cortex-M3 内核的SysTick作为定时时钟,设定每一毫秒产生一次中断,在中断处理函数里对N减一,在Delay(N)函数中循环检测N是否为0,不为0则进行循环等待;若为0则关闭SysTick时钟,退出函数。

外部晶振为8MHz,9倍频,系统时钟为72MHz,SysTick的最高频率为9MHz(最大为HCLK/8),在这个条件下,把SysTick 效验值设置成9000,将SysTick 时钟设置为9MHz, 就能够产生1ms的时间基值,即SysTick产生1ms的中断。

延迟时间将不随系统时钟频率改变。

固件库(ST)中SysTick的相关函数:

1、SysTick_CounterCmd()//启动 or关闭 or 清零 SysTick计数器

2、SysTick_ITConfig ()//打开or 关闭 SysTick中断

3、SysTick_CLKSourceConfig( ) //设置SysTick时钟源。

4、SysTick_SetReload ( )//设置SysTick重装载值。

5、SysTick_GetCounter( )//获取SysTick计数器的值

6、SysTick_GetFlagStatus( ) //检测测定的SysTick是否被标记

初始化相关模块:

SysTick_CounterCmd(SysTick_Counter_Disable);

SysTick_ITConfig(DISABLE);

SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
SysTick_SetReload(9000); // 设定SysTick达到1ms计数结束
SysTick_ITConfig(ENABLE); // 使能SysTick中断

中断处理:
void SysTickHandler (void)

{
if (TimingDelay != 0x00)
TimingDelay--;
}

延时代码:
void Delay(u32 nTime) {
SysTick_CounterCmd(SysTick_Counter_Enable); // 使能SysTick计数器
TimingDelay = nTime; // 读取延时时间
while(TimingDelay != 0); // 判断延时是否结束
SysTick_CounterCmd(SysTick_Counter_Disable); // 关闭SysTick计数器
SysTick_CounterCmd(SysTick_Counter_Clear); // 清除SysTick计数器
}

应用代码:
Delay(300); // 延时 300ms

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top