STM32F4 – ADC with DMA

  • Post author:
  • Post category:STM32

출처: https://louie0724.tistory.com/362

1. ADC와 DMA 설명

1) ADC(Analog to Digital Converter) 계산방법

– STM32는 Reference 전압이 3.3v 임

– ADC 1당 전압[V[ = VREF(Voltage Reference) / Bit Resolution = 3.3v / 2^12

  = 3.3v / 4096 = 0.806mV

  ex) ADC 값이 1500 이라면 0.000806 x 1500 = 1.209v 가 측정된 전압임

2) DMA(Direct Memory Access) 설명

– 측정된 값이 자동으로 특정 메모리에 복사되는 것

– 약간 설정으로 자동 복사되어 코딩할 필요가 없음

3) 프로그래밍 하고 하는 방식

– 기존에는 AD 변환이 완료되면 Value[0] ~ Value[3] 까지 하나씩 저장해달라고 CPU 클럭이 소모됨

– 위와 다르게 DMA 방식으로 AD변환이 완료되면 ADC결과를 DMA 컨트롤러가 자동으로 원하는 변수에 저장

4) 정리

– 특정메모리의 값을 가져올 때 사용

– 몇개데이터를 가져와서 복사할떄는 효과가 거의 없지만 1kbyte 크기일때는 for문 돌려서 복사하느라 CPU가

   다른일을 하지 못하지만 DMA 이용하면 바로 복사함. CPU의 클럭 소요 없이 DMA가 복사하기 때문에 좋음.

– Uart로 데이터가 100byte씩 들어올때 보통 1byte씩 인터럽트 걸어서 배열에 차곡차곡 쌓아놓는데

  그러면 100번의 인터럽트가 걸린다. 하지만 DMA를 이용하면 100byte를 DMA가 알아서 저장하고 다

  받아지면 인터럽트 한번 걸어서 수행함

2. ADC, DMA 설정

– 4개의 ADC를 설정함

 

– ADC의 계산 방법 등을 설정함

 

– 순차적으로 ADC의 값을 배열에 하나씩 저장 할 것이기 때문에 Circular 모드로 설정

– 저장할 Memory는 순차적으로 증가하도록 설정

 

3. 프로그래밍

– ADC의 DMA를 사용할 수 있도록 선언할 Start 함수

 

– 계산된 4개의 ADC 값을 순차적으로 배열에 저장 하도록 함

– 그렇게 저장된 배열의 데이터를 출력

Reference:

https://youtu.be/o6hZEyv6s88