Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос про UART
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
kt368
Здравствуйте! Подскажите, что я увижу в терминале на ПК, если я передаю с МК байт, содержащий в себе 0x01? На ПК я тоже должен увидеть единицу?
kovigor
Цитата(kt368 @ Oct 8 2013, 16:08) *
Подскажите, что я увижу в терминале на ПК, если я передаю с МК байт, содержащий в себе 0x01? На ПК я тоже должен увидеть единицу?

Нет, конечно. 0x01 не имеет отображения в виде символа. Увидите или какую-то закорючку, или вообще ничего. Но никто не мешает скачать тот же CodeVision, встроенный терминал которого может отображать как ASCII - символы, так и HEX - коды ...
megajohn
лучше не передавать коды менее 32, это служебные - и в разных терминалках по разному будут отображатся

передавайте 0x5A и тогда должны увидеть символ Z
kt368
Смотрю через терминал CodeVision, передаю 0x5A, приходит 0xAE.
Контроллер LPC1758, UART0, 115200, 8 бит уарт, 1 стоп бит, бит чётности отсутствует. Пробовал другие скорости - все так же.
Передаю так:
Код
LPC_UART0->THR = 0x5a;
Предварительно настроив UART0 модуль.
Когда передаю несколько раз подряд (в цикле) - все так и приходит 0xAE, т.е. приём надежный, но не того, что передали. Могу залезть осциллографом, если это поможет.
В чем может быть проблема?
kovigor
Цитата(kt368 @ Oct 8 2013, 16:49) *
В чем может быть проблема?

В скорости, на 99.9 %
megajohn
Цитата(kt368 @ Oct 8 2013, 17:49) *
В чем может быть проблема?


ну в чем еще, кроме как тактовой.
проверяйте, PCCLK и делитель уарта.

можете и код выложить

kt368
Всем спасибо! Действительно была ошибка в скорости! Методом тыка выяснил, что скорость была завышена на 20%. Теперь буду искать где я ошибся.
Genadi Zawidowski
Цитата(kt368 @ Oct 8 2013, 19:12) *
Методом тыка выяснил, что скорость была завышена на 20%. Теперь буду искать где я ошибся.


Где-то при программировании делителя по привычке вычли единицу - и 5 превратилось в 4 (или 6 в 5) - вот 20% и набежало.
RED_BULLok
Если программируете контроллер от LPC , у них есть на сайте калькулятор скоростей для UART. lpc2000.baud.rate.calculator
haker_fox
QUOTE (RED_BULLok @ Oct 10 2013, 19:02) *
Если программируете контроллер от LPC , у них есть на сайте калькулятор скоростей для UART.

Нэээ, нэ надо нэчэго скачивать rolleyes.gif

Уже во всех 32-битках (ну наверно во многих) прескаллеры это действительно знаменатели, на которые делится системная частота. Поэтому никаких калькуляторо и хитрых дефайнов rolleyes.gif
Делаете так
CODE
// Где-то в хидере...
const float SYS_CLOCK = 120000000; // Hz
const float UART_SPEED = 115200;

// Где-то в инициализации
UART_BR = SYS_CLOCK / UART_SPEED;

Естественно пример упрощен. Но основной принцип, я думаю, понятен. Так я автомат считаю скорости для uart, ssp, eeprom, i2c и т.п. Иногда встречаются модули, где этот приём не подходит, там уже думать надо.
ILYAUL
Код
// Где-то в инициализации
UART_BR = (SYS_CLOCK / UART_SPEED)-1;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.