|
STM32F2 USART, не устанавливается бит RXNE (USART) |
|
|
|
Oct 27 2014, 06:49
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 12-06-12
Из: Москва
Пользователь №: 72 275

|
Здравствуйте все! Имеем STM32F207. Проблема с портами USART. При настройке на передачу все прекрасно работает и в прерываниях в том числе. После перенастройки на прием не удается ничего принять, а именно не устанавливается флаг RXNE, соответственно нет срабатывания прерывания. Смотрел осциллографом на выводах - сигнал есть. Состояние регистров порта на картинке. Если не вижу очевидного - ткните легонько носом пожалуйста.
Эскизы прикрепленных изображений
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Oct 27 2014, 08:16
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 12-06-12
Из: Москва
Пользователь №: 72 275

|
Обратил внимание на настройку GPIO. Собственно выглядит код так: Код //RS2 TX GPIO_InitStruct.Pin= PIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FAST; GPIO_InitStruct.Alternate = GPIO_AF7_USART3; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); //RS2 RX GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FAST; GPIO_InitStruct.Alternate = GPIO_AF7_USART3; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); Вроде бы во всех примерах прием просто настраивают как вход без подтяжек. Запись GPIO_InitStruct.Alternate = GPIO_AF7_USART3 ф-цией HAL_GPIO_Init никак не обрабатывается для приемника в таком случае. Здесь ничего не мог напутать? Библиотеки использую stm32cubef2
Сообщение отредактировал rav38 - Oct 27 2014, 08:20
|
|
|
|
|
Oct 27 2014, 11:06
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 12-06-12
Из: Москва
Пользователь №: 72 275

|
Код GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FAST; GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); вот таким образом из библиотечных примеров. не помогло. по-прежнему не могу ничего принять
Сообщение отредактировал rav38 - Oct 27 2014, 11:06
|
|
|
|
|
Oct 27 2014, 11:25
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 12-06-12
Из: Москва
Пользователь №: 72 275

|
Цитата(dac @ Oct 27 2014, 15:17)  а где флаг RXNE смотрите? если в отладчике включено чтение периферии, то этот флаг сбрасывается отладчиком поставил breakpoint в обработчике прерываний COM порта - ни разу в него не попал. для чистоты эксперимента убрал отладчик и в обработчик прерываний добавил включение светодиода - опять же не получилось.
Сообщение отредактировал rav38 - Oct 27 2014, 11:26
|
|
|
|
|
Oct 27 2014, 12:42
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Golikov A. @ Oct 27 2014, 13:56)  нога RX должна быть ни входом, ни выходом, она должна быть альтернативной функцией, ногой RX! Только в таком случае она будет подключена к входным цепям приемника.... Ну-ну-ну, не пугайте. Вход периферии подключен всегда (отключается только в аналоговом режиме), посмотрите на блок-схему в руководстве пользователя. В режиме альтернативной функции нога настраивается на вывод (если верить таблице Port bit configuration table в том же руководстве). И, кстати, подтяжки в этом режиме продолжают работать: Цитата When the I/O port is programmed as alternate function: ● The output buffer can be configured as open-drain or push-pull ● The output buffer is driven by the signal coming from the peripheral (transmitter enable and data) ● The Schmitt trigger input is activated ● The weak pull-up and pull-down resistors are activated or not depending on the value in the GPIOx_PUPDR register ● The data present on the I/O pin are sampled into the input data register every AHB1 clock cycle ● A read access to the input data register gets the I/O state Я понятия не имею, какой глубокий смысл разработчики кристалла закладывали в подключение входных сигналов периферии на альтернативные функции. Или же это (насчет перевода на вывод) вопиющая ошибка в руководстве пользователя - но в этом случае врут уж больно складно, на протяжении всего раздела.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Oct 27 2014, 13:43
|
Частый гость
 
Группа: Участник
Сообщений: 138
Регистрация: 27-12-11
Пользователь №: 69 107

|
В приложении работающая инициализация УАРТов.
Сообщение отредактировал A.Lex - Oct 27 2014, 13:46
Прикрепленные файлы
uart.zip ( 1.35 килобайт )
Кол-во скачиваний: 17
|
|
|
|
|
Oct 27 2014, 15:34
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата Я понятия не имею, какой глубокий смысл разработчики кристалла закладывали в подключение входных сигналов периферии на альтернативные функции тут есть какая-то обманка.... Вот берем ногу 9 порта Д про которую тут конкретно идет речь она может быть входом, выходом, и альтернативной функцией, при этом она может быть USART3_RX - 7 функция FSMC_D14 - 12 функция EVENTOUT - 15 функция и что вся периферия которая реализует эти функции сразу подключена всегда к ноге? А как она сама на себя не влияет? я уверен что в кристалле там стоит мультиплексор в зависимости от выбора функции, и еще один мультиплексор который выбирает что на ногу выдать вход, выход, или альтернативная функция... да хотя бы можно UART вывести на разные ноги, этот 3 уарт может быть на D9, B11, C11. И если все эти ноги сразу подключены к модулю, то как активность на ноге C11, не запускает прием уарта? Полюбасу нога должна уметь отключатся от периферии!
|
|
|
|
|
Oct 27 2014, 15:55
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Я думаю, что Сергей вёл речь про F1xx. Там периферия именно что вся подключена к ноге. И можно включить, например, два разных периферийных модуля, которые используют одну и ту же ногу. Это, конечно, было криво, и потому ST исправили модуль GPIO в следующих после F1xx контроллерах. В F2xx у ножек есть специальный регистр выбора альтернативных функций, и нога подключается только к одному периферийному модулю. ЗЫ. Кстати, видел какое-то полезное использование возможности подключения ножки к нескольким периферийным модулям в F1xx, только вот не помню какое. То ли таймером измеряли длительность бита UART-а, то ли что-то ещё.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Oct 27 2014, 18:33
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Сергей Борщ @ Oct 27 2014, 22:56)  Но входы периферии друг другу и никому другому не мешают и поэтому (согласно руководству пользователя) подключены к соотвесттвующим линиям постоянно. Хотя да, как их при этом развести между разными физическими ногами - непонятно. Как это не мешают? Если к данному UART подключено три альтернативных ноги RX, то в этом случае все три ноги будут поступать на вход одновременно? Не, это вряд ли  Наверное всё же ошибка в описании. Цитата(Сергей Борщ @ Oct 27 2014, 22:56)  Кстати, а у автора вопроса выбрана соответствующая AF для нужной ноги? Вроде бы да: Код GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Oct 28 2014, 09:25
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 12-06-12
Из: Москва
Пользователь №: 72 275

|
у меня уже кажется окончательно "замылился" глаз и такое чувство что запутался в какой-то мелочи(((( посмотрите еще пожалуйста исходник в прищепке. простая инициализация. какое-то время посылаю байты в порт. потом останавливаю отладчик и смотрю буфер. никаких изменений нет
Сообщение отредактировал rav38 - Oct 28 2014, 09:29
Прикрепленные файлы
usart.rar ( 9.96 килобайт )
Кол-во скачиваний: 13
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|