×
单片机 > 单片机程序设计 > 详情

如何采用SysTick来做定时器

发布时间:2020-08-28 发布时间:
|

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--;

}

}


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR单片机中RC电容触摸的感应原理解析