getcUSART не работает должным образом? (PIC18F с Bluetooth)

Я работаю над проектом с компилятором C18 и PIC18F4520.

У меня проблемы с использованием getcUSART. Когда я отправляю символы через модуль Bluetooth, в какой-то момент он просто зависает.

int input(char Arr[])
 {
       Delay10KTCYx(400); // Delay between data transmissions
       while(BusyUSART());
       // wait for user input
       while (!DataRdyUSART());
       //get string from terminal
       Arr[0] = getcUSART();       //read a byte from USART
        Delay10KTCYx(400); // Delay between data transmissions
        while(BusyUSART());
       // wait for user input
       while (!DataRdyUSART());
       //get string from terminal
       Arr[1] = getcUSART();       //read a byte from USART
        Delay10KTCYx(400); // Delay between data transmissions
        while(BusyUSART());
       // wait for user input
       while (!DataRdyUSART());
       //get string from terminal   
       Arr[2] = getcUSART();       //read a byte from USART
        Delay10KTCYx(400); // Delay between data transmissions


    return 1;
  }

Вот мой код, когда я получаю символы с терминала. Проблема в том, что я хотел бы, чтобы пользователь мог выбрать вариант, такой как RUN или SET, но тогда, если это какой-либо другой вариант, он должен снова запросить у пользователя ввод. Проблема в том, что если я, например, поставлю POP в терминале, он действительно попросит пользователя ввести еще раз, но затем, если я наберу RUN или SET, он все равно будет думать, что это не команда. Кроме того, если я наберу, например, RUNbre, bre будет прочитано ПОЗЖЕ, когда я снова использую getcUSART. Я хочу каким-то образом очистить буфер, определяющий, что входит в getcUSART, но я не знаю, как это сделать.

Любая помощь будет оценена по достоинству, спасибо.


person Briget    schedule 20.04.2018    source источник


Ответы (1)


На какой частоте вы используете PIC?

Как правило, лучше протестировать использование регистров непосредственно перед использованием библиотеки c18, хотя, по моему опыту, библиотека c18 надежна. Это также поможет вам лучше понять архитектуру микропроцессора, заставив вас снова, снова и снова просматривать техническое описание... ну вы поняли.

Сначала вы должны убедиться, что ваше оборудование настроено правильно, т. Е. TX-RX, RX-TX и заземление — это все, что необходимо для связи UART. Похоже, для ваших требований этого должно быть достаточно, хотя я могу ошибаться. Убедитесь, что вы правильно настроили UART. Выбранные вами настройки влияют на значение регистра SPBRG, которое вам нужно передать, чтобы получить что-то как можно более близкое к скорости передачи данных, которая вам нужна (обычно это небольшая ошибка).

Вам нужно будет ознакомиться с документацией PIC18, которая включает уравнения, которые необходимо применить в зависимости от выбранных вами настроек, то есть синхронных, асинхронных, высокоскоростных, низкоскоростных.

Есть много вещей, которые вы можете отладить и проверить, есть регистры, которые отображают состояние регистра передачи/получения, т. е. заполнены ли они или пусты? Это может быть ключом к пониманию того, почему ваш код не работает (при условии, что аппаратное обеспечение в порядке).

person elecman93    schedule 03.05.2018