|
|
  |
STM32 OTG USB проблема с отладкой |
|
|
|
Feb 22 2017, 16:35
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(Chameleon @ Feb 22 2017, 19:25)  На другой порт перебрасывать - не выход. Все пины проца заняты. И плата уже разведена. И нет гарантии что при манипуляции другими битами порта USB не будет отваливаться. Да временно, чисто для поиска источника косяка. В подобных случаях нужно все пробовать! И еще раз повторюсь - увеличение объема стека помогает или нет? Вообще-то это самое первое, что следует проверить в глючном кода. Цитата Всю портянку, что куб нагенерил, выкладывать? Конечно же, никакие портянки сюда не надо выкладывать. Киньте все в один архив. Проект целиком, вместе с проектом под куб.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Feb 22 2017, 16:40
|

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

|
Цитата(Chameleon @ Feb 22 2017, 21:25)  UART. На другой порт перебрасывать - не выход. Все пины проца заняты. И плата уже разведена. Ну на Nucleo-то можно попробовать? Цитата(Forger @ Feb 22 2017, 21:04)  Вот кратко: Я всю тему читал, причём внимательно. Вижу, что код записи в UART вполне нормальный. Если только не включены прерывания от UART, то всё вполне легитимно. А теперь автор темы убрал ожидание флагов UART в прерывании. Всё должно работать.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Feb 22 2017, 17:49
|

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

|
Цитата(Forger @ Feb 22 2017, 21:44)  Внутри прерываний висит, вне - работает. Насколько я понял, в последнем варианте в прерывании он пишет в буфер в памяти, а в UART вываливает потом, из основного кода. Стек там не используется почти, так что вряд ли в нём дело. Я подозреваю неправильные настройки тактирования или включенные случайно прерывания от UART.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Feb 23 2017, 06:49
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 5-07-08
Пользователь №: 38 757

|
QUOTE (Forger @ Feb 22 2017, 20:59)  Именно поэтому я настаивал на новом проекте, где бы полноценно отдельно был отлажен весь этот код, в противном случае траблы будут возникать на казалось бы ровном месте.
Как пришлет проект целиком, станет все понятно.
cdc.rar ( 697.8 килобайт )
Кол-во скачиваний: 10Размеры стека и кучи я увеличил в два раза по сравнению с теми, что поставил куб. Мои добавления только в файле main.c между стоками со звездочками. Все остальное сгенерил куб. У меня работает так: Подключаю. Устройство определилось. Пауза. Когда начинается вывод через UART, устройство отваливается и переподключается. Вижу по USBLyser-у. И так по циклу.
|
|
|
|
|
Feb 23 2017, 08:59
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 5-07-08
Пользователь №: 38 757

|
QUOTE (Forger @ Feb 23 2017, 11:42)  Проверьте линии TX/RX аппаратно на плате, нет ли соплей и т .п.
Если временно использовать другой USART на других пинах, то проблемы остаются? Пины проверил, одинаково не работает на ДВУХ разных платах. Под другой порт переделываю.
|
|
|
|
|
Feb 23 2017, 10:36
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 5-07-08
Пользователь №: 38 757

|
Все, нашел.
Куб в коде выставляет в USBD_LL_Init():
hpcd_USB_OTG_FS.Init.vbus_sensing_enable = ENABLE;
Даже если в настройках USB в кубе переключатель Activate_VBUS отключен. А VBUS_DETECT это пин PA9, он же и TX для USART1.
И возникает конфликт между USATRT1 Tx и VBUS_SENSE. Поэтому отваливается USB, если что-то делать с пином PA9 (или передавать через USART1 или вручную им шевелить)
Но если выбрать переключатель Activate_VBUS и USART1 одновременно, то тогда передачу USART1 он монтирует на PA15, на PA9 VBUS_DETECT и конфликта нет.
Сделал вручную в коде
hpcd_USB_OTG_FS.Init.vbus_sensing_enable = DISABLE;
Все работает.
|
|
|
|
|
Feb 23 2017, 10:47
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(Chameleon @ Feb 23 2017, 13:36)  И возникает конфликт между USATRT1 Tx и VBUS_SENSE. Тоже грешил на этот PA9, потому и просил кинуть пины в другой USART или другие пины. Но смотря в КУБ, вижу, что он тут ни при делах, все дело в вашей самодеятельности. Поясню: До того, как будет вызвано MX_USB_DEVICE_Init, где V_BUS настраивается уже правильно, вы пытаетесь кидать в USART байты: Код /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); #ifdef USER_CODE_ENABLE //****************************************************************** prn("\r\nSTM32F411 bug enabled"); //****************************************************************** #endif MX_USB_DEVICE_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */ Это можно делать только в тех секциях, где это разрешает КУБ. В данном случае достаточно перенести ваш код в место между этих строк: /* USER CODE BEGIN 2 */ и /* USER CODE END 2 */.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Feb 23 2017, 11:03
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 5-07-08
Пользователь №: 38 757

|
Внутри MX_USB_DEVICE_Init() и есть настройка
hpcd_USB_OTG_FS.Init.vbus_sensing_enable = ENABLE;
Я потому и поставил первую строку приветствия до MX_USB_DEVICE_Init(). Если поставить после нее, то будет происходить передача строки и одновременно обмен по USB (инициализация), тогда USB отваливается.
|
|
|
|
|
Feb 23 2017, 13:29
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(Chameleon @ Feb 23 2017, 14:03)  Внутри MX_USB_DEVICE_Init() и есть настройка
hpcd_USB_OTG_FS.Init.vbus_sensing_enable = ENABLE; Ясно, и больше она нигде не менятся другую.... Что ж, лишний гвоздь в гроб куба! Как был он уделом новичков и школоты, так он таковым и остается. Короче, живем по-старому - все настраиваем ручками, и неважно как с HAL/SPL или без. Главное, ручками !! Впрочем, в кубе удобно глядеть визуально где какой пин будет висеть и прикинуть на будущее трассировку и назначение пинов по AF-функциям... Но упаси боже вставлять в проект нагенерированный им код!
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|