Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

STM32G431 захват синхронного UART

Непрочитано 07.08.2025, 12:41  
DanilinSA
Почётный гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,800
Сказал спасибо: 133
Сказали Спасибо 1,152 раз(а) в 549 сообщении(ях)
DanilinSA на пути к лучшему
По умолчанию STM32G431 захват синхронного UART

Смотрите: есть такая задача.
Есть синхронный поток. Старт бит, 8 данных, стоп бит. Все стандартно.
Но поток синхронный. И его скорость задаётся с внешней тактовой частотой с делителем в 1000.
Соответственно линий 2: тактовая и данные.
И этот поток нужно захватить в МК. Соответственно каждые 1000 периодов мы должны проанализировать вввод на предмет 1 или 0.

Пока я делаю так: входную тактовую принимаю на таймер с нужным коэф. деления. Таймер дергает прерывание. По прерыванию я считываю информацию с входа и запихиваю значение в очередь RTOS. В другом потоке собираю все в байт с учетом стартовых и стоповых битов.

Но очень хочется использовать UART аппаратный. Но не понятно с тактированием.

Была мысль: меряем внешний клок UART. Пересчитываем в коэф. деления скорости аппаратного UART. Принимаем на UART. Но показалось сложным.

Есть варианты реализовать это красиво на аппаратном UART? Или только софтовым захватом?

Внешний клок имеет частоту в единицы мегагерц и является асинхронным к частотам МК. Теоретически по определенным командам UART может меняться. Но обычно это не используеться.
Реклама:
DanilinSA вне форума  
Непрочитано 07.08.2025, 13:57  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,276
Сказал спасибо: 11,856
Сказали Спасибо 4,158 раз(а) в 3,176 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: STM32G431 захват синхронного UART

А просто почитать DS и appbote в части USART в синхронном режиме?
Заодно посмотреть на реализацию в используемой RTOS работы с USART.

https://www.st.com/resource/en/produ...eral_usart.pdf
https://www.зst.com/resource/en/pro...face-USART.pdf
У STM есть готовые библиотеки.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 07.08.2025, 14:00  
j-Roger
Гражданин KAZUS.RUN
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 838
Сказал спасибо: 379
Сказали Спасибо 942 раз(а) в 451 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию Re: STM32G431 захват синхронного UART

Судя по RM0440 так там вроде как одно явное ограничение:

Нажмите на изображение для увеличения
Название: USART_slave.jpg
Просмотров: 0
Размер:	101.4 Кб
ID:	187383
и некоторые моменты насчёт стартового и стопового битов, как не имеющих смысла для синхронного обмена : для этих битов не генерируется тактовый импульс.

Нажмите на изображение для увеличения
Название: USART_slave_start_stop.jpg
Просмотров: 0
Размер:	63.8 Кб
ID:	187382
Режим синхронного приёма в RM так и называют - SPI Slave. Но это "не совсем" SPI - стартовый и стоповый биты таки занимают временнОй слот. Впрочем, для приёмника это неактуально.

UPD.
Упс.. опередили..

Последний раз редактировалось j-Roger; 07.08.2025 в 14:07.
j-Roger вне форума  
Непрочитано 07.08.2025, 14:13  
DanilinSA
Почётный гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,800
Сказал спасибо: 133
Сказали Спасибо 1,152 раз(а) в 549 сообщении(ях)
DanilinSA на пути к лучшему
По умолчанию Re: STM32G431 захват синхронного UART

В том и засада. Тактовый клок молотит постоянно. Без перехода в IDLE.
И читать нужно не каждый такт входного клока, а каждый 1000 (1024).

Последний раз редактировалось DanilinSA; 07.08.2025 в 14:28.
DanilinSA вне форума  
Непрочитано 07.08.2025, 14:36  
j-Roger
Гражданин KAZUS.RUN
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 838
Сказал спасибо: 379
Сказали Спасибо 942 раз(а) в 451 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию Re: STM32G431 захват синхронного UART

Да, без сигнала NSS ( Slave select ) выходит засада..

UPD
А если
Сообщение от DanilinSA Посмотреть сообщение
Старт бит, 8 данных, стоп бит. Все стандартно.
то нельзя ли просто использовать стандартный асинхронный приём без синхросигнала?
Ну или с помощью таймера измерять скорость/baudrate на линии синхросигнала и уже от неё отталкиваться при асинхронном приёме?..

Видимо, я не понял задачи..

Последний раз редактировалось j-Roger; 07.08.2025 в 14:51.
j-Roger вне форума  
Непрочитано 07.08.2025, 15:18  
DanilinSA
Почётный гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,800
Сказал спасибо: 133
Сказали Спасибо 1,152 раз(а) в 549 сообщении(ях)
DanilinSA на пути к лучшему
По умолчанию Re: STM32G431 захват синхронного UART

Теоретически можно.
Замерить скорость, выставить правильно на прием. И молиться, чтобы она не ушла при приеме особо сильно. При смене передающего девайса - повторить.
Или автоматически выделять единичные биты и автоматически подстраивать скорость "на ходу".
Но проблема в том, что скорость обмена задает внешний источник. И она в принципе может достаточно гулять. На 5-10-15%. Да-же во время одной передачи.

