1
  • 微控制器: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:

串行监视器 串行监视器

对不起,我的英语不好。

4

2 回答 2

0

示例

字节 1:'S':起始字节

字节 2:arrayByte[0]

字节 3:arrayByte[1]

…………

字节 11:arrayByte[9]

Byte 12:校验和(可能是所有发送字节之和的 LSB)

如果接收到的字节是'S',接收方才会开始接收。
在完全接收完所有字节后,接收方必须再次计算校验和以确保没有字节丢失。

于 2018-07-10T05:55:37.410 回答
0

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

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

int k;


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

        array[k++] = U1RXREG;


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

    }
于 2018-07-09T02:23:17.290 回答