STM32F103 ADC Multi Channel 코드 작성하기

STM32F103 ADC Multi Channel 코드 작성하기

STM32F103 ADC Multi Channel 코드를 작성하는 예제입니다.

  1. ADC Multi Channel CUBEMX로 초기설정하기
  2. ADC Multi Channel 코드 작성하기 (현재 포스팅)
  3. CUBEMX로 ADC DMA 초기설정하기
  4. ADC DMA 코드 작성하기
  5. 코드 작성하기 – 인터럽트
  6. UART ADC 데이터 송신하기

코드를 생성했으니 본격적으로 코드를 작성해보자.

ADC Polling 방식으로 코드를 작성하려면 아래처럼 작성하라고 레퍼런스 메뉴얼에 적혀있다.

ADC를 사용하려면

  1. HAL_ADC_Start
  2. HAL_ADC_PollForConversion
  3. HAL_ADC_GetValue

를 하면 된댄다. 그러면 작성해보자.

여기선 채널이 2개이고 Discontinuous 숫자를 1로 했으니까

2개의 채널을 모두 읽고 싶다면 HAL_ADC_Start를 두번 호출해야한다.

HAL_ADC_Start

일단 ADC를 시작하려면 아래의 규칙을 충족시켜줘야한다.

HAL_ADC_Start

함수 안에 adc의 핸들러를 넣어주면된다. 나는 adc1의 핸들러를 사용해줄 것이므로 hadc1의 주소를 넘겨주면 된다. 그렇다면 아래와 같이서술해주면 되겠지.

HAL_ADC_Start(&hadc1);

HAL_ADC_PollForConversion

ADC라고 바로바로 쓸 수 있는 것이 아니다. 아날로그 데이터가 디지털로 변환될 때 까지 기다려줘야한다. 이 함수를 호출하면 그 시점부터 데이터를 취득한다고 보면 될 듯 하다.

HAL_ADC_PollForConversion

이 함수에는 두 개의 변수를 넣어줘야한다. 첫 번째는 당연히 핸들러를 넘겨줘야할 것이고, 두 번째는 타임아웃을 넣어주면된다. 만약에 discontinuous 모드를 사용하지 않았다면 채널이 2개가 될 것이다. 그렇다면 100을 넣어줬다면 100ms까지 기다려야 한다. 그러니까 HAL드라이버는 1채널용이라고 생각하는 편이 좋을 듯 하다.

나는 discontinuous 의 Number를 1로 설정했으니 당연히 1채널 씩 컨버젼이 이뤄질 것이다.

HAL_ADC_PollForConversion(&hadc1, 100);

HAL_ADC_GetValue

그 다음 데이터를 읽어주면 될 것이다. 데이터는 return되는 것을 받아야한다. 먼저 함수부터 확인해보자.

HAL_ADC_GetValue

데이터 반환이 32비트인데 실제 데이터 반환되는 양은 16비트이므로 16비트로 선언해도 무난하겠다. 그냥 변수로 핸들러만 넘겨주면 된다 그래서 아래와 같이 적기만 하면 되겠다.

ADC_data = HAL_ADC_GetValue(&hadc1);

그래서 총합해서 코드를 작성하면 아래와 같이 될 것이다.

당연하지만 while문 안에 적어야 반복해서 동작한다.

오늘 포스팅은 여기서 끝!

댓글 남기기

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

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