我做了一个小玩意,需要使用ADC,5110屏幕,输出PWM,还有RTC,红外等。现在发现其他部分就绪,添加原子哥的miniSTM32代码红外部分后,5110屏上显示的日期时间和ADC值还有PWM输出情况,要么不正常,要么干脆整个系统卡死,而且就算上述功能都可以用,红外也基本接收不到值,而且我发现红外可以“控制”系统其它部分功能是否运行,按一次遥控器,其它功能卡住,再按下别的键,又恢复了,求助各位这该怎么办。
红外部分的代码就贴这三个函数的吧,因为与例程里的代码基本相同。
void Remote_Init(void)
{
RCC->APB2ENR|=1<<2;
GPIOA->CRL&=0XFFFFFF0F;
GPIOA->CRL|=0X00000080;
GPIOA->ODR|=1<<1;
Ex_NVIC_Config(GPIO_A,1,FTIR);
MY_NVIC_Init(0,0,EXTI1_IRQChannel,2);
}
u8 Pulse_Width_Check(void)
{
u8 t=0;
while(RDATA)
{
t++;
delay_us(20);
if(t==250)
return t;
}
return t;
}
void EXTI1_IRQHandler(void)
{
u8 res=0;
u8 OK=0;
u8 RODATA=0;
while(1)
{
if(RDATA)
{
res=Pulse_Width_Check();
if(res==250)
break;
if(res>=200&&res<250)
OK=1;
else if(res>=85&&res<200)
{
Remote_Rdy=1;
Remote_Cnt++;
break;
}
else if(res>=50&&res<85)
RODATA=1;
else if(res>=10&&res<50)
RODATA=0;
if(OK)
{
Remote_Odr<<=1;
Remote_Odr+=RODATA;
Remote_Cnt=0;
}
}
}
}
PWM的部分就贴了中断优先级的
void Timerx_Init0(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<2;
TIM4->ARR=arr;
TIM4-> SC=psc;
TIM4->DIER|=1<<0;
TIM4->DIER|=1<<6;
TIM4->CR1|=0x01;
MY_NVIC_Init(1,1,TIM4_IRQChannel,2);
}
然后RTC就这句是跟中断优先级有关
MY_NVIC_Init(3,3,RTC_IRQChannel,2);
|