Warlord 0 26 января, 2017 Опубликовано 26 января, 2017 · Жалоба Приветствую! История началась с того, что на целевом устройстве на базе STM32F429 через определённое время перестаёт работать BULK OUT. Раскопки привели к тому, что после программного сброса модуля OTG_FS и его инициализации, содержимое некоторых установленных регистров оказыватся испорченным. Теперь конкретика. Я взял STM32F429 discovery, IDE IAR. Из STM32Cube_FW_F4_V1.13.0 пример UART_TwoBoards_ComPolling. В main.c после установки системной частоты SystemClock_Config() я добавил такие строки: __HAL_RCC_USB_OTG_FS_CLK_ENABLE(); USB_OTG_FS->GRSTCTL |= USB_OTG_GRSTCTL_CSRST; while (USB_OTG_FS->GRSTCTL & USB_OTG_GRSTCTL_CSRST); { volatile unsigned int i; for (i = 0; i < 50000; i++); // ~2.8 ms delay (datasheet: at least 3 PHY clocks delay) } USB_OTG_FS->DIEPTXF0_HNPTXFSIZ = 0x03FF03FF; BSP_LED_On(LED3); while (USB_OTG_FS->DIEPTXF0_HNPTXFSIZ == 0x03FF03FF); BSP_LED_Off(LED3); while (1); Записываю в Host non-periodic transmit FIFO size register значение 0x03FF03FF Между BSP_LED_On(LED3); и BSP_LED_Off(LED3); проходит 58.4 мс, регистр оказывается наполовину сброшенным, т.е. поле RAM start address остаётся 0x3FF, а поле TxFIFO depth сбрасывается в 0x200. Перечитал 34 главу скудного Reference manual (DM00031020), но не смог найти объяснения такому поведению... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться