일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 펌웨어
- 안드로이드
- 플라스크
- 라즈베리파이
- Android
- 에버온
- lambda
- STM32
- esp8266
- 서버리스
- 충전기
- YMODEM
- 보안
- AWS
- IOT Core
- 완속충전기
- 파이썬
- 전기차충전기
- thread
- 전기차충전
- 급속충전기
- OCPP
- flask
- 전기차
- 디자인패턴
- raspberry
- dynamodb
- 홈어시스턴트
- homeassistant
- everon
- Today
- Total
Louie NRT Story
[강의] STM32F4 - ADC with DMA 본문
Index
1. ADC와 DMA 설명
2. ADC, DMA 설정
3. 프로그래밍
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:
'전기차충전기' 카테고리의 다른 글
[EVERON] 급속 충전기 보드 USART (0) | 2020.12.16 |
---|---|
[강의] STM32F4 - CAN 통신 (5) | 2020.12.13 |
[펌웨어] STM32F4 강의 - EXTI (0) | 2020.12.10 |
[STM32] STM32F4 강의 - TIM 인터럽트 (0) | 2020.12.07 |
[펌웨어] STM32F4 Driver - Todo (0) | 2020.12.06 |