|
USB хост флэшки для STM32F105 |
|
|
|
Mar 22 2014, 16:13
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
Вот проект под кокос. Может кто глянет, почему флэшка не определяется. Подключение ключа питания: // PA8 - Fault (overcurrent) - IN // PA10 - USB Power - OUT Что меня удивляет, что в примерах всё конфигурирование USB - 2 строки: RCC_OTGFSCLKConfig(RCC_OTGFSCLKSource_PLLVCO_Div3); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_OTG_FS, ENABLE); USB пины вообще нигде не конфигурятся, хотя на F4 там есть всё - и настройка порта, и AF - полный боекомплект .... И ещё. Под отладчиком в функции Код void USB_OTG_BSP_EnableInterrupt(USB_OTG_CORE_HANDLE *pdev) { NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = OTG_FS_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init ( &NVIC_InitStructure ); } в функции NVIC_Init железно вылетает в DefaultHandler. Без отладчика нормально проходит (проверял светодиодиками). Спасибо.
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 23 2014, 04:31
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
Спасибо, но я в курсе об этом  В отладке я до обмена просто не дохожу из-за сбоев NVIC. Уже начинаю жалеть, что не поставил туда старый добрый F407  ... И ещё. Никак не могу никак понять, что такое нога ID, зачем оно надо? Код хоста смотрел, оно к ней вроде не обращается. У меня в схеме её нет.
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 23 2014, 12:11
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
Ещё одна муть голубая. В демо-примерах USB включается командами: // Select USBCLK source RCC_OTGFSCLKConfig(RCC_OTGFSCLKSource_PLLVCO_Div3); // Enable the USB clock RCC_AHBPeriphClockCmd(RCC_AHBPeriph_OTG_FS, ENABLE) ; Первого я пока не понял, а второе переводится на язык регистров следующим образом: RCC->AHBENR |= (uint32_t)0x00001000; Т.е. бит 12 выставляется единица. Но в рефмане RM0008, в п. 7.3.6 на стр. 108 этот бит находится в числе Reserved. На самом деле синхронизация влючается здесь: // APB1ENR // RCC_APB1Periph_USB = (uint32_t)0x00800000 -- bit 23 RCC_APB1PeriphClockCmd ( RCC_APB1Periph_USB, ENABLE ); т.е. RCC->APB1ENR |= (uint32_t)0x00800000; Но и это пока не помогло  ... Поставил в начало main RCC_ClocksTypeDef RCC_Clocks; RCC_GetClocksFreq ( &RCC_Clocks ); В RCC_Clocks - все поля равны 8*10^6, т.е. ни хрена не настроено. Компилятор - IAR, где эти вещи всегда делались автоматом до вызова main.. Бред собачий и только. Роюсь дальше ... Или я уже с катушек съехал и ни хрена не понимаю. Кста. Прерывание USB не вызывается вообще - проверено светодиодиком.
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 23 2014, 14:23
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
Про регистры понял, спасибо. SystemInit вызвал руками. После этого оно слегка чихнуло. Callback USBH_USR_DeviceAttached вызвался. Как я понимаю, хост что-то увидел. Дальше - тишина... По светодиодикам вижу, что вне отладчика USBH_USR_DeviceAttached не вызывается  Та же флэшка на F407 работает с песнями. Приложил проект на IAR. Посмотрите кто может, или проверьте у себя.
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 25 2014, 08:35
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
Косяк нашёл. На ST-шной плате stm3210c-eval на проце стоит кварц 25МГц, под него сделаны все ихние примеры. А у меня на плате - 8 МГц. Поэтому и не работало. После соответствующих правок все callback-и успешно вызвались и хост/флэшка вошли в рабочий режим. Имя производителя, продукта, какой-то серийник тоже нормально считались. FatFs пока не прикручивал. Подправленные файлы Но есть один непонятный и очень неприятный момент - всё это работает только под отладкой. Без отладчика - ни фига не работает. В прошивке точек останова вообще нет. Просто захожу отладчиком, нажимаю Run - и оно работает. Никто не сталкивался с этой бедой?
Прикрепленные файлы
1.zip ( 66.11 килобайт )
Кол-во скачиваний: 17
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 25 2014, 12:30
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
Перенёс в кокос. Получил defaultHandler в функции Код static NVIC_InitTypeDef NVIC_InitStructure; void USB_OTG_BSP_EnableInterrupt(void) { /* Enable USB Interrupt */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = OTG_FS_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } В последней строчке - на функции NVIC_Init. Если захожу туда пошагово, DefaltHandlera в ней нет, но он появляется в любой следующей функции, через которую я пытаюсь сделать StepOver. Стек - 10 кил: #define STACK_SIZE 0x00002800 /*!< The Stack size suggest using even number - 10KB */ Что за хрень такая? Замахался уже  ....
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|