реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STM32F407VGT6, Проблема при подключении UART ко второй паре пинов
gazpar
сообщение Jan 26 2015, 15:37
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 9-01-14
Пользователь №: 79 952



Все UART/USART в stm32f407 имеют две пары пинов,к которым можно подключиться.
( USART3_Tx_PD8 | USART3_Rx_PD9 ) VS ( USART3_Tx_PB10 | USART3_Rx_PB11 )
Моя проблема заключается в том,что в паре ( USART3_Tx_PB10 | USART3_Rx_PB11 ) USART функционирует как положено.Передаёт данные и поллингом и по прерыванию,принимает данные по прерыванию.
Когда перенастраиваю USART3 на вторую пару пинов ( USART3_Tx_PD8 | USART3_Rx_PD9 ),поллинг и прерывание по передаче работают.А вот прерывание по приёму не наступает.

Кто-нибудь сталкивался с подобной проблемою?Чем это может быть вызвано?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 26 2015, 17:26
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



а прием сам работает?
если нет, то ногу не настроили на вход правильно... или ее функция блокируется какой-то смежной периферией настроенный на эту же ногу где-то в другом месте...
Go to the top of the page
 
+Quote Post
gazpar
сообщение Jan 27 2015, 04:31
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 9-01-14
Пользователь №: 79 952



Цитата(Golikov A. @ Jan 26 2015, 20:26) *
а прием сам работает?
если нет, то ногу не настроили на вход правильно... или ее функция блокируется какой-то смежной периферией настроенный на эту же ногу где-то в другом месте...

Сам приём работает только на паре пинов ( USART3_Tx_PB10 | USART3_Rx_PB11 ).

Настройка пинов:
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_Init(GPIOD, &GPIO_InitStructure);


Никакой доп.периферии,после настройки USART, на эти пины не подключается.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 27 2015, 07:17
Сообщение #4


Гуру
******

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



Цитата(gazpar @ Jan 27 2015, 06:31) *
Никакой доп.периферии,после настройки USART, на эти пины не подключается.
А вы можете убедиться в этом, посмотрев в отладчике содержимое регистров MODER, AFR? Причем и для PD9 и для PB11, чтобы не получилось, что у вас обе эти ноги настроены как входы приемника и конфликтуют внутри кристалла. И еще PC11 проверьте - на него тоже выведен USART3_RX


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 27 2015, 07:28
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



а вход UART должен быть просто GPIO, как тогда проц определяет какую из 3 возможных ног подключить к UART входу?
не глупость написал, выше объявляется как альтернатива...

ну тогда да смотреть конфликт с другими ногами
Go to the top of the page
 
+Quote Post
Integro
сообщение Jan 27 2015, 11:21
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 167
Регистрация: 25-12-09
Из: Минск
Пользователь №: 54 460



Цитата(gazpar @ Jan 27 2015, 07:31) *
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_Init(GPIOD, &GPIO_InitStructure);


Не вижу вызов функции GPIO_PinAFConfig и настройку прерывания по приему.
Go to the top of the page
 
+Quote Post
gazpar
сообщение Jan 27 2015, 15:00
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 9-01-14
Пользователь №: 79 952



Цитата(Сергей Борщ @ Jan 27 2015, 10:17) *
А вы можете убедиться в этом, посмотрев в отладчике содержимое регистров MODER, AFR


Благодарю за подсказку,дельный совет.
С USART3 разобрался,всё работает.
В чём была проблема так и не понял...Сегодня пришёл на работу на авось решил скомпилять->залил->всё заработало.В дебаге проверил: прерывание стало срабатывать и выгребать данные(проверял второй платой и логгером),проверка регистров MODER, AFR не потребовалась.
Вероятно,не работало из-за того,что долго не перезагружал комп,поэтому стал криво работать компилятор.Хотя кто его знает.

В общем,всем СПАСИБО за помощь!!!

Сообщение отредактировал gazpar - Jan 27 2015, 15:02
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Jan 27 2015, 19:38
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(gazpar @ Jan 27 2015, 18:00) *
Благодарю за подсказку,дельный совет.
С USART3 разобрался,всё работает.
В чём была проблема так и не понял...Сегодня пришёл на работу на авось решил скомпилять->залил->всё заработало.В дебаге проверил: прерывание стало срабатывать и выгребать данные(проверял второй платой и логгером),проверка регистров MODER, AFR не потребовалась.
Вероятно,не работало из-за того,что долго не перезагружал комп,поэтому стал криво работать компилятор.Хотя кто его знает.

В общем,всем СПАСИБО за помощь!!!


Классика, в RHR застряли данные и при инициализации их не вычитали. Хана прерываниям.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 16:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01338 секунд с 7
ELECTRONIX ©2004-2016