-
- А, что: в Вашем МК только один UART? При двух задача решается
легко: один - на приëм, другой - на передачу! - Пaлыч(31.12.2024 20:24)
- у меня 4 и все заняты - Лaгyнoв(01.01.2025 11:19)
- Можно ещё извратиться:) - передачу делать по байту плюс пауза
длительностью 1+бит. - Vit(01.01.2025 11:53)
- лично для меня будет удобней - по таймеру каждые 1,2 мсек (у меня
9600бод). - Лaгyнoв(01.01.2025 12:22)
- Пакетом такое можно попробовать через DMA по event-у от таймера
запустить - Vit(01.01.2025 12:58)
- ну тоже вариант - Лaгyнoв(01.01.2025 13:20)
- Пакетом такое можно попробовать через DMA по event-у от таймера
запустить - Vit(01.01.2025 12:58)
- лично для меня будет удобней - по таймеру каждые 1,2 мсек (у меня
9600бод). - Лaгyнoв(01.01.2025 12:22)
- Можно ещё извратиться:) - передачу делать по байту плюс пауза
длительностью 1+бит. - Vit(01.01.2025 11:53)
- у меня 4 и все заняты - Лaгyнoв(01.01.2025 11:19)
- Это не извраты, а нормальное поведение UART. И именно так оно
реализовано в STM32 - il-2(31.12.2024 11:34)
- ну эта "нормальность" STM32 мне и не нравится. Мне надо чтобы на
передаче 2 стоповых, а на приеме 1 стоповый. - Лaгyнoв(31.12.2024 14:04)
- Так об том и речь! При передаче формирует два стопа, если
настроено. А при приёме, даже если настроено два стопа, смотрит
только по первому. - Nikolay_Po(31.12.2024 14:09)
- так я как рад бы! Но фиг вам. Если мне передают с одним стоповым (а
у меня настроены 2 стопа) - вижу искажения на приеме. Стоит только
сделать 1 стоповый в настройке - всё хорошо. Про что я тут и
толкую. - Лaгyнoв(31.12.2024 16:45)
- Ну дык и правильно. Камушек пока нюхает второй стоп, пропускает первый старт. - Бapбoc(01.01.2025 16:01)
- Ну во первых - в даташите сказано, что настройка 2 стоп-бит
действует на передачу, на приеме проверяется только 1 стоп-бит. Во
вторых - у меня (на серии F10x) именно так оно и работает. Почему у
тебя не так - разбирайся. Ну и в третьих - марку МК неплохо было бы
озвучить :-) - il-2(01.01.2025 15:55)
- вроде сказал - STM32G070. И есть подозрение, что это проблема линейки G0. Вроде в F4 это не заметил. - Лaгyнoв(01.01.2025 16:04)
- так я как рад бы! Но фиг вам. Если мне передают с одним стоповым (а
у меня настроены 2 стопа) - вижу искажения на приеме. Стоит только
сделать 1 стоповый в настройке - всё хорошо. Про что я тут и
толкую. - Лaгyнoв(31.12.2024 16:45)
- Так об том и речь! При передаче формирует два стопа, если
настроено. А при приёме, даже если настроено два стопа, смотрит
только по первому. - Nikolay_Po(31.12.2024 14:09)
- ну эта "нормальность" STM32 мне и не нравится. Мне надо чтобы на
передаче 2 стоповых, а на приеме 1 стоповый. - Лaгyнoв(31.12.2024 14:04)
- У меня с EWARM-8509 другой интересный прикол. Одна и та же версия (с одной флешки) стоит на работе и дома. Дома, при отладке своей программы, я открываю окошко регистров и пытаюсь посмотреть работу ADC, GPIOA ... а их нет! А вот счетчики, USART, I2C... есть! Приблизительно половина переферии как регистры не видны. Если смотреть в окне памяти, то видно биты и байты изменяются как надо. Но, конечно в окне регистры, где видны имена байтов и битов конечно удобнее работать. Я Sl(78 знак., 30.12.2024 16:52)
- Если память позволяет, то подготовить буфер с состояниями TxD на 2
стопа и пулять их в порт через ДМА. На приём, обычным УАРТом с 1
стопом. - mse homjak(30.12.2024 13:19)
- ну тоже вариант - Лaгyнoв(30.12.2024 13:41)
- режим переключать или 2 UARTa использовать. есть старая проблемка в
блоках UARTов - "укороченный стоп-бит" и практически тименно так и
лечится. даже где-то в Modbus over Serial рекомендуют, не вникая в
подробности. Vit(1 знак., 30.12.2024 12:46, ссылка)
- укороченный - 1,5 стоповых? - Лaгyнoв(30.12.2024 13:42)
- разжую. детектирование старт-бита сделано часто корявенько - по
перепаду. а разрешение детектирования перепада появляется не с
середины (как детектируются биты данных) стоп-бита, а с расчетного
конца фрейма. потому при укороченном стоп-бите от передатчика
разрешение в приемнике выставляется после собственно появления
перепада. укороченный в эррате это 98 мкс против 104 мкс. т.е при
чуток завышенной частоте тактирования UART-а передатчика такое
словить очень легко. проблема Vit(94 знак., 30.12.2024 14:04)
- чего только не узнаешь на старости лет! :-) - Лaгyнoв(30.12.2024 16:29)
- разжую. детектирование старт-бита сделано часто корявенько - по
перепаду. а разрешение детектирования перепада появляется не с
середины (как детектируются биты данных) стоп-бита, а с расчетного
конца фрейма. потому при укороченном стоп-бите от передатчика
разрешение в приемнике выставляется после собственно появления
перепада. укороченный в эррате это 98 мкс против 104 мкс. т.е при
чуток завышенной частоте тактирования UART-а передатчика такое
словить очень легко. проблема Vit(94 знак., 30.12.2024 14:04)
- укороченный - 1,5 стоповых? - Лaгyнoв(30.12.2024 13:42)
- ха-ха... В древности, когда у меня не было в МК аппаратного UART и был софтовый, я ж так и делал. :-) Сейчас порылся и нашел. При передаче у меня было 2 стоповых, а на приеме 1 и я сразу переходил к ожиданию старта след. байта. - Лaгyнoв(30.12.2024 11:50)
- Стоповые биты нужны для того, чтобы приёмное устройство
гарантированно успело обработать принятый байт. Если передаются не
очень много данных, и не используется dma, можно их передавать
пореже. Например по таймеру, чтобы в конце было не менее двух
стоповых бит. А настраивать с одним стоповым битом - Andrey190(30.12.2024 08:05)
- сначала написал возражения, потом понял что всё верно. :-)) Спасибо - Лaгyнoв(30.12.2024 08:13)
- Это не очень-то и изврат. Такое встрачается и называется 1,5
стоповых. Я делал когда-то, но не на STM. Если обмен
полудуплексный, то можно просто менять настройки USARTа туда сюда. - AlexG(30.12.2024 07:22)
- я всё голову ломал - что и зачем 1,5 стоповых. :-) У меня в
8-битнике было 1 или 2. - Лaгyнoв(30.12.2024 08:15)
- По стандарту 1.5 стоповых бита применимо только к 5-битным байтам.
Для 7,8,9-битных - только 1 и 2 стопа. Не знаю про специфику G0, но
обычно количество стоповых бит влияет только на передачу, на приём
пофигу. - LightElf(31.12.2024 14:46)
- При несовпадении количества stop-bit на приеме формируется framing error, но данные при этом принимаются. reZident(1 знак., 31.12.2024 15:32, картинка)
- На следующей же странице оного RM0454 (гляжу в ревизию 5) доходчиво
сказано: LightElf(1 знак., 02.01.2025 01:04, картинка)
- это я тоже увидал. Ошибки FE не будет. Но почему не пишут о
достоверности данных, когда пойдет старт следующего байта в момент
второго стопового? Вот ведь в чем засада. Сейчас нет под рукой 070,
но точно помню, что была сдвижка на 1 бит. Через неделю смогу
проверить - Лaгyнoв(02.01.2025 06:56)
- Да не должна сдвижка происходить. Приём байта синхронизируется от
стартового бита, потом забираются биты данных, потом ожидается один
стоповый. Сколько длится "1" между первым стоповым и последующим
стартовым "0" - влиять ни на что не должно. У вас или помеха
какая-то пролетает, или скорости UART разбегаются сильно. Может
подтяжку входа RX к "1" забыли поставить/включить? - LightElf(02.01.2025 14:24)
- Дык он хочет находится в режиме с двумя сторонами - чтобы при
передаче два стоповых было. - Nikolay_Po(02.01.2025 14:27)
- Два стоповых нужны если скорость высокая, а приёмник без fifo или
совсем софтверный и наступает overflow. ТС не там проблему ищет. - LightElf(02.01.2025 15:04)
- ТС не глупее нас. Всё он там ищет. У него окружение такое, что есть
устройства (которые не будут обновляться), которым нужно два стопа,
чтобы корректно принимать. И, в то же время, есть устройства,
которые ведут передачу без второго, лишь с одним стоп-битом. И если
я правильно понял ТС, в таком случае, когда UART настроен на два
стопа, а поток идёт с одним стопом, есть проблемы с приёмом. Пока
не разобрались до конца в каком случае происходит сбой, но приём
идёт с ошибками. - Nikolay_Po(02.01.2025 16:01)
- Или ТС обнаружил противоречащее даташиту и здравом смыслу поведение UART в своём процессоре (во что я не верю, но проверить может только ТС), либо проблема в другом месте. Например в сильном расхождении (более 3%) скоростей UART-тов. Что, опять-таки, только ТС может проверить (элементарно покрутив скорость на своём изделии). LightElf(170 знак., 02.01.2025 16:38)
- И поэтому при смешных 9600 принял правильное решение просто слать по таймеру и не выеживаться с чтением особенностей уартов в разных камнях. При этом еще и отклонения в скорости за пределы байта не расползаются. - Andreas(02.01.2025 16:35)
- ТС не глупее нас. Всё он там ищет. У него окружение такое, что есть
устройства (которые не будут обновляться), которым нужно два стопа,
чтобы корректно принимать. И, в то же время, есть устройства,
которые ведут передачу без второго, лишь с одним стоп-битом. И если
я правильно понял ТС, в таком случае, когда UART настроен на два
стопа, а поток идёт с одним стопом, есть проблемы с приёмом. Пока
не разобрались до конца в каком случае происходит сбой, но приём
идёт с ошибками. - Nikolay_Po(02.01.2025 16:01)
- Два стоповых нужны если скорость высокая, а приёмник без fifo или
совсем софтверный и наступает overflow. ТС не там проблему ищет. - LightElf(02.01.2025 15:04)
- Дык он хочет находится в режиме с двумя сторонами - чтобы при
передаче два стоповых было. - Nikolay_Po(02.01.2025 14:27)
- То есть, ошибки при приёме прошедшего кадра не будет, но вот приём
первого байта следующего кадра может быть нарушен, если возврат на
уровень mark произошел не в пределах второго стоп-бита? - Nikolay_Po(02.01.2025 14:18)
- Всякие эти буржуйские mark/space только головняка добавляют :-). На первом стопе линия переходит в "1" и остаётся там до следующего стартового "0". Дополнительные стопы, после первого, на физическом уровне могут помочь в единственном случае - скорость передатчика чуть выше скорости приёмника и единичный стоп оказывается для приёмника слишком коротким для надёжного определения следующего старта. Но это конструкция "на соплях", ещё чуть сильнее скорости разбегутся и проблемы LightElf(27 знак., 02.01.2025 14:56)
- Да не должна сдвижка происходить. Приём байта синхронизируется от
стартового бита, потом забираются биты данных, потом ожидается один
стоповый. Сколько длится "1" между первым стоповым и последующим
стартовым "0" - влиять ни на что не должно. У вас или помеха
какая-то пролетает, или скорости UART разбегаются сильно. Может
подтяжку входа RX к "1" забыли поставить/включить? - LightElf(02.01.2025 14:24)
- это я тоже увидал. Ошибки FE не будет. Но почему не пишут о
достоверности данных, когда пойдет старт следующего байта в момент
второго стопового? Вот ведь в чем засада. Сейчас нет под рукой 070,
но точно помню, что была сдвижка на 1 бит. Через неделю смогу
проверить - Лaгyнoв(02.01.2025 06:56)
- На следующей же странице оного RM0454 (гляжу в ревизию 5) доходчиво
сказано: LightElf(1 знак., 02.01.2025 01:04, картинка)
- При несовпадении количества stop-bit на приеме формируется framing error, но данные при этом принимаются. reZident(1 знак., 31.12.2024 15:32, картинка)
- По стандарту 1.5 стоповых бита применимо только к 5-битным байтам.
Для 7,8,9-битных - только 1 и 2 стопа. Не знаю про специфику G0, но
обычно количество стоповых бит влияет только на передачу, на приём
пофигу. - LightElf(31.12.2024 14:46)
- я всё голову ломал - что и зачем 1,5 стоповых. :-) У меня в
8-битнике было 1 или 2. - Лaгyнoв(30.12.2024 08:15)
- Я не знаю, как в STM, но другие контроллеры отродясь при приёме
стопы не считали. Приёмнику стоп нужен только чтобы старт
обнаружить... - Idler(30.12.2024 06:19)
- Многие другие да, на приеме проверяют только наличие первого
стопового бита, а про STM пишут что ЫЫyкпy(679 знак., 30.12.2024 09:58)
- +1. Именно как написано, так оно и работает на STM32F10x, и на
Gigadevice тоже. И это правильно. Лагунов как всегда даташиты не
читает, и не в курсе что оно работает именно так, как ему надо :-) - il-2(31.12.2024 11:32)
- не работает. Если мне колонка передает с 1 стоповым, а у меня в
порту STM32 2 стоповых настроено - у меня портятся байты. Если я
передаю с одним стоповым, а в колонке задано 2 стоповых - там
портятся байты и колонка мне не отвечает. - Лaгyнoв(31.12.2024 14:08)
- Это, конечно, странно. Байты портятся с Фрейминг Эррор? - Nikolay_Po(31.12.2024 14:18)
- надо потестировать именно этот момент, появляется ли FE именно в этот момент - Лaгyнoв(31.12.2024 16:51)
- если честно (вероятно я тут неправ), я тупо сбрасываю все ошибки
как только вижу. Типа -
USART2->ICR=USART2->ICR|0x0000000F; Иначе потом вообще
виснет прием. - Лaгyнoв(31.12.2024 16:49)
- Да, это правильно. Если не сбрасывать ошибки, приём вообще остановится. Nikolay_Po(352 знак., 31.12.2024 23:26)
- Это, конечно, странно. Байты портятся с Фрейминг Эррор? - Nikolay_Po(31.12.2024 14:18)
- не работает. Если мне колонка передает с 1 стоповым, а у меня в
порту STM32 2 стоповых настроено - у меня портятся байты. Если я
передаю с одним стоповым, а в колонке задано 2 стоповых - там
портятся байты и колонка мне не отвечает. - Лaгyнoв(31.12.2024 14:08)
- очень не хочется прыгать со стоповыми прием/передача. Хотя по времени у меня нет проблем. После моей передачи прием у меня должен быть не ранее 3 мсек. - Лaгyнoв(30.12.2024 10:03)
- +1. Именно как написано, так оно и работает на STM32F10x, и на
Gigadevice тоже. И это правильно. Лагунов как всегда даташиты не
читает, и не в курсе что оно работает именно так, как ему надо :-) - il-2(31.12.2024 11:32)
- Странно. Если у меня заданы 2 стоповых, а мне передают с одним
стоповым, то вижу ошибки на приеме. Чего сильно не хочется. :-) - Лaгyнoв(30.12.2024 07:06)
- Странно другое... Как Ты вообще выжил с УАРТОМ? Да ладно, я понимаю, что не под протоколом, всяко физики гальваноразвязанной витой пары применил. Но как, товарищ, ты избежал модбаса и канбаса? :))) - bnb62(30.12.2024 13:38)
- Удивительно... Я не так давно с ARMами связался, у Атмела такого
точно не было - в DS: "...the Receiver ignores all, except for the
first, stop bits". Именно ошибки фрейма и на каждом байте? Или
"бывают"? - Idler(30.12.2024 07:41)
- именно бывают в виде порченых байт. Видно, что есть сдвижка бит.
Это когда у меня в настройках 2 стоповых, а передают с 1 стоповым.
Речь про STM32G070. Это он так принимает. Вообще, очень поганый
UART у всей линейки G0. Я вообще горя не знал с UART-ами в
STM32L476. Да и в серии F0 тоже. - Лaгyнoв(30.12.2024 08:20)
- Спасибо, успокоил. То есть, ошибки - плохо, но отсутствие счета стоповых битов в STM не даёт окончательно поставить крест на человечестве... - Idler(30.12.2024 09:19)
- Наверное зависит от потребностей. Мы больше 200к устройств
выпустили на G070. Но там только GPS и GSM. Еще 2к+ устройств,
плюсом прием данных от разных датчиков. Все 4 UART используются.
Проблем не было - Andrey190(30.12.2024 08:40)
- значит мне надо аккуратней и тщательней смотреть. :-) У меня все 4 тоже используются, скорости 4800...19200. Везде просто по прерываниям. Все посылки переменной длины от 2 байт до 40 байт. Разнокалиберные протоколы обмена. Из неприятного для 070, что 3 и 4 USART на одном прерывании. В L476 у всех 6 UART-ов свой вектор. - Лaгyнoв(30.12.2024 09:07)
- именно бывают в виде порченых байт. Видно, что есть сдвижка бит.
Это когда у меня в настройках 2 стоповых, а передают с 1 стоповым.
Речь про STM32G070. Это он так принимает. Вообще, очень поганый
UART у всей линейки G0. Я вообще горя не знал с UART-ами в
STM32L476. Да и в серии F0 тоже. - Лaгyнoв(30.12.2024 08:20)
- Многие другие да, на приеме проверяют только наличие первого
стопового бита, а про STM пишут что ЫЫyкпy(679 знак., 30.12.2024 09:58)
- А, что: в Вашем МК только один UART? При двух задача решается
легко: один - на приëм, другой - на передачу! - Пaлыч(31.12.2024 20:24)