如何从uart接收超过5个字节?

时间:2018-07-08 21:07:13

标签: uart microchip circular-buffer dspic xc16

  • 单片机:dsPIC30F4013
  • 编译器:xc16

我正在尝试从UART接收数组,但是我只得到前5个字节。

我知道接收器缓冲区的深度为4个字,但是我也需要接收其他字节。也许使用循环缓冲区,但我不知道如何使用它。

有人可以帮助我获取数组中的所有字节吗?

这是我当前的代码:

void __attribute__((__interrupt__, auto_psv)) _U1RXInterrupt(void) {
        IFS0bits.U1RXIF = 0; 

        int i = 0;
            while (U1STAbits.URXDA) {
                array[i] = U1RXREG;
                i++;
                if (i == 10) {
                    break;
                }
            }
    }

我正在将每个阵列位置发送到PC:

串行监视器 serial-monitor

对不起,我的英语不好。

2 个答案:

答案 0 :(得分:0)

经过多次尝试,我取得了成功。

我正在为需要它的任何人共享正确的代码。

int k;


void __attribute__((__interrupt__, auto_psv)) _U1RXInterrupt(void) {
        IFS0bits.U1RXIF = 0;

        array[k++] = U1RXREG;


        if (k == 10) {
            k = 0;
        }

    }

答案 1 :(得分:0)

示例

字节1:“ S”:起始字节

字节2:arrayByte [0]

字节3:arrayByte [1]

.......

字节11:arrayByte [9]

字节12:校验和(也许是所有发送字节之和的最低位)

仅当接收的字节为'S'时,接收方才开始接收。
接收完所有字节后,接收方必须再次计算校验和,以确保没有字节丢失。