如何采用SysTick来做定时器

 1 硬件电路配置

 
这里还是借用前面LED电路我就不贴图片。
 
2 时钟说明
 
SysTick和HCK的时钟频率是一样的库函数代码如下
 
/**
 
*@briefIniTIalizeandstarttheSysTIckcounteranditsinterrupt.
 
*
 
*@paramTIcksnumberofTIcksbetweentwointerrupts
 
*@return1=failed,0=successful
 
*
 
*Initialisethesystemticktimeranditsinterruptandstartthe
 
*systemticktimer/counterinfreerunningmodetogenerate
 
*periodicalinterrupts.
 
*/
 
static__INLINEuint32_tSysTick_Config(uint32_tticks)
 
{
 
如何采用SysTick来做定时器
 
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--;
 
}
 
}

  • 如何采用SysTick来做定时器已关闭评论
    A+
发布日期:2019年03月04日  所属分类:参考设计