Логика передачи такая:
Линия "CLK" - молотит постоянно в диапазоне 1-5 МГц.
Линия "DATA" - в простое имеет логическую единицу.
Линия "DATA" упало в 0 - значит пришел стартовый бит.
Далее каждый 1000(1024) такта CLK - следующий бит.
Т.е. длительность каждого бита в посылке составляет 1000 тактов CLK.
Приняли байт - стоповый бит - опять линия "DATA" в 1 - пауза. (не будем углубляется в пакетный режим работы, где байтов может прийти много)

Соответственно длительность одного байта будет (старт+8 бит + стоп) 10 000 периодов "CLK".

Теоретически на "CLK" можно поставить аппаратный делитель на 1024 и принимать как нормальный синхронный сигнал. Но в протокол заложена возможность менять это число. Аппаратно это уже не так просто.
DanilinSA вне форума  
Непрочитано 07.08.2025, 16:09  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,276
Сказал спасибо: 11,856
Сказали Спасибо 4,158 раз(а) в 3,176 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: STM32G431 захват синхронного UART

DanilinSA, а аппаратный таймер в режиме делителя на любое заданное?
Внешней логикой преобразовать CLK в нормальный синхронный.

Где-то я такое уже встречал, но не помню подробностей про источник.
Вся обработка ЕМНИП на генерацию нужного CLK для USART аппаратным таймером в режиме делителя внешней частоты на выход с блокировкой на внешнем NAND до прихода на RX 0.
Результат - чистый синхронный прием аппаратным USART МК даже последовательности байт. 2 ноги на таймер, 1 дополнительный порт для 1 на вход NAND и 1 порт для синхронного анализа состояния RX на 1. Это можно попробовать аппаратно по спаду.
Поскольку частота внешнего CLK сильно выше CLK USART, то величина ошибки обработки невелика.
Возможно делитель при начале стоит перезапускать.
В такой логике даже при большем плавании внешнего CLK синхронность не нарушится.
В такой реализации ошибка цикла стартового бита при текущих данных 0.1…0.2%.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…

Последний раз редактировалось mike-y-k; 07.08.2025 в 16:20.
mike-y-k вне форума  
Непрочитано 07.08.2025, 16:34  
DanilinSA
Почётный гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,800
Сказал спасибо: 133
Сказали Спасибо 1,152 раз(а) в 549 сообщении(ях)
DanilinSA на пути к лучшему
По умолчанию Re: STM32G431 захват синхронного UART

В принципе этот вариант прорабатывался.
Но хотелось минимизировать внешний обвес и реализовать счетчик делитель на внутреннем таймере. Тогда в аппаратном плане все получается относительно красиво.

Входные линии принимаем на внутричиповые компараторы. Уровень срабатывания (3V3/2 или 1V8/2) задаем DAC. Делим входную CLK внутренним таймером.

Может вытащить сигнал после таймера на внешнюю ногу и кинуть перемычку на ногу клока синхронного UART? Таймер/делитель дергает прерывание, прерывание инвертирует сигнал на ноге. Там в принципе частота в единицы килогерц получается. И будет нормальный синхронный прием.
DanilinSA вне форума  
Непрочитано 07.08.2025, 19:04  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: STM32G431 захват синхронного UART

Сообщение от DanilinSA Посмотреть сообщение
реализовать счетчик делитель на внутреннем таймере
Вот! Не успел предложить.
Нормальный вариант. Вот только без наворотов в виде компаратора с ЦАП-ом - никак? Неужто такой мусор?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 07.08.2025, 19:16  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,276
Сказал спасибо: 11,856
Сказали Спасибо 4,158 раз(а) в 3,176 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: STM32G431 захват синхронного UART

DanilinSA, тогда переход RX в 0 запускает делитель с выводом на вход CLK USART. Возврат в исходное состояние после приема байта при отсутствии следующего байта или продолжаем прием.
Это отменит внешний NAND.
Если нужен анализ нестандартного уровня - тогда ADC и через порт выводим 0/1 на вход RX USART.
Можно конечно и программное все сделать, но как-то скучно отлаживать столько дополнительного кода вместо нескольких перемычек…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…

Последний раз редактировалось mike-y-k; 07.08.2025 в 19:28.
mike-y-k вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование программатором STERH 007 PIC микроконтроллеров ispitatel1 Песочница (вопросы новичков) 4 17.04.2017 17:18
Программный UART для Mega8. Проблемы Zemlyanov AVR 20 13.11.2013 10:44
AVR, UART и режим IDLE anpaza Микроконтроллеры, АЦП, память и т.д 14 25.07.2011 03:04
Нужно 2 UART на мк , как быть? Zemlyanov Микроконтроллеры, АЦП, память и т.д 77 04.05.2010 19:26
Помогите разобраться с UART masterpc Микроконтроллеры, АЦП, память и т.д 10 13.02.2007 17:49


Часовой пояс GMT +4, время: 21:25.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.