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