JonBAL 0 22 декабря, 2014 Опубликовано 22 декабря, 2014 · Жалоба Камень STM32F103C8, среда Keil 4.74. На основе ST'шной библиотеки USB-FS и примеров слепил рабочий проект виртуального Com-порта. Работает, но осталось так много неизвестного, что даже не знаю с чего начать. Основная проблема в том, что при определённых изменениях (даже самых безобидных) в файлах библиотеки, перестаёт определяться USB-устройство (сбой запроса дескриптора устройства). Вот простейший пример. Код из файла hw_config.c, функции инициализации Set_System и функция Delay_ms (которая нигде никогда не вызывается). /******************************************************************************* * Function Name : Set_System * Description : Configures Main system clocks & power * Input : None. * Return : None. *******************************************************************************/ void Set_System(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f10x_xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f10x.c file */ // GPIO_InitTypeDef GPIO_InitStructure; //EXTI_InitTypeDef EXTI_InitStructure; // for(b = 0; b < 1425; b++); //b < 257 b < 1426 /* Enable USB_DISCONNECT GPIO clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_DISCONNECT, ENABLE); /* Configure USB pull-up pin */ // GPIO_InitStructure.GPIO_Pin = USB_DISCONNECT_PIN; // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // GPIO_Init(USB_DISCONNECT, &GPIO_InitStructure); GPIOB->CRH &= !(GPIO_CRH_CNF15_0 | GPIO_CRH_CNF15_1); GPIOB->CRH = GPIO_CRH_MODE15_1; GPIOB->BSRR = GPIO_BSRR_BS15; // /* Configure the EXTI line 18 connected internally to the USB IP */ // EXTI_ClearITPendingBit(EXTI_Line18); // EXTI_InitStructure.EXTI_Line = EXTI_Line18; // EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; // EXTI_InitStructure.EXTI_LineCmd = ENABLE; // EXTI_Init(&EXTI_InitStructure); EXTI->IMR = 0x00040000; EXTI->EMR = 0x00000000; EXTI->RTSR = 0x00040000; EXTI->FTSR = 0x00000000; } //void Delay_ms(uint32_t ms) //{ // // В stm32f10x_conf.h установлена частота кварца для расчёта // volatile uint32_t nCount; // RCC_ClocksTypeDef RCC_Clocks; // RCC_GetClocksFreq (&RCC_Clocks); // nCount=(RCC_Clocks.HCLK_Frequency/10000)*ms; // for (; nCount!=0; nCount--); //} Сейчас в неё напихан всякий хлам, это всё остатки былых экспериментов. Так вот, если я вношу изменения, а именно: раскомментирую функцию Delay_ms (по прежнему нигде не вызывается), или поменяю инициализацию линии подтяжки (прямую запись в регистры убрать, структуру включить), или включу пустой цикл for (причем b < 257 и более - устройство определяется, а b < 256 и менее - уже не определяется). Не говоря уже о внесении изменений в конечные точки (хотел добавить дрыгалку ногой для отслеживания, но опять не определяется). Ещё проблема частично описана здесь. Совершенно не понимаю где копать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jhm 0 9 января, 2015 Опубликовано 9 января, 2015 (изменено) · Жалоба Похоже на то что чип не успевает обслужить USB запросы из-аз задержек Изменено 9 января, 2015 пользователем jhm Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться