用串口接收一组数据(每组是25个连续字符,最后有两个字符是校验码),实现每次中断都用这些数据更新一个数组的全局变量,如何实现啊。
如果是从中间开始接受的,如何避免混乱。还有是否要利用,如何利用校验位……
谢啦~
xyz549040622:
1.在串口中断中判断接收的数量,超过25个说明接受完毕了,这里可以通过读取缓冲区来实现
2.也可以设置开始和结束符,检测开始和结束符中间的字符都是需要的
user4180434:
回复 xyz549040622:
这样行不?求教~~
uchar uchar DataBuf[REC_MAX]; // 缓存void Initial_Serial(void) // 串口初始化{ …. Rec_Len = 0;// 初始接收长度为0 Rec_Flag = 0;// 未接收 0 未接收或接收完成 1 开始接收 ….}//串口接收中断服务程序void UARTIntHandler(void){ uchar sbuffer; while(!UARTCharsAvail(UART0_BASE)); sbuffer=UARTCharGetNonBlocking(UART0_BASE); uint32_t ulStatus; //获取中断状态 ulStatus = UARTIntStatus(UART0_BASE, true); //清除中断标志 UARTIntClear(UART0_BASE, ulStatus); // 如果收到数据尾1而且当前未接收 //数据:REC_MAX个字符+校验数据尾CHECK_TAIL0+数据尾CHECK_TAIL1 if((sbuffer == CHECK_TAIL1) && (Rec_Flag == 0)){ Rec_Flag = 1; Rec_Len = 0; } // 开始接收 else if(Rec_Flag){ if(Rec_Len < (REC_MAX – 1)) { Rec_Len++; DataBuf[Rec_Len] = sbuffer;// 当数据送缓冲区 } else if(Rec_Len == (REC_MAX – 1))// 接收完成 { if(DataBuf[Rec_Len] == CHECK_TAIL0) { …. // 表明接收成功未出错 } else { …. // 有误码 } Rec_Flag = 0;// 接收完成,标志清0 } }}
zhaoyang liu:
您好,我现在也需要通过uart0接受数据,具体的和您的情况十分相似,但是发现程序运行时没有进入中断。。。看您的问题已解决,请求指点。。。我通过UART0给设备发送指令后设备可以正常运行,现在想发送指令让设备回馈数据,指令已发送,但是数据采不到,您能否把您处理好的代码传一下我学习一下,谢谢了
TI中文支持网
