Forger 19 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба На другой порт перебрасывать - не выход. Все пины проца заняты. И плата уже разведена. И нет гарантии что при манипуляции другими битами порта USB не будет отваливаться. Да временно, чисто для поиска источника косяка. В подобных случаях нужно все пробовать! И еще раз повторюсь - увеличение объема стека помогает или нет? Вообще-то это самое первое, что следует проверить в глючном кода. Всю портянку, что куб нагенерил, выкладывать? Конечно же, никакие портянки сюда не надо выкладывать. Киньте все в один архив. Проект целиком, вместе с проектом под куб. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба UART. На другой порт перебрасывать - не выход. Все пины проца заняты. И плата уже разведена. Ну на Nucleo-то можно попробовать? Вот кратко: Я всю тему читал, причём внимательно. Вижу, что код записи в UART вполне нормальный. Если только не включены прерывания от UART, то всё вполне легитимно. А теперь автор темы убрал ожидание флагов UART в прерывании. Всё должно работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 19 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба Всё должно работать. Внутри прерываний висит, вне - работает. Отсюда простой вывод, что проблема на 99,9% в юзер-коде или настройках проекта (я бы для начала проверил объем стека, всякое бывает). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба Внутри прерываний висит, вне - работает. Насколько я понял, в последнем варианте в прерывании он пишет в буфер в памяти, а в UART вываливает потом, из основного кода. Стек там не используется почти, так что вряд ли в нём дело. Я подозреваю неправильные настройки тактирования или включенные случайно прерывания от UART. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 19 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба Стек там не используется почти, так что вряд ли в нём дело. Я подозреваю неправильные настройки тактирования или включенные случайно прерывания от UART. Именно поэтому я настаивал на новом проекте, где бы полноценно отдельно был отлажен весь этот код, в противном случае траблы будут возникать на казалось бы ровном месте. Как пришлет проект целиком, станет все понятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chameleon 0 23 февраля, 2017 Опубликовано 23 февраля, 2017 · Жалоба Именно поэтому я настаивал на новом проекте, где бы полноценно отдельно был отлажен весь этот код, в противном случае траблы будут возникать на казалось бы ровном месте. Как пришлет проект целиком, станет все понятно. cdc.rar Размеры стека и кучи я увеличил в два раза по сравнению с теми, что поставил куб. Мои добавления только в файле main.c между стоками со звездочками. Все остальное сгенерил куб. У меня работает так: Подключаю. Устройство определилось. Пауза. Когда начинается вывод через UART, устройство отваливается и переподключается. Вижу по USBLyser-у. И так по циклу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 19 23 февраля, 2017 Опубликовано 23 февраля, 2017 · Жалоба cdc.rar Вот так нужно было сделать в самом первом посте ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 19 23 февраля, 2017 Опубликовано 23 февраля, 2017 · Жалоба Проверьте линии TX/RX аппаратно на плате, нет ли соплей и т .п. Если временно использовать другой USART на других пинах, то проблемы остаются? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chameleon 0 23 февраля, 2017 Опубликовано 23 февраля, 2017 · Жалоба Проверьте линии TX/RX аппаратно на плате, нет ли соплей и т .п. Если временно использовать другой USART на других пинах, то проблемы остаются? Пины проверил, одинаково не работает на ДВУХ разных платах. Под другой порт переделываю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chameleon 0 23 февраля, 2017 Опубликовано 23 февраля, 2017 · Жалоба Все, нашел. Куб в коде выставляет в 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; Все работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 19 23 февраля, 2017 Опубликовано 23 февраля, 2017 · Жалоба И возникает конфликт между 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 */. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chameleon 0 23 февраля, 2017 Опубликовано 23 февраля, 2017 · Жалоба Внутри MX_USB_DEVICE_Init() и есть настройка hpcd_USB_OTG_FS.Init.vbus_sensing_enable = ENABLE; Я потому и поставил первую строку приветствия до MX_USB_DEVICE_Init(). Если поставить после нее, то будет происходить передача строки и одновременно обмен по USB (инициализация), тогда USB отваливается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 34 23 февраля, 2017 Опубликовано 23 февраля, 2017 · Жалоба Гы-гы-гы, повеселили! 5 страниц увлекательного чтива! И после этого не курить даташиты с рефманами и не вручную периферию настраивать?! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 19 23 февраля, 2017 Опубликовано 23 февраля, 2017 · Жалоба Внутри MX_USB_DEVICE_Init() и есть настройка hpcd_USB_OTG_FS.Init.vbus_sensing_enable = ENABLE; Ясно, и больше она нигде не менятся другую.... Что ж, лишний гвоздь в гроб куба! Как был он уделом новичков и школоты, так он таковым и остается. Короче, живем по-старому - все настраиваем ручками, и неважно как с HAL/SPL или без. Главное, ручками !! Впрочем, в кубе удобно глядеть визуально где какой пин будет висеть и прикинуть на будущее трассировку и назначение пинов по AF-функциям... Но упаси боже вставлять в проект нагенерированный им код! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rudy_b 1 27 февраля, 2017 Опубликовано 27 февраля, 2017 · Жалоба Ага, у меня уже даже привычка появилась. Сначала генеришь все на кубе, убеждаешься, что ничего не работает, оставляешь только инициализацию, а все остальное преписываешь поглядывая в код куба. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться