This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

5438A 串口采用查询方式接收数据包,只收到最后1字节



各位大神好,我使用的是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个字节,为什么前面的字节全部丢了呢?

谢谢~~

  • 楼主,

         能不能把buf数组设小点试试,另外能不能多post点代码上来,更好找问题一些。

  • 楼上的大神您好,应该和大小没有关系的,我实际代码中 size 是256。

    在给一些的话  那就是 串口的init(8MHz   ;9600;查询所以没开中断) :主循环什么的。。。。。。。没有半点关系啊   。。。。。

    关键就是为什么     只接到了  最后!!最后 1个字节???  其它的字节呢??  我设了断点的,上位机发包,直接就接了数据包的最后一个字节!

    不用怀疑上位机或者其它的了  因为用中断处理的话,完全没有问题!!为什么查询就是不行,错在哪里??

  • 楼主你好,

         如果上位机只发一个字节是否可以进你设置的断点?

  • Hi  Ray,

       通过你的描述,我感觉问题应该是处在你主程序的判断语句里面,

    你用的是查询接收应该不需要是采用if ( UCA0IFG & UCRXIFG)的方式,

    你可以试试直接使用while(! UCRXIFG);来一直等待接收缓存中有数据,然后再去读取数据,清楚标志位。


    谢谢


    ken


     

  • 感谢 stpe by step  和 Ken Wang 的解答。

    其实我的程序主要   还是 主循环做的事情太多,导致串口的接收buf我还没存下来,下一个接收就刷新buf了。。优化程序了以后就可以了~~