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; } } |
'embeded > Cortex-M3 STM' 카테고리의 다른 글
| stm32 부트로더로 부팅 전환하기 (0) | 2025.10.21 |
|---|---|
| EEPROM emulation for stm32 (0) | 2025.10.16 |
| stm32 cpp (0) | 2025.08.08 |
| stm32 eeprom emulation (0) | 2025.07.29 |
| stm32f103ret flash program / erase 테스트 (0) | 2025.07.28 |
