当前位置:首页 > 单片机 > 单片机
[导读]Systick是STM32中特有的系统时钟Systick有两个功能:1.可以产生精确延时;2.可以提供给系统一个单独的时钟节拍。一般延时程序:DELAY(N){ for( i=0 ; i

Systick是STM32中特有的系统时钟

Systick有两个功能:

1.可以产生精确延时;

2.可以提供给系统一个单独的时钟节拍。

一般延时程序:

DELAY(N)

{ for( i=0 ; i<=x ; i++ ) ;

}

对于STM32系列的微处理器中,执行一条指令只需要几十ns,进行for循环时,要实现N毫秒延时,那么x的意义非常大,而且由于系统频率的宽广,很难计算出延时N毫秒的精确值,那么在一些高速电路中,是不允许的,容易出现问题,很难查找出来。尤其在液晶驱动中,延时要求非常精确。针对STM32的处理器中,需要重新设计一个方法实现该功能,来代替DELAY(N)延时;

cortex-m3中包含了一个Systick时钟,Systick是一个24位的递减计数器,设定初值并使能后,每经过1个系统时钟周期,该计数器减1,计数到零时,systick自动重装初值,并继续计数,同时内部的COUNTFLAG标志位会置1,触发中断(中断如果使能);

外部晶振是8MHz,9倍频,系统时钟为72MHz,systick的最大值为9MHz(最大值为HCLK/8),在这个条件下,如果将计数器的效验值设置为9000,将systick设置为9MHz,能够产生1ms的时基值,即systick产生1ms的中断,

systick时钟共包含4个寄存器:

1.CTRL COUNTFLAG CLKSOURCE TICOUNT ENABLE

2.LOAD

3.VAL

4.CALIB

利用ST库函数设置Systick的方法

1.调用SysTick_CountCmd() 失能SysTick计数器

2.调用SysTick_ITConfig() 失能SysTick中断

3.调用SysTick_CLKSourceConfig() 配置SysTick的时钟源

4.调用SysTick_SetReload() 设置SysTick 的效验值

5.调用SysTick_ITConfig() 使能SysTick中断

6.调用SysTick_CountCmd() 使能SysTick计数器

void SysTick_Config() //配置好,并将计数器使能

{

SysTick_CountCmd(SysTick_CountCmd_DISABLE);

SysTick_ITConfig(DISABLE);

SysTick_CLKSourceConfig( SysTick_CLKSourceConfig_EXTERN);

SysTick_SetReload(SysTick_SetReload_9000);

SysTick_ITConfig(ENABLE);

SysTick_CountCmd(SysTick_CountCmd_ENABLE);

}

延时函数:

void Delay_MS(u16 diy)

{

Delay=diy;

while(Delay);

}

extern vu16 Delay;

void SysTickHandle() /systick中断服务程序/

{

Delay--;

}

如果延时较长,那么该延时程序一定程度上还是在耗CPU的资源。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