研究生
最后登录1970-1-1
在线时间 小时
注册时间2016-7-21
|
今天用103的开发板写了个测试代码,用SYSTICK做延时函数,用RTC做1S计数器。关键代码如下:
void SysTick_Init(void)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//72MHz/8 = 9MHz
NVIC_SetPriority(SysTick_IRQn, 0);
fac_us = sysclk / 8;//72/8 = 9,9次1uS
fac_ms = (u16)fac_us * 1000;
}
SYSTICK中断优先级为0,RTC中断优先级为1,1
void NVIC_RTC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
主函数执行LED亮灭1秒钟循环:
while( 1 )
{
GPIO_SetBits(GPIOB, GPIO_Pin_5);//LED灭
Delay_ms(1000);
GPIO_ResetBits(GPIOB, GPIO_Pin_5);//LED亮
Delay_ms(1000);
}
RTC时钟秒中断中执行:
void RTC_IRQHandler(void)
{
if(RTC_GetITStatus(RTC_IT_SEC) != RESET)
{
RTC_ClearITPendingBit(RTC_IT_SEC);
Time_Convert();
Display();
if((second % 2) == 0)
Display_Dot();
else
NotDisplay_Dot();
}
}
主函数的循环不执行,LED保持灭的状态。RTC时钟秒中断函数正常执行。无论将两个中断优先级设置为高或者低都是一样,systick延时不执行。这两个计数器工作会冲突?或者是设置需要有特别注意的地方?
|
|