金牌会员
 
- 积分
- 2085
- 金钱
- 2085
- 注册时间
- 2016-8-8
- 在线时间
- 362 小时
|
10金钱
这个是我自己定的协议,通信方面一窍不通,照着历程改了改程序也走不通,求大神指导
附上我丑陋的代码:
void USART1_IRQHandler(void)
{
u8 res;
USART_RX_BUF[0]=0xAA;//帧头
USART_RX_BUF[1]=0x83;//控制字
if(USART1->SR&(1<<5))//接收到数据
{
res=USART1->DR;
if(USART_RX_CNT<7)
{
USART_RX_BUF[USART_RX_CNT]=res;
USART_RX_CNT++;
}
}
USART_RX_BUF[7]=xor_dat(USART_RX_BUF,9);//校验
USART_RX_BUF[8]=0x55;//帧尾
}
unsigned char xor_dat(unsigned char *d,int num)//计算异或校验
{
unsigned char res=0;
int n;
for(n=0;n<num;n++)
{
res^=d[n];
}
return res;
}
主程序是这么改的:
while(1)
{
if(USART_RX_CNT==7)
{
printf("\r\n你发送的消息为:\r\n");
for(t=0;t<9;t++)
{
USART1->DR=USART_RX_BUF[t];
while((USART1->SR&0x40)==0);
}
}
}
USART_RX_CNT是我定义的,初值为2,因为协议里数据是五个字节。
程序要是还能改求大神指导啊!!!
|
|