初级会员

- 积分
- 158
- 金钱
- 158
- 注册时间
- 2019-3-14
- 在线时间
- 25 小时
|

楼主 |
发表于 2019-4-8 19:47:57
|
显示全部楼层
void USART1_IRQHandler(void) //USART1的中断响应函数
{
u8 Rec; //接收数据临时变量
if(USART_GetITStatus(USART1 , USART_IT_RXNE) != RESET) //判断是否允许USART1接收中断,如果允许,则开始读取数据
{
Rec = USART_ReceiveData(USART1); //将接收的数据先放入临时变量中
if((USART_RX_STA&0x8000)==0) //检查USART_RX_STA的[15]是否为1。数据没接收完,则
{
if(USART_RX_STA&0x4000) //检查USART_RX_STA的[14]是否为1。接收到0x0D,则
{
if(Rec!=0x0A) //判断下一个数据是不是0x0A。若不是,则
USART_RX_STA=0; //接收错误,重新开始
else //若是,则
USART_RX_STA|=0x8000; //将[15]置为1,标记完成
}
else //还没收到0x0D
{
if(Rec==0x0d) //判断下一个数据是不是0x0D。若是,则
USART_RX_STA|=0x4000; //将[14]置为1
else //若不是,则
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Rec; //将临时变量里存放的数据放入接收缓冲数组,
USART_RX_STA++; //放入的位数由USART_RX_STA决定,之后自加1
if(USART_RX_STA > (USART_REC_LEN-1)) //如果因长时间没有收到0x0D,导致接收的数据个数大于最大接收个数
USART_RX_STA=0; //则接收错误,重新开始
}
}
}
}
} |
|