реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Вопрос про UART, Соответствие передаваемого байта символу
kt368
сообщение Oct 8 2013, 13:08
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 454
Регистрация: 13-10-10
Из: Киев
Пользователь №: 60 135



Здравствуйте! Подскажите, что я увижу в терминале на ПК, если я передаю с МК байт, содержащий в себе 0x01? На ПК я тоже должен увидеть единицу?
Go to the top of the page
 
+Quote Post
kovigor
сообщение Oct 8 2013, 13:13
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(kt368 @ Oct 8 2013, 16:08) *
Подскажите, что я увижу в терминале на ПК, если я передаю с МК байт, содержащий в себе 0x01? На ПК я тоже должен увидеть единицу?

Нет, конечно. 0x01 не имеет отображения в виде символа. Увидите или какую-то закорючку, или вообще ничего. Но никто не мешает скачать тот же CodeVision, встроенный терминал которого может отображать как ASCII - символы, так и HEX - коды ...
Go to the top of the page
 
+Quote Post
megajohn
сообщение Oct 8 2013, 13:14
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



лучше не передавать коды менее 32, это служебные - и в разных терминалках по разному будут отображатся

передавайте 0x5A и тогда должны увидеть символ Z


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
kt368
сообщение Oct 8 2013, 13:49
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 454
Регистрация: 13-10-10
Из: Киев
Пользователь №: 60 135



Смотрю через терминал CodeVision, передаю 0x5A, приходит 0xAE.
Контроллер LPC1758, UART0, 115200, 8 бит уарт, 1 стоп бит, бит чётности отсутствует. Пробовал другие скорости - все так же.
Передаю так:
Код
LPC_UART0->THR = 0x5a;
Предварительно настроив UART0 модуль.
Когда передаю несколько раз подряд (в цикле) - все так и приходит 0xAE, т.е. приём надежный, но не того, что передали. Могу залезть осциллографом, если это поможет.
В чем может быть проблема?
Go to the top of the page
 
+Quote Post
kovigor
сообщение Oct 8 2013, 14:59
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(kt368 @ Oct 8 2013, 16:49) *
В чем может быть проблема?

В скорости, на 99.9 %
Go to the top of the page
 
+Quote Post
megajohn
сообщение Oct 8 2013, 15:00
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



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


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

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



--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
kt368
сообщение Oct 8 2013, 15:12
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 454
Регистрация: 13-10-10
Из: Киев
Пользователь №: 60 135



Всем спасибо! Действительно была ошибка в скорости! Методом тыка выяснил, что скорость была завышена на 20%. Теперь буду искать где я ошибся.
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Oct 8 2013, 21:15
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



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


Где-то при программировании делителя по привычке вычли единицу - и 5 превратилось в 4 (или 6 в 5) - вот 20% и набежало.
Go to the top of the page
 
+Quote Post
RED_BULLok
сообщение Oct 10 2013, 10:02
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 58
Регистрация: 27-03-08
Из: Беларусь, Минск
Пользователь №: 36 275



Если программируете контроллер от LPC , у них есть на сайте калькулятор скоростей для UART. lpc2000.baud.rate.calculator
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Oct 10 2013, 10:50
Сообщение #10


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



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 и т.п. Иногда встречаются модули, где этот приём не подходит, там уже думать надо.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Oct 10 2013, 13:30
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



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


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 23:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.0143 секунд с 7
ELECTRONIX ©2004-2016