初级会员

- 积分
- 132
- 金钱
- 132
- 注册时间
- 2016-3-28
- 在线时间
- 27 小时
|
1金钱
以下为更改后的串口1中断函数
u8 USART_RX_BUF[USART_REC_LEN];
u16 USART_RX_STA=0;
void USART1_IRQHandler(void)
{
u8 Res;
#if SYSTEM_SUPPORT_OS
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断,设置成以0XAB开头,0XCD结尾
{
Res =USART_ReceiveData(USART1);
if((USART_RX_STA&0x8000)==0)
{
if(USART_RX_STA&0x4000) //转义
{
if(Res==0xab||Res==0xcd||Res==0xfe)
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res;
USART_RX_STA++;
USART_RX_STA=USART_RX_STA&0x3fff;
// USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
else {
USART_RX_STA=0;
// USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
}
else
{
if(USART_RX_STA==0&&Res!=0xab)USART_RX_STA=0;
else{
if(Res==0xfe)
{
USART_RX_STA|=0x4000;
// USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
else if(Res==0xcd)
{
USART_RX_STA|=0x8000;
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;
// USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
// }
}
}
}
#if SYSTEM_SUPPORT_OS
OSIntExit();
#endif
}
#endif
各位大神,抽出宝贵时间,帮忙看看,谢谢!
|
|