Как получить более 5 байтов от UART?

  • Микроконтроллер: 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;
                }
            }
    }

Я отправляю каждую позицию массива на ПК:

последовательный монитор последовательный монитор

Извините за мой плохой английский.

2 ответа

Решение

Пример:

Байт 1: 'S': начальный байт

Байт 2: arrayByte[0]

Байт 3: arrayByte [1]

.......

Байт 11: arrayByte[9]

Байт 12: контрольная сумма (может быть младший бит суммы всех отправленных байтов)

Получатель начнет прием только в том случае, если полученный байт представляет собой "S".
После полного получения всех байтов получатель должен был снова вычислить контрольную сумму, чтобы убедиться, что байты не потеряны.

После многих попыток у меня был успех.

Я делюсь правильным кодом для всех, кому это нужно.

int k;


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

        array[k++] = U1RXREG;


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

    }
Другие вопросы по тегам