当前位置:首页 > 单片机 > 单片机
[导读]1 硬件电路配置这里还是借用前面LED电路我就不贴图片。2 时钟说明SysTick和HCK的时钟频率是一样的库函数代码如下/***@briefInitializeandstarttheSysTickcounteranditsinterrupt.**@paramticksnumberofticksbetweent

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

}

}


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