STM32F4 ADC LL 드라이버 코드 작성하기

STM32F4 ADC LL 드라이버 코드 작성하기

STM32F4 ADC LL 드라이버 설정 및 초기설정 포스팅

  1. STM32F4 ADC LL 드라이버 초기설정하기
  2. STM32F4 ADC LL 드라이버 코드 작성하기

자, 이제 코드를 작성해보자. 아니지. 코드를 작성하기 전에 레지스터부터 확인을 해봐야한다. 왜냐하면 LL 드라이버는 직접 레지스터를 제어하기 때문에 내부 구조를 파악해야하기 때문이다.

레퍼런스 메뉴얼 분석

레퍼런스 메뉴얼에는 위처럼 서술해 놨다. 레귤러 채널로 ADC를 사용한다면 먼저 ADC_CR2레지스터에 들어있는 SWSTART 비트를 1로 설정해야 ADC가 동작한다는 사실을 알 수 있다.이번에는 인터럽트를 사용하지 않을 것이므로 If a regular channel was converted:를 참고하면 되겠다.

MCU 짬밥을 드신 짬타이거는 EOC라는 플래그가 켜지면 ADC_DR을 읽으면 되겠구나. 싶을거다. 짬에서 나오는 바이브는 어떻게 못한다.

그러면 EOC라는 놈을 좀 찾아보자.

ADC_SR이라는 레지스터 안에 포함되어 있다. 다른 것들도 물론 찾아서 공부하면 도움이 되겠지만 인젝티드 모드를 사용하거나, 오버런을 적극적으로 활용할 것이 아니라면 크게 도움이 되지 않을 수도 있다. 음..그리고 이외에는 Regular Mode가 동작 여부를 확인할 수 있는 상태 레지스터도 있다.

1비트 영역에 차지하는 EOC에 대한 설명이다. 결국 컨버젼이 완료되면 1이되고, 완료되지 않으면 0이 되었다는 이야기다. 강제적으로 0을 입력해서 플래그를 초기화해주는 방법도 있겠지만, ADC_DR 레지스터에 들어있는 데이터를 읽기만 해도 플래그가 초기화 된다는 이야기가 있다. 따라서 플래그가 세워졌는지를 확인해보고 데이터를 읽으면 된다.

코드 작성하기

위에서 살펴본 것과 같다면 개발 코드는 아래처럼 작성하면 될거다.

  1. ADC를 ON 한다.
  2. ADC_CR2 레지스터에 들어있는SWSTART bit를 1로 설정해준다.
  3. EOC 플래그가 세워질때까지 기다린다.
  4. ADC_DR의 데이터를 읽어 EOC 플래그를 꺼준다.

어우! 쉽다. 한번 짜보자.

먼저 ADC를 사용해야한다. ADC를 켜보자.

이 함수를 사용하면 ADC를 Enable할 수 있다.

main문 안에 ADC가 초기화 된 이후에 작성한다.

그 다음에는 ADC를 Single Conversion으로 할 것이므로, while문 안에 ADC코드를 작성하면 될 것이다.

2.의 ADC_CR 레지스터를 설정해주자.

위 함수를 사용해서 ADC의 타입을 넘겨주면 알아서 설정 해준다. 와우

ADC의 EOC의 플래그가 세워질때까지 기다리려면, 해당 함수를 찾아봐야한다.

이 함수를 사용해서 1이될때까지 기다리는 함수를 짜면 될 것이다.

마지막으로 데이터를 읽는 법을 알아보자.

STMF4의 ADC는 12비트의 해상도를 가진 데이터를 얻을 수 있으므로 12BIT데이터를 수신해보려고한다.

이 함수로 데이터를 읽으면 된다. 12비트의 정수 값이 리턴될 것이다.

따라서 전체적인 코드를 보면 아래와 같이 될 것이다.

단, 위 코드는 ADC1을 사용했을 때 해당하는 경우고, ADC2를 사용한다면 수정해줘야한다.

끗.

댓글 남기기

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d 블로거가 이것을 좋아합니다: