控制/MCU
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--;
}
}
全部0条评论
快来发表一下你的评论吧 !