Перейти к содержанию
    

stm32f373 SDADC+USB

Столкнулся с странностью - при запуске 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];
... бла-бла бла мой код

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...