EmbedElektrik 0 5 июля, 2017 Опубликовано 5 июля, 2017 · Жалоба Столкнулся с странностью - при запуске USB SDADC начинает выдавать мусор. Для теста настроил SysTick, в прерываниях которого запускаю преобразование void SysTick_Handler(void) { if(adc_ready) { adc_ready=false; GPIO_SetBits(GPIOB, GPIO_Pin_7); SDADC_SoftwareStartInjectedConv(SDADC1); } }; обработчик прерывания АЦП такой: void SDADC1_IRQHandler(void) { if(SDADC_GetFlagStatus(SDADC1, SDADC_FLAG_JEOC) != RESET) { if(adc_ready==false) { adc1 = SDADC1->JDATA12R; send_Uart(USART2,adc1>>8); adc_ready=true; GPIO_ResetBits(GPIOB, GPIO_Pin_7);//led off } SDADC_ClearITPendingBit(SDADC1, SDADC_IT_JEOC); } } т.е. для теста верхний байт выталкиваю во второй дебажный UART для USB взял пример из STM32_USB-FS-Device_Lib_V4.0.0 VirtualComport_Loopback. По отдельности все работает. Одновременно - из регистра ацп лезет мусор. Если закомментировать любую из строк инициализации USB, т.е. чтоб USB не стартовал, то получаю адекватные данные ацп. При этом при включенном USB время конверсии АЦП на порядок меньше чем при выключенном. Set_USBClock(); USB_Interrupts_Config(); GPIO_SetBits(GPIOA, GPIO_Pin_15);//usb pull-up USB_Init(); К сожалению отладчик здесь тоже не помогает - хост сразу откидывает девайс на паузе. вот инициализация int main(void) { Set_System(); initAll(); send_Uart(USART2,'o');// usart test setup_sdadc(); Set_USBClock(); USB_Interrupts_Config(); GPIO_SetBits(GPIOA, GPIO_Pin_15);//usb conn USB_Init(); while (1) { if (bDeviceState == CONFIGURED) { CDC_Receive_DATA(); if (Receive_length != 0) { Receive_length = 0; command_type = Receive_Buffer[0]; ... бла-бла бла мой код Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться