Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/65: Рейтинг темы: голосов - 65, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 30.07.2015
Сообщений: 25
Записей в блоге: 2

Обмен USART <-> ПК

17.08.2017, 14:48. Показов 12297. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть микроконтроллер STM32F2xx на нём есть USORTы, которые между собой общаются без искажений.
Есть компьютер который передаёт по RS485 4w сигнал на интерфейсную плату MAX3160E,
у которой если замкнуть контакты "Rx" и "Tx", она так же передаёт обратно на компьютер информацию без искажений.

Но если передавать с микроконтроллера на компьютер или наоборот, то тут какая то лажа.

Подскажите где косяк.
Что я упустил?
Скорости одинаковые
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.08.2017, 14:48
Ответы с готовыми решениями:

Обмен по USART PinBoard с компом.
При прошивке в МК простейшей программы обмена по порту вижу неправильные данные. Дино MK ATmega16A на 8 Мгц Инициализация порта...

Приём данных с usart через dma в память периферии и вывод обратно на usart (для проверки)
Подскажите, как сделать так, чтобы при отправке через usart в переменную и обратно вывести по нажатию кнопки на usart(для проверки, что мы...

xmega: usart - какой глубины буфер в USART?
Взялся тут &quot;запилить&quot; на xmego32a4 мультиплексор двух rs232 в один rs485. Все как бы получилось и почти работает (надо код почистить и...

34
Эксперт .NET
 Аватар для Rius
13233 / 7729 / 1680
Регистрация: 25.05.2015
Сообщений: 23,548
Записей в блоге: 14
17.08.2017, 15:41
Если схема правильная, то надо проверить своевременность сигналов rts и cts на чипе max.
0
0 / 0 / 0
Регистрация: 30.07.2015
Сообщений: 25
Записей в блоге: 2
17.08.2017, 16:06  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
своевременность сигналов rts и cts.
Сейчас, я не учитываю эти сигналы

Преобразователь интерфейса собран так, что всегда принимает и отправляет
Я отправляю с USORT байт и вижу его осциллографом, но на компьютер приходит совершенно другой байт.

Попробую перенастроить с сигналами.
О результате отпишусь.
0
Эксперт .NET
 Аватар для Rius
13233 / 7729 / 1680
Регистрация: 25.05.2015
Сообщений: 23,548
Записей в блоге: 14
17.08.2017, 16:16
Раз осциллограф есть, совместите скриншоты со входа на 485, выхода с 485, и того что на самом 485 идёт. В одном масштабе. С тем же самым байтом.
И туда же наложите скрин с управляющими сигналами MAX-а.
Должна быть видна закономерность.
0
0 / 0 / 0
Регистрация: 30.07.2015
Сообщений: 25
Записей в блоге: 2
17.08.2017, 16:27  [ТС]
Посмотрел, одно и то же.
Ошибка не в железе, попробовал отправить с рабочего устройства, до компьютера дошло без искажений.
0
Эксперт .NET
 Аватар для Rius
13233 / 7729 / 1680
Регистрация: 25.05.2015
Сообщений: 23,548
Записей в блоге: 14
17.08.2017, 16:32
Можете привести скриншоты сигналов с рабочего и не рабочего?
Варианта 3: либо железо неправильное, либо управление железом, либо настройки UART в МК. И то, что МК сам себе данные успешно передаёт, ещё ничего не значит.
0
0 / 0 / 0
Регистрация: 30.07.2015
Сообщений: 25
Записей в блоге: 2
17.08.2017, 16:44  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Можете привести скриншоты сигналов с рабочего и не рабочего?
Скриншоты смогу привести только часа через 4... не раньше (((

Цитата Сообщение от Rius Посмотреть сообщение
И туда же наложите скрин с управляющими сигналами MAX-а
CTS подтянут на землю
RTS всегда на питании

Из 3-х вариантов склонен думать что где то в настройках UART в МК... так как подключил рабочий, настроенный МК через UART к интерфейсной плате, компьютер верно считал посылки.
0
Эксперт .NET
 Аватар для Rius
13233 / 7729 / 1680
Регистрация: 25.05.2015
Сообщений: 23,548
Записей в блоге: 14
17.08.2017, 16:54
Для проверки uart можно послать характерные байты: 0xFF, 0x00, 0x55, 0xAA, 0xF0, 0x0F...
По осциллографу хорошо видно, будет, если что-то не так. Например лишний бит или наоборот не хватает.

Добавлено через 6 минут
Скорость тоже можно подсчитать по длительности байт.
1
0 / 0 / 0
Регистрация: 30.07.2015
Сообщений: 25
Записей в блоге: 2
17.08.2017, 17:10  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Для проверки uart можно послать характерные байты: 0xFF, 0x00, 0x55, 0xAA, 0xF0, 0x0F...
По осциллографу хорошо видно, будет, если что-то не так. Например лишний бит или наоборот не хватает.
Спасибо!
Послал 0хFF, а на осциллографе увидел c обоих сторон интерфейсной схемы ------_------_ ...
На компьютер соответственно приходил 0хFC.
0
Эксперт .NET
 Аватар для Rius
13233 / 7729 / 1680
Регистрация: 25.05.2015
Сообщений: 23,548
Записей в блоге: 14
17.08.2017, 17:31
Так не понятно.
Нужны скрины для сравнения)
Проверьте ещё байты с добавлением бит постепенным: 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFF.
1
0 / 0 / 0
Регистрация: 30.07.2015
Сообщений: 25
Записей в блоге: 2
17.08.2017, 17:56  [ТС]
Сделал, понял о чём вы говорили.
Как приду домой, обработаю картинки, что бы было понятно и отправлю.

У меня предположение, что со скоростью что то не так...
0
Эксперт .NET
 Аватар для Rius
13233 / 7729 / 1680
Регистрация: 25.05.2015
Сообщений: 23,548
Записей в блоге: 14
17.08.2017, 17:58
Чтобы скорость проверить, надо послать 0xAA или 0x55, измерить осциллографом время передачи одного бита, потом пересчитать в скорость.
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
17.08.2017, 21:37
ЕгорЮрьевич, а биты четности и стоповые?
0
0 / 0 / 0
Регистрация: 30.07.2015
Сообщений: 25
Записей в блоге: 2
17.08.2017, 22:55  [ТС]
Вот, как и обещал вотографии с осциллографа.
Названия фотографий указываю какая команда была отправлена
Цитата Сообщение от Rius Посмотреть сообщение
Чтобы скорость проверить, надо послать 0xAA или 0x55, измерить осциллографом время передачи одного бита, потом пересчитать в скорость.
К сожалению именно эти посылки при этих настройках не синхронизировались...
Я их могу завтра выложить (((

Цитата Сообщение от Grey Посмотреть сообщение
биты четности и стоповые?
USORT_Parity_No;
USORT_StopBits_1;
Миниатюры
Обмен USART <-> ПК   Обмен USART <-> ПК   Обмен USART <-> ПК  

Обмен USART <-> ПК   Обмен USART <-> ПК   Обмен USART <-> ПК  

Обмен USART <-> ПК   Обмен USART <-> ПК   Обмен USART <-> ПК  

Обмен USART <-> ПК  
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
18.08.2017, 00:12
Цитата Сообщение от ЕгорЮрьевич Посмотреть сообщение
Я их могу завтра выложить (((
и с сигналом 0x0F ещё раз.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
18.08.2017, 05:38
Цитата Сообщение от ЕгорЮрьевич Посмотреть сообщение
которые между собой общаются без искажений.
Есть компьютер который передаёт
может дело все в тактировании?
неправильно начал работать
или например кварц отвалился?
отладчик есть?

Добавлено через 2 минуты
ЕгорЮрьевич, осциллограммы неплохо бы подписать
какая чему соответствует
0
Эксперт .NET
 Аватар для Rius
13233 / 7729 / 1680
Регистрация: 25.05.2015
Сообщений: 23,548
Записей в блоге: 14
18.08.2017, 07:07
Подписал. Если масштаб шкалы времени 0.5 мс/деление, то скорость тут 6000 бит/с. Какая-то неправильная.

Не по теме:

Электронно-лучевой осциллограф это ужас...

Миниатюры
Обмен USART <-> ПК  
0
Эксперт .NET
 Аватар для Rius
13233 / 7729 / 1680
Регистрация: 25.05.2015
Сообщений: 23,548
Записей в блоге: 14
18.08.2017, 07:13
Воспроизвёл эту скорость на своём МК с такими настройками:
C++
1
2
3
4
5
6
7
8
  huart2.Instance = USORT2;
  huart2.Init.BaudRate = 6000;
  huart2.Init.WordLength = UART_WORDLENGTH_8B;
  huart2.Init.StopBits = UART_STOPBITS_1;
  huart2.Init.Parity = UART_PARITY_NONE;
  huart2.Init.Mode = UART_MODE_TX_RX;
  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
Скриншот прилагаю. Те же 1.5 мс для байта 0x00, что и у ТС.
Миниатюры
Обмен USART <-> ПК  
0
Эксперт по электронике
6834 / 3258 / 338
Регистрация: 28.10.2011
Сообщений: 12,727
Записей в блоге: 7
18.08.2017, 10:45
По моему для этого лучше подошел бы логический анализатор (с распознаванием UART) чем осциллограф. Сразу было бы видно есть ли ошибка.
0
0 / 0 / 0
Регистрация: 30.07.2015
Сообщений: 25
Записей в блоге: 2
18.08.2017, 11:55  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Если масштаб шкалы времени 0.5 мс/деление, то скорость тут 6000 бит/с. Какая-то неправильная.
...
C
1
2
3
4
5
6
    USORT_InitStructure.USORT_BaudRate = 19200;
    USORT_InitStructure.USORT_WordLength = USORT_WordLength_8b;
    USORT_InitStructure.USORT_StopBits = USORT_StopBits_1;
    USORT_InitStructure.USORT_Parity = USORT_Parity_No;
    USORT_InitStructure.USORT_HardwareFlowControl = USORT_HardwareFlowControl_None;
    USORT_InitStructure.USORT_Mode = USORT_Mode_Rx | USORT_Mode_Tx;
Выкладываю остальные фотографии
Цитата Сообщение от locm Посмотреть сообщение
логический анализатор (с распознаванием UART)
Увы чего нет того нет...
Цитата Сообщение от Rius Посмотреть сообщение
Не по теме:
Электронно-лучевой осциллограф это ужас...
Согласен )))

Цитата Сообщение от ValeryS Посмотреть сообщение
может дело все в тактировании?
неправильно начал работать
или например кварц отвалился?
Работает от встроенного...
Очень может быть

Код я сократил до такого вида
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
void init_usart() {
     
    GPIO_InitTypeDef GPIO_InitStructure;  
    USORT_InitTypeDef USORT_InitStructure;
    
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USORT2, ENABLE);
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
     
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_USORT2); //PD5 to TX USORT2
 
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOD, &GPIO_InitStructure); //инициализируем
     
    USORT_InitStructure.USORT_BaudRate = 19200;// скорость
    USORT_InitStructure.USORT_WordLength = USORT_WordLength_8b; //8 бит данных
    USORT_InitStructure.USORT_StopBits = USORT_StopBits_1; //один стоп бит
    USORT_InitStructure.USORT_Parity = USORT_Parity_No; //четность - нет
    USORT_InitStructure.USORT_HardwareFlowControl = USORT_HardwareFlowControl_None; // управлени потоком - нет
    USORT_InitStructure.USORT_Mode = USORT_Mode_Tx;       // разрешаем прием и передачу
          
    USORT_Init(USORT2, &USORT_InitStructure); //инизиализируем
 
    USORT_ITConfig(USORT2, USORT_IT_TXE, ENABLE);  
 
    USORT_Cmd(USORT2, ENABLE);    
}
 
void main()
{
  init_usart();
  
  while(SET)
  {
      while(!(USORT2->SR & USORT_SR_TC)); //Проверка завершения передачи предыдущих данных
      USORT2->DR = 0x0f; //Передача данных
  }
}
Миниатюры
Обмен USART <-> ПК  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.08.2017, 11:55
Помогаю со студенческими работами здесь

передача данных с 2 портов can и 1 usart в usart
Доброго времени суток форумчане! Пытаюсь написать код для stm32f4disko с помощью которого можно читать данные с 2 can и usart. насколько я...

Обмен РИБ Розница 2.3 Не работает обмен по расписанию
Добрый день, коллеги. Не работает обмен РИБ с магазинами по расписанию в рознице 2.3. Вручную когда запускаю отрабатывает, а по расписанию...

usart
Начал сегодня изучать микроконтроллеры ARM, до этого использовал только AVR. Имеется платка с STM32F103, светодиодом уже помигал, теперь...

USART
Подскажите в чем может быть дело При приеме символов по USORT изменяются значения глобальных переменных

USART "Эхо"
Чёт не пойму почему в Proteus на ввод символа контроллер начинает безостоновочно слать символы, с чем эт может быть связано.....? И вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru