|
STM32F107 USB-CDC |
|
|
|
Jul 11 2014, 15:46
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 31-03-14
Из: Харьков
Пользователь №: 81 165

|
Всем привет  Понадобилось мне поднять USB CDC на STM32F107. С ЮСБ, как и с STM32 опыта практически нет. Работаю в CooCox. Скачал STM32_USB-Host-Device_Lib_V2.1.0, накидал оттуда файлов в проект. кучу ошибок выгреб. сейчас в основном остались такого типа: D:\code\beer\trunk\stm32f107\usb_otg_lib\usb_hcd.c:101:7: error: 'USB_OTG_CORE_HANDLE' has no member named 'host' я подозреваю, что где-то не раскомментил какой-то дейфайн. Можете подсказать что не правильно может быть? Прикрепляю проект
|
|
|
|
|
 |
Ответов
|
Jul 15 2014, 07:33
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 31-03-14
Из: Харьков
Пользователь №: 81 165

|
Завел VBus на PA9, ситуация не поменялась. Может что не так в инициализации ног USB на моем 107? Вот код: Код RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA , ENABLE); RCC_OTGFSCLKConfig(RCC_OTGFSCLKSource_PLLVCO_Div2); /* Configure SOF VBUS ID DM DP Pins */ GPIO_InitStructure.GPIO_Pin = /*GPIO_Pin_8 |*/ GPIO_Pin_9 | GPIO_Pin_11 | GPIO_Pin_12; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /*GPIO_PinAFConfig(GPIOA,GPIO_PinSource8,GPIO_AF_OTG_FS); GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_OTG_FS); GPIO_PinAFConfig(GPIOA,GPIO_PinSource11,GPIO_AF_OTG_FS); GPIO_PinAFConfig(GPIOA,GPIO_PinSource12,GPIO_AF_OTG_FS);*/ /* this for ID line debug */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; /*GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; */ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_Init(GPIOA, &GPIO_InitStructure); //GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_OTG_FS); //RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); //RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_OTG_FS, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_OTG_FS, ENABLE); Закомменченые части остались от F407. Установка частоты. Кварц стоит на 24МГц. Результирующая SysClk меньше 72 МГц, но на USB должно подаваться 48: Код static void SetSysClockTo72(void) { __IO uint32_t StartUpCounter = 0, HSEStatus = 0; /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ /* Enable HSE */ RCC->CR |= ((uint32_t)RCC_CR_HSEON); /* Wait till HSE is ready and if Time out is reached exit */ do { HSEStatus = RCC->CR & RCC_CR_HSERDY; StartUpCounter++; } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
if ((RCC->CR & RCC_CR_HSERDY) != RESET) { HSEStatus = (uint32_t)0x01; } else { HSEStatus = (uint32_t)0x00; }
if (HSEStatus == (uint32_t)0x01) { /* Enable Prefetch Buffer */ FLASH->ACR |= FLASH_ACR_PRFTBE;
/* Flash 2 wait state */ FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;
/* HCLK = SYSCLK */ RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; /* PCLK2 = HCLK */ RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; /* PCLK1 = HCLK */ RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
#ifdef STM32F10X_CL /* Configure PLLs ------------------------------------------------------*/ /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ /* PREDIV1 configuration: HSE / 4 = 6 */ RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | RCC_CFGR2_PREDIV1SRC_HSE | RCC_CFGR2_PREDIV1_DIV4); /* Enable PLL2 */ RCC->CR |= RCC_CR_PLL2ON; /* Wait till PLL2 is ready */ while((RCC->CR & RCC_CR_PLL2RDY) == 0) { } /* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */ RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLMULL6); #else /* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */ RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9); #endif /* STM32F10X_CL */
/* Enable PLL */ RCC->CR |= RCC_CR_PLLON;
/* Wait till PLL is ready */ while((RCC->CR & RCC_CR_PLLRDY) == 0) { } /* Select PLL as system clock source */ RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;
/* Wait till PLL is used as system clock source */ while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) { } } else { /* If HSE fails to start-up, the application will have wrong clock configuration. User can add here some code to deal with this error */ } } Ну и еще остается вариант подгоревшего USB на МК
|
|
|
|
|
Jul 15 2014, 11:13
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
Цитата(slavokhire5 @ Jul 15 2014, 03:33)  Завел VBus на PA9, ситуация не поменялась. Может что не так в инициализации ног USB на моем 107? Вот код: Код #ifdef STM32F10X_CL /* Configure PLLs ------------------------------------------------------*/ /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ /* PREDIV1 configuration: HSE / 4 = 6 */ RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | RCC_CFGR2_PREDIV1SRC_HSE | RCC_CFGR2_PREDIV1_DIV4);
....
/* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */ RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLMULL6); Ну и еще остается вариант подгоревшего USB на МК  Не нравится мне эта часть кода. Кварц имеем на 24 МГц. Смотри Fig. 11 из Reference Manual RM008: 1) Выбираем 24 Mгц клок (RCC_CFGR2_PREDIV1SRC_HSE) 2) Делим 24/4 = 6MГц (RCC_CFGR2_PREDIV1_DIV4) 3) Умножжаем на 6 (RCC_CFGR_PLLMULL6) - получаем частоту 36 МГц для USB??? Я чтото пропустил? Внутрення тоже не 72 будет. Надо как минимум RCC_CFGR_PLLMULL8 вместо RCC_CFGR_PLLMULL6. Но лучше и другие клоки подровнять.
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
Jul 15 2014, 12:44
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 31-03-14
Из: Харьков
Пользователь №: 81 165

|
Цитата(A. Fig Lee @ Jul 15 2014, 14:13)  Не нравится мне эта часть кода. Кварц имеем на 24 МГц. Смотри Fig. 11 из Reference Manual RM008: 1) Выбираем 24 Mгц клок (RCC_CFGR2_PREDIV1SRC_HSE) 2) Делим 24/4 = 6MГц (RCC_CFGR2_PREDIV1_DIV4) 3) Умножжаем на 6 (RCC_CFGR_PLLMULL6) - получаем частоту 36 МГц для USB??? Я чтото пропустил? Внутрення тоже не 72 будет.
Надо как минимум RCC_CFGR_PLLMULL8 вместо RCC_CFGR_PLLMULL6.
Но лучше и другие клоки подровнять. Поставил кварц на 25МГц, поменял настройку клоков. Вроде как по даташиту (в конце даташита табличка есть с рекомендуемыми значениями): Код #ifdef STM32F10X_CL /* Configure PLLs ------------------------------------------------------*/ /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ /* PREDIV1 configuration: HSE / 4 = 6 */ RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5); /* Enable PLL2 */ RCC->CR |= RCC_CR_PLL2ON; /* Wait till PLL2 is ready */ while((RCC->CR & RCC_CR_PLL2RDY) == 0) { } /* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */ RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLMULL9); на МСО вывожу частоту RCC_MCO_PLLCLK_Div2, вижу 36.00хх МГц. следовательно на USB_Prescaler поступает частота 144 МГц. я ее делю на 3. результат тот же - тишина. Полез по регистрам USB, меня смущает установленный в "1" бит MMIS (Mode mismatch interrupt). я так понимаю, что это нехорошо. Как бы отловить, почему он ставится
|
|
|
|
|
Jul 15 2014, 13:18
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
Цитата(slavokhire5 @ Jul 15 2014, 08:44)  Поставил кварц на 25МГц, поменял настройку клоков. Вроде как по даташиту (в конце даташита табличка есть с рекомендуемыми значениями):
Полез по регистрам USB, меня смущает установленный в "1" бит MMIS (Mode mismatch interrupt). я так понимаю, что это нехорошо. Как бы отловить, почему он ставится Да, с частотой хорошо. Вот и USB начал ругатся: Цитата When the OTG_FS controller is operating in one mode, either device or host, the application must not access registers from the other mode. If an illegal access occurs, a mode mismatch interrupt is generated and reflected in the Core interrupt register (MMIS bit in the OTG_FS_GINTSTS register). То бишь, 2 мода как минимум задействованы: девайс и хост получается? Похоже на программный косяк. Если никаких резисторов на DP, DM нет.
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
Сообщений в этой теме
slavokhire5 STM32F107 USB-CDC Jul 11 2014, 15:46 A. Fig Lee Цитата(slavokhire5 @ Jul 11 2014, 11:46) ... Jul 11 2014, 17:37 slavokhire5 Цитата(A. Fig Lee @ Jul 11 2014, 20:37) Н... Jul 12 2014, 12:26  A. Fig Lee Цитата(slavokhire5 @ Jul 12 2014, 08:26) ... Jul 12 2014, 13:54   slavokhire5 Цитата(A. Fig Lee @ Jul 12 2014, 16:54) А... Jul 14 2014, 07:51    A. Fig Lee Цитата(slavokhire5 @ Jul 14 2014, 03:51) ... Jul 14 2014, 10:47 slavokhire5 Собрал проект на основе этой статьи: http://www.pr... Jul 14 2014, 10:31 slavokhire5 *я имел ввиду не usb_config.h/c, a hw_config.h/c. ... Jul 14 2014, 11:48 A. Fig Lee Цитата(slavokhire5 @ Jul 14 2014, 07:48) ... Jul 14 2014, 13:31 slavokhire5 перевел код на stm32f4discovery, там работает. вид... Jul 14 2014, 14:11 A. Fig Lee Цитата(slavokhire5 @ Jul 14 2014, 10:11) ... Jul 14 2014, 14:29 slavokhire5 а у вас объявлен #define VBUS_SENSING_ENABLED? есл... Jul 15 2014, 14:08 A. Fig Lee usb_conf.h
Цитата...
/****************** USB OTG ... Jul 15 2014, 15:08 slavokhire5 Были "железные" проблемы в плате. Достал... Jul 17 2014, 12:52 slavokhire5 что-то задержался с выкладыванием ...
прикрепляю ... Jul 30 2014, 10:00 slavokhire5 Подскажите пожалуйста, как узнать, отправились ли ... Aug 7 2014, 06:25
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|