embeded/Cortex-M3 STM
stm32 adc + dma.. part 2?
구차니
2025. 10. 29. 14:45
cluade.ai의 도움으로 해결 -_-
아무튼, 값이 밀리는 것 처럼 보였던 이유는 dma를 circular로 하지 않아서 수동으로 시작했고, 첫 adc는 버려야 하는데
버리니까 두번째 들어오지 않는 문제 발생. 그래서 매번 dma_start를 해줘서 문제가 되었던 듯 하다.
ADC_Settings 에서 Continuous Conversion Mode 를 Disable -> Enable

DMA는 Mode Normal 에서 Circular로 해주면 끝

NVIC는 DMA1만 인터럽트 활성화 해주면 된다.

코드에서는 main() 에서 while() 들어가기 전에
HAL_ADC_Start_DMA() 한번 호출해주고 그 이후로는
adc callback 에서 다 받아왔을 때 값을 옮겨주고 처리루틴 부르면 끝
| void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { if(hadc->Instance == ADC1) { // memcpy(ADCRaw, ADCResult, sizeof(uint16_t) * 4); // adc_dma_flag = 2; } } |