奇偶校检: 10101010 偶个1; 01010101 奇个1;
USART_Rx_STA的作用:接收标志
bit15 | bit14 | bit13:0 |
接收完标志0X0a | 0X0d | 有效数据个数 |
//串口一中断服务函数
void USART1_IRQHandler(void)
{
u8 res;//保存中断接受到的数据
//判断是否中断收到数据
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
res=USART_ReceiveData(USART1);//将中断的数据保存
//USART_SendData(USART1,res);//发送中断的数据
USART_SendData(USART2,res);
if(flag)
{
GPIO_SetBits(GPIOC,GPIO_Pin_13);
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
flag=0;
}else
{
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
GPIO_SetBits(GPIOA,GPIO_Pin_0);
flag=1;
}
USART_ClearITPendingBit(USART1,USART_IT_RXNE); //接收后先清空标志位
}
}
//串口二中断函数
void USART2_IRQHandler(void)
{
u8 res;//保存中断接受到的数据
//判断是否中断收到数据
if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)
{
res=USART_ReceiveData(USART2);//将中断的数据保存
//printf("%c",res);
//USART_SendData(USART1,res);//发送中断的数据
//USART_SendData(USART2,res);
//USART_SendData(USART1,res);
//printf("%c\r\n",res);
if(res=='1')
{
GPIO_SetBits(GPIOC,GPIO_Pin_13);
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
}
else
{
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
GPIO_SetBits(GPIOA,GPIO_Pin_0);
}
if((USART2_RX_STA & 0x8000) == 0) //接收未完成
{
if(USART2_RX_STA & 0x4000) //接收到了0x0d
{
if(res != 0x0a)USART2_RX_STA = 0; //接收错误,重新开始
else USART2_RX_STA |= 0x8000; //接收完成了
}
else //还没收到0X0D
{
if(res == 0x0d)USART2_RX_STA |= 0x4000;
else
{
USART2_RX_BUF[USART2_RX_STA & 0X3FFF] = res ;
USART2_RX_STA++;
if(USART2_RX_STA > (199))USART2_RX_STA = 0; //接收数据错误,重新开始接收
}
}
}
//USART_ClearITPendingBit(USART2,USART_IT_RXNE); //接收后先清空标志位
}
}