|
STM32 Прерывание UART, Странное поведение |
|
|
|
Apr 30 2014, 09:38
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(KnightIgor @ Apr 30 2014, 11:51)  Интересно, зачем. Это же конфликт с CMSIS-согласованным файлом stm32f10x.h
WiFi-"модем" HLK-RM04. Там внутри Ralink RT5350F и кварц, по которому не видно, сколько MHz. Но еще раз: после добавления заплатки, действие которой заключается либо в задержке, либо в предварительном "тупом" чтении регистра SR, ошибка спорадической потери байтов забилась в угол до такой степени, что мы вчера в течение долгих тестов не смогли ее обнаружить. Насчет битиков ответ простой: я не пользуюсь сторонними библиотеками. Насчет UARTа я пока уверен, что накакие заплатки не нужны, т.к. железо работает отлично. Но если у Вас есть желание переубедить меня, то я с радостью помогу. Ибо я лучше сейчас огребу, чем в будущем. В свое время я сталкивался с потерей байт, но не придавал этому особого значения. Старался писать код не чувствительным к таким потерям (точнее допускающим редкие потери с гарантированным восстановлением за конкретное время/ число перепосылок). Сейчас, когда начал копаться детально (где-то месяц назад), понял, что так или иначе аппаратура не виновата в потерях - виноват исключительно софт. Если Вы считаете вопрос решенным (для своего круга задач), то, думаю, и копать дальше не стоит (меня тоже сейчас все устраивает).
|
|
|
|
|
Apr 30 2014, 10:11
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(adnega @ Apr 30 2014, 10:38)  Насчет битиков ответ простой: я не пользуюсь сторонними библиотеками. Жесть  . Цитата Насчет UARTа я пока уверен, что накакие заплатки не нужны, т.к. железо работает отлично. Но если у Вас есть желание переубедить меня, то я с радостью помогу. Нет, я никого переубеждать не хочу, тем более человека, который даже библиотеками производителя процессоров не пользуется. Просто поделился информацией на случай, если кто сталкивался, но не понял, что происходит.
|
|
|
|
|
Apr 30 2014, 10:34
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(KnightIgor @ Apr 30 2014, 14:11)  Жесть  . Нет, я никого переубеждать не хочу, тем более человека, который даже библиотеками производителя процессоров не пользуется. Просто поделился информацией на случай, если кто сталкивался, но не понял, что происходит. Да, все нормально: просто я с STM практически с самого начала (тогда и библиотеки никакой не было), поэтому библиотеки у меня свои. Библиотеками производителя я пользуюсь, но только в ознакомительных целях. И документацию читаю внимательно. Если честно, то до сих пор не понятно, в чем собственно проблема UART на STM32 и почему только у Вас UART теряет байты. За информацию спасибо: если что-то не работает в сложной системе, то нужно вставлять задержки и дополнительные чтения статусных регистров.
|
|
|
|
|
Apr 30 2014, 11:03
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Да библиотеки производителя все (ну большинство точно )с дисклаймером - это только пример!!! они в курсе качества их программистов, так что тоже не сторонник брать не глядя, и по большей части не использую.
А у вас окружающее UART железо нормальное? У нас было такое дело на драйвере в RS232 конденсаторы на землю не запаялись и при ненасыщенном обмене все работало, а в каких то критических случаях иногда проскакивали ошибки, когда от вида данных или еще от чего что-то там разряжалось, недозаряжалось, и уровни перли тупо не правильные...
местные программисты добавили контроль целостности и успокоились, а я осциллографом потыкал и увидел весь этот кавардак, как уровни медленно дрейфуют, может они уплывают и байт теряется?
И еще из интересных тестов я бы первой командой в прерывании пришел байт поставил бы счетчик входа в прерывание, а по сохранению байта в буфер счетчик сохраненных байт, и поглядел не расходиться ли это по ходу дела? Есть у меня такая теория что когда приходит прерывание вы в него вваливаетесь, потом вас куда то дергают, и за это время старый байт затирается, и вы пришли в прерывание за символом, а внутри получили ошибку и не сохранили символ. что-то типа того....
|
|
|
|
|
Apr 30 2014, 16:54
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(Golikov A. @ Apr 30 2014, 12:03)  Да библиотеки производителя все (ну большинство точно )с дисклаймером - это только пример!!! они в курсе качества их программистов, так что тоже не сторонник брать не глядя, и по большей части не использую. Я о CMSIS говорил. Цитата А у вас окружающее UART железо нормальное? Модуль WiFi и процессор находятся рядом на плате и общаются на TTL/CMOS уровне, без всяких RS-232. Я уверен, с этой точки зрения там все стабильно.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|