Nikitoc 0 26 мая, 2011 Опубликовано 26 мая, 2011 · Жалоба Это как это? В прерывании по приёму одного байта вычитываете несколько? Ждёте что ли их? Опрашиваете RXNE? Отключаете прерывание при этом? Да, ожидаю RXNE. Прерывания не отключаю. Получаю строчку и выхожу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 26 мая, 2011 Опубликовано 26 мая, 2011 · Жалоба Да, ожидаю RXNE. Прерывания не отключаю. Получаю строчку и выхожу. Хм. Как-то это криво, не? А если первый символ - помеха? Да и глухо висеть в прерывании столько времени - не комильфо. Хотя дело ваше конечно. Ну хорошо. А строчка-то приходит? Целиком? Если так, то проблема скорее всего в лишней зачистке RXNE. Либо напрямую, либо при вычитывании DR. По идее, каждому новому RXNE должно соответствовать ровно одно чтение DR. Причём первый раз RXNE уже взведён при входе в прерывание. Больше в голову ничего не приходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikitoc 0 26 мая, 2011 Опубликовано 26 мая, 2011 (изменено) · Жалоба Хм. Как-то это криво, не? Похоже, что Вы правы. Если просто сохранять символ в буфер, все работает. Но стоит во время работы обработчика поступить еще хотя бы одному символу - как прерывания прекращаются несмотря на все танцы с бубном. Но ведь должно же быть хоть какое-то логическое объяснение происходящему! Изменено 26 мая, 2011 пользователем Nikitoc Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 26 мая, 2011 Опубликовано 26 мая, 2011 · Жалоба Не применительно к данному контроллеру, а по идеологии: прерывание вычитывает только один быйт и помещает его в буфер (скорее кольцевой). В основном потоке идет обработка принятых данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 26 мая, 2011 Опубликовано 26 мая, 2011 · Жалоба Но ведь должно же быть хоть какое-то логическое объяснение происходящему! Мне тоже интересно:) Давайте посмотрим на код HostProt_Parser()? (желательно упрощённый вариант, при котором ошибка ещё воспроизводится) Ну или попробуйте сделать ещё один финт - перед каждым чтением DR вычитывайте SR. Это вычистит ошибки, может в них дело. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikitoc 0 28 мая, 2011 Опубликовано 28 мая, 2011 (изменено) · Жалоба Давайте посмотрим на код HostProt_Parser() В действительности там нет ничего особенного - я ожидаю RXNE, считываю байт-два оправляю строку в ответ и т.д. После HostProt_Parser() - вычитываю SR - его значение 0x0280 - т.е. никаких ошибок, установлены только флаги CTS и TXE. И при этом дальнейших прерываний не происходит :laughing: Изменено 28 мая, 2011 пользователем Nikitoc Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RusikOk 1 24 декабря, 2016 Опубликовано 24 декабря, 2016 · Жалоба помогите понять в чем дело. выставляю приоритеты так. и в обработчик прерывания от UART системным таймером хоть убей не перебивается Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 24 декабря, 2016 Опубликовано 24 декабря, 2016 · Жалоба А вы не забыли вызвать NVIC_SetPriorityGrouping() ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RusikOk 1 24 декабря, 2016 Опубликовано 24 декабря, 2016 · Жалоба HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_3); не забыл Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 26 декабря, 2016 Опубликовано 26 декабря, 2016 · Жалоба Я банальную вещь скажу, но либо это место в библиотеке не выполняется, либо поверх кто-то что-то пишет. Проверяйте значения регистров (благо их немного совсем), потом выясняйте всю иерархию - кто, когда и откуда в них пишет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться