Перейти к содержанию
    

STM32 OTG USB проблема с отладкой

На другой порт перебрасывать - не выход. Все пины проца заняты. И плата уже разведена. И нет гарантии что при манипуляции другими битами порта USB не будет отваливаться.

Да временно, чисто для поиска источника косяка. В подобных случаях нужно все пробовать!

 

И еще раз повторюсь - увеличение объема стека помогает или нет? Вообще-то это самое первое, что следует проверить в глючном кода.

 

Всю портянку, что куб нагенерил, выкладывать?

 

Конечно же, никакие портянки сюда не надо выкладывать. Киньте все в один архив. Проект целиком, вместе с проектом под куб.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

UART. На другой порт перебрасывать - не выход. Все пины проца заняты. И плата уже разведена.

 

Ну на Nucleo-то можно попробовать?

 

Вот кратко:

Я всю тему читал, причём внимательно. Вижу, что код записи в UART вполне нормальный. Если только не включены прерывания от UART, то всё вполне легитимно. А теперь автор темы убрал ожидание флагов UART в прерывании. Всё должно работать.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё должно работать.

Внутри прерываний висит, вне - работает.

Отсюда простой вывод, что проблема на 99,9% в юзер-коде или настройках проекта (я бы для начала проверил объем стека, всякое бывает).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Внутри прерываний висит, вне - работает.

Насколько я понял, в последнем варианте в прерывании он пишет в буфер в памяти, а в UART вываливает потом, из основного кода.

Стек там не используется почти, так что вряд ли в нём дело. Я подозреваю неправильные настройки тактирования или включенные случайно прерывания от UART.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Стек там не используется почти, так что вряд ли в нём дело. Я подозреваю неправильные настройки тактирования или включенные случайно прерывания от UART.

Именно поэтому я настаивал на новом проекте, где бы полноценно отдельно был отлажен весь этот код, в противном случае траблы будут возникать на казалось бы ровном месте.

 

Как пришлет проект целиком, станет все понятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Именно поэтому я настаивал на новом проекте, где бы полноценно отдельно был отлажен весь этот код, в противном случае траблы будут возникать на казалось бы ровном месте.

 

Как пришлет проект целиком, станет все понятно.

 

cdc.rar

 

Размеры стека и кучи я увеличил в два раза по сравнению с теми, что поставил куб.

 

Мои добавления только в файле main.c между стоками со звездочками. Все остальное сгенерил куб.

У меня работает так:

 

Подключаю. Устройство определилось.

Пауза.

Когда начинается вывод через UART, устройство отваливается и переподключается. Вижу по USBLyser-у.

И так по циклу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проверьте линии TX/RX аппаратно на плате, нет ли соплей и т .п.

 

Если временно использовать другой USART на других пинах, то проблемы остаются?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проверьте линии TX/RX аппаратно на плате, нет ли соплей и т .п.

 

Если временно использовать другой USART на других пинах, то проблемы остаются?

 

Пины проверил, одинаково не работает на ДВУХ разных платах. Под другой порт переделываю.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все, нашел.

 

Куб в коде выставляет в 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;

 

Все работает.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И возникает конфликт между 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 */.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Внутри MX_USB_DEVICE_Init() и есть настройка

 

hpcd_USB_OTG_FS.Init.vbus_sensing_enable = ENABLE;

 

Я потому и поставил первую строку приветствия до MX_USB_DEVICE_Init(). Если поставить после нее, то будет происходить передача строки и одновременно обмен по USB (инициализация), тогда USB отваливается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гы-гы-гы, повеселили!

5 страниц увлекательного чтива!

 

И после этого не курить даташиты с рефманами и не вручную периферию настраивать?!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Внутри MX_USB_DEVICE_Init() и есть настройка

 

hpcd_USB_OTG_FS.Init.vbus_sensing_enable = ENABLE;

Ясно, и больше она нигде не менятся другую....

 

Что ж, лишний гвоздь в гроб куба!

Как был он уделом новичков и школоты, так он таковым и остается.

 

Короче, живем по-старому - все настраиваем ручками, и неважно как с HAL/SPL или без. Главное, ручками !!

 

Впрочем, в кубе удобно глядеть визуально где какой пин будет висеть и прикинуть на будущее трассировку и назначение пинов по AF-функциям...

Но упаси боже вставлять в проект нагенерированный им код!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ага, у меня уже даже привычка появилась. Сначала генеришь все на кубе, убеждаешься, что ничего не работает, оставляешь только инициализацию, а все остальное преписываешь поглядывая в код куба.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...