如何采用SysTick来做定时器

如何采用SysTick来做定时器,第1张

1 硬件电路配置

这里还是借用前面LED电路我就不贴图片。

2 时钟说明

SysTIck和HCK的时钟频率是一样的库函数代码如下

/**

*@briefIniTIalizeandstarttheSysTIckcounteranditsinterrupt.

*

*@paramTIcksnumberofticksbetweentwointerrupts

*@return1=failed,0=successful

*

*Initialisethesystemticktimeranditsinterruptandstartthe

*systemticktimer/counterinfreerunningmodetogenerate

*periodicalinterrupts.

*/

static__INLINEuint32_tSysTick_Config(uint32_tticks)

{

 

if(ticks》SysTick_LOAD_RELOAD_Msk)return(1);/*Reloadvalueimpossible*/

SysTick-》LOAD=(ticks&SysTick_LOAD_RELOAD_Msk)-1;/*setreloadregister*/

NVIC_SetPriority(SysTick_IRQn,(1《《__NVIC_PRIO_BITS)-1);/*setPriorityforCortex-M0SystemInterrupts*/

SysTick-》VAL=0;/*LoadtheSysTickCounterValue*/

SysTick-》CTRL=SysTick_CTRL_CLKSOURCE_Msk|

SysTick_CTRL_TICKINT_Msk|

SysTick_CTRL_ENABLE_Msk;/*EnableSysTickIRQandSysTickTimer*/

return(0);/*Functionsuccessful*/

}

由库函数可知道没有进行分频动作所以时钟和主时钟一样

配置时钟中断的时间间隔

voidSysTick_Init(void)

{

/*SystemFrequency/10001ms中断一次

*SystemFrequency/10000010us中断一次

*SystemFrequency/10000001us中断一次

*/

//if(SysTick_Config(SystemFrequency/100000))//ST3.0.0库版本

if(SysTick_Config(SystemCoreClock/1000))//ST3.5.0库版本

{

/*Captureerror*/

while(1);

}

//我需要不断的开启中断所以这句话屏蔽起来

//SysTick-》CTRL&=~SysTick_CTRL_ENABLE_Msk;

}

用中断模式所以需要在中断文件中做定时标志。一下这个函数在中断文件中

/**

*@briefThisfunctionhandlesSysTickHandler.

*@paramNone

*@retval:None

*/

voidSysTick_Handler(void)

{

TimingDelay_Decrement();

}

中断函数在调用一个计数函数,计数函数应该放在外面一个公共文件中方便各个文件中数据传递。

/*

*函数名:TimingDelay_Decrement

*描述获取节拍程序

*输入无

*输出无

*调用在SysTick中断函数SysTick_Handler()调用

*/

voidTimingDelay_Decrement(void)

{

if(TimingDelay!=0x00)

{

TimingDelay--;

}

}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2587899.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-08
下一篇 2022-08-08

发表评论

登录后才能评论

评论列表(0条)

保存