各位大神好,我使用的是5438A。
串口使用标志位查询方式接收数据,但通过仿真调试,我的接收buf里只收到了 数据包的最后一个字节(以前遇到过,但怎么也想不起来是如何解决的o(╯□╰)o)
变量:
uint_8 buf[1024];
uint_8 rx_tmp;
uint_16 index;
程序:
wile(1) {
if ( UCA0IFG & UCRXIFG) {
rx_tmp = UCA0RXBUF;
buf[ index++ ] = rx_tmp;
}
}
仿真结果: 只有buf[0] 显示了上位机发出数据包的最后一个字节,buf其他部分均无数据,index值为1,只收了最后1个字节,为什么前面的字节全部丢了呢?
谢谢~~
step by step:
楼主,
能不能把buf数组设小点试试,另外能不能多post点代码上来,更好找问题一些。
user3785308:
回复 step by step:
楼上的大神您好,应该和大小没有关系的,我实际代码中 size 是256。
在给一些的话 那就是 串口的init(8MHz ;9600;查询所以没开中断) :主循环什么的。。。。。。。没有半点关系啊 。。。。。
关键就是为什么 只接到了 最后!!最后 1个字节??? 其它的字节呢?? 我设了断点的,上位机发包,直接就接了数据包的最后一个字节!
不用怀疑上位机或者其它的了 因为用中断处理的话,完全没有问题!!为什么查询就是不行,错在哪里??
step by step:
回复 user3785308:
楼主你好,
如果上位机只发一个字节是否可以进你设置的断点?
Ken Wang:
Hi Ray,
通过你的描述,我感觉问题应该是处在你主程序的判断语句里面,
你用的是查询接收应该不需要是采用if ( UCA0IFG & UCRXIFG)的方式,
你可以试试直接使用while(! UCRXIFG);来一直等待接收缓存中有数据,然后再去读取数据,清楚标志位。
谢谢
ken