金牌会员
 
- 积分
- 1126
- 金钱
- 1126
- 注册时间
- 2017-2-16
- 在线时间
- 104 小时
|
发表于 2017-5-3 19:00:12
|
显示全部楼层
void USART1_IRQHandler(void) //´串口一中断函数
{
u8 Res;
int jiaodu ,i=0;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
Res =USART_ReceiveData(USART1); //读取接收到的数据
RX1_Buffer[COM1.RX_Cnt++] = Res; //缓存数据
COM1.B_NO_DEAL++; //未处理字节+1
if(COM1.B_NO_DEAL >= Pack_Len)//未处理数据量大于数据包长度
{
if(RX1_Buffer[COM1.RX_Start] == Pack_Head&&RX1_Buffer[COM1.RX_Start+Pack_Len-1] == Pack_Tail)
{
jiaodu=RX1_Buffer[(COM1.RX_Start+1)]%256+RX1_Buffer[(COM1.RX_Start+2)]*256;
printf("%d\r\n",jiaodu);
if(RX1_Buffer[COM1.RX_Start+3]==0x01) printf("\r\n");
COM1.RX_Start+=Pack_Len;
COM1.B_NO_DEAL-=Pack_Len;
if(i>3)
{
COM1.RX_Start=0;
COM1.B_NO_DEAL=0;
COM1.RX_Cnt=0;
i=0;
}
}
else
{
COM1.B_NO_DEAL--;//未处理字节数减一
COM1.RX_Start++;//数据包起始位置加一
}
}
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
}
这是我以前写过的一个有包头包尾的串口接收程序,测试成功,你可以参考一下,还有串口发送是一个字节一个字节发送的。 |
|