Вывод массива char через UART
- Войдите на сайт для отправки комментариев
Вс, 07/11/2021 - 16:10
Здравствуйте, уважаемые форумчане.
Не получается разобраться с выводом массива char через UART.
Задача:
1.Отправить строку данных "$GNRMC,153240.00,A,4314.26717,N,07649.87500,E,0.018,,271021,,,A*60" через программу Terminal v1.9b в микроконтроллер.
2.Записать эту строку в массив char buffer[120].
3.Затем вывод этого массива через UART микроконтроллера в программу Terminal v1.9b
вот код:
void USART_init(void); char USART_get_byte(void); void USART_send_byte(char c); void USART_send_str(char *s); char buffer[120]; int main(void) { USART_init(); while(1) { int i = 0; if (USART_get_byte()) { buffer[i] = USART_get_byte(); USART_send_byte(buffer[i]); i++; } }
В результате получается вот что:
Почему то часть символов теряется.
А чего ж Вы хотите, если читаете по 2 байта (один в 17-й строке, а второй - в 19-й), а запоминаете и передаете только по одному?
Объедините строки 17 и 19 так, чтобы прочитанный байт сразу попадал в буфер.
Спасибо, частично помогло
написал такой код:
Результат:
Теперь почти вся строка целая, кроме начала. Должно быть $GNRMC, а приходит <0>RMC
А чего #1 не последовали то?
ЗЫ: У вас, кстати, скобки ‘}’ в приведённом вами коде не хватает. Main () не закрывается.
Не имеет смысла - по uart может и 0 прилететь.
Сделал, так компилятор выдает предупреждение "suggest parentheses around assignment used as truth value".
Но все равно заработало так же как и у меня. Код:
Код:
Результат:
Приходит RMC без <0>, а должно $GNRMC
Да, я пропустил их когда копировал).
В Terminal 1.9 $ предваряет число, записанное в шестнадцетеричной форме.
В NMEA максимальная длина строки - 72 символа, если помню правильно. + 1 символ под терминатор, если нужен.
Да, кстати убрал символ "$" и вот что получилось:
Да, кстати убрал символ "$" и вот что получилось:
Tima123 - выведите в HEX то, что вы передаете, а не то что получаете
HEX-вариант строки "$GNRMC,153240.00,A,4314.26717,N,07649.87500,E,0.018,,271021,,,A*60$0D"
24 47 4e 52 4d 43 2c 31 35 33 32 34 30 2e 30 30 2c 41 2c 34 33 31 34 2e 32 36 37 31 37 2c 4e 2c 30 37 36 34 39 2e 38 37 35 30 30 2c 45 2c 30 2e 30 31 38 2c 2c 32 37 31 30 32 31 2c 2c 2c 41 2a 36 30 24 30 44
Я, кстати, понял, почему там ошибка выходила. Там нужно два "$$" отправлять. В пограмме, в help, так записано.