您的位置 首页 制造

收拾体系时钟定时器–SysTick的使用

Cortex-M3的内核中包含一个SysTick时钟。SysTick为一个24位递减计数器,SysTick设定初值并使能后,每经过1个系统时钟周期,计数值就减1。

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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/zhizao/258779.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部