Allregia 9 16 апреля Опубликовано 16 апреля · Жалоба Рассматриваю тут исходники одного девайса, и есть вопросы. Чbп - STM32L151, используется два входа АЦП, преобразование складыват результаты в две переменные в прерывании СисТика. В начале, в main, запускается преобразование: vu16 ADCRes[2]; // ADC Results from DMA ......... MX_DMA_Init(); MX_ADC_Init(); HAL_ADC_Start_DMA(&hadc, (uint32_t *)ADCRes, 2); Затем в систике значения с АП накаппливаютсы в двух переменных и когда-=то=та потом исползуются. u32 ADC1Res=0, ADC2Res=0; // ADC integrators ... void HAL_SYSTICK_Callback(void){ ADC1Res +=ADCRes[0]; ADC2Res +=ADCRes[1]; HAL_ADC_Start(&hadc); // next convertion <<<<<<<<<<<<< (1) Иициализация DMA НЕ циклическая! hadc.Instance = ADC1; hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV4; hadc.Init.Resolution = ADC_RESOLUTION_12B; hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc.Init.ScanConvMode = ADC_SCAN_ENABLE; hadc.Init.EOCSelection = ADC_EOC_SEQ_CONV; hadc.Init.LowPowerAutoWait = ADC_AUTOWAIT_DISABLE; hadc.Init.LowPowerAutoPowerOff = ADC_AUTOPOWEROFF_DISABLE; hadc.Init.ChannelsBank = ADC_CHANNELS_BANK_A; hadc.Init.ContinuousConvMode = DISABLE; // <<<<<<<<<<<<<<<<<<<<<<< (2) hadc.Init.NbrOfConversion = 2; hadc.Init.DiscontinuousConvMode = ENABLE; hadc.Init.NbrOfDiscConversion = 2; hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc.Init.DMAContinuousRequests = ENABLE; if (HAL_ADC_Init(&hadc) != HAL_OK) Собственно вопрос - "а что, так можно было?!"(с) То есть, почему в (1) стоит HAL_ADC_Start а не HAL_ADC_Start_DMA и как оно при этом работает ?! Почему HAL_ADC_Start запускает DMA? А если оно DMA не запускает, то как результат двух преобразований попадает в ADCRes[] ? --------------------------------------------- P.S. Если я комментирую (1) и в (2) меняю дизейбл на энейбл - все работает в циклическом режиме, но это тривиально. Читали бы в прерывании по концу DMA, перезапуская его там-же, это тоже было бы понятно. Но вот такое как там я что-то не понял. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться