개요 

 
 
STM32 의 내장 ADC 활용하는 방법. 



본 설명에서의 구체적인 상황. 


타겟칩 : STM32L4x6  
페리페랄 :  ADC  
타겟보드 : D1P123R1
개발 IDE : KEIL MDK-ARM 혹은 SW4STM32 모두 가능. STM32CubeMX 기반하여 ADC 설정처리하고 IDE 에서 코딩한다. 
참고 : STM32 는 모두 사용법이 비슷하니 위 세부 개발환경에 집착할 필요없음. 

 ADC 활용 방법 기본. 


STM32CubeMX 에서 ADC 기능 설정 처리완료하고, 이를 프로젝트 코드에 적용시키고 이를 IDE(SW4STM32 , KEIL MDK-ARM 등 ) 에서 필요한 ADC 제어함수 작성하여 활용한다. 


 


 


 

STM32CubeMX 에서 ADC 설정.

 

1. ADC 용으로 사용할 STM32 핀 지정. 


STM32 의 ADC 는 많은 핀들을 할당가능하긴 하나 동일핀을 다른 용도로도 설정가능하기 때문에 본격 회로 설계 전에 ADC 로 사용될 핀 설정이 가능한지 먼저 확인한 후 결정해야 한다. 

본 예에서는 외부에서 STM32 에서 AD변환해야할 아날로그 신호가 3개가 있으며 연결된 MCU 핀은 아래 와 같은 상황을 예로 든다. 

STM32 PC3 : 아날로그 전압 입력 1. 
STM32 PC4 : 아날로그 전압 입력 2. 
STM32 PC5 : 아날로그 전압 입력 3.  

2. ADC 입력단의 Differential, Single 지정. 

- 본예에서는 Single Ended 로 지정했다. 

3. ADC 에서 사용하는 클럭 설정. 


4. ADC 의 비트 해상도 설정. 

- 본예에서는 12비트로 설정하고 있다. 

상기 1, 2, 3, 4까지 모두 STM32CubeMX 에서 설정이 이뤄진다. 아래동영상에 전체 과정 모두 보이고 있다.
즉, 먼저 ADC입력으로 사용될 핀 지정부터 먼저 하고 ADC1 의 설정부에서 해당 핀의 입력 설정을 Single Ended 를 선택하고 있다.




위 동영상 59초 시점을 보면 4개의 핀 PC3, PC4, PC5 에 대응된 핀 네임이 각각 ADC1_IN4, ADC1_IN13, ADC1_IN14 로 대응되었다. 
코드의 ADC 채널 선택하는 경우에는 이 핀네임으로 접근하게 된다. 

 


 


 

AD 변환 코드 작성. 

 

코드예. 
- AD변환 시험용으로 main 의 while 문내에 AD변환 구현예는 아래와 같다. 


 

uint32_t value_adc = 0;  // AD변환값 받아둘 변수

main()
{
... 중략.
  while (1)
  {
  /* USER CODE END WHILE */
  /* USER CODE BEGIN 3 */
 HAL_ADC_Start(&hadc1); // AD 변환 시작한다. 
 HAL_ADC_PollForConversion(&hadc1,100); // AD변환 완료될때까지 대기한다.
    value_adc = HAL_ADC_GetValue(&hadc1);  // AD 변환 결과값을 받는다.

 HAL_Delay(1); // 1msec 대기.
  
  }
  /* USER CODE END 3 */
}


AD 변환 작동 확인. 

- AD 변환이 정상적으로 되고 있는지 확인하는 수단으로 입력한 아날로그 파형이 정상적으로 변환되고 있는지 확인하면된다. 

본예에서는 외부에 아날로그 신호 발생기로 파형을 인가하고 KEIL MDK-ARM 의 디버그 모드에서 Logic Analyzer 로 AD 변환 결과값(상기 코드 상의 value_adc) 을 플로팅하여 입력한 신호 그대로 정상적으로 변환중인지 확인하다. 


아래 동영상에서 디버거 ST LINK V2  연결된 상태에서, KEIL uVision 디버그 모드에서 변수 value_adc 의 값을 로직애널라이저로 관찰하는 과정을 보인다. 





 
 


 






본 글 포함 상위 정리 장소. 

 

1. https://igotit.tistory.com/244 의 STM32






첫등록 : 2018년 12월 10일.

최종수정 : 


본 글 단축주소 : https://igotit.tistory.com/1964






Posted by 리치굿맨

댓글을 달아 주세요

  1. byungha kim

    질문이 있습니다만
    채널을 4 , 13, 14 를 쓰셨는데
    세개의 채널이 각각 표현되나요 이 코드에서는??

    2020.10.29 09:20 [ ADDR : EDIT/ DEL : REPLY ]
    • 네 KEIL 의 로직 애널라이저 기능이 최대 4개 채널까지는 표현가능한데.. 채널수 1개 일때는 무난하게 표현되었던 것이 채널수 많고 샘플링 속도가 빠른 경우엔 비정상적으로 표현될거예요..

      2020.10.29 16:07 신고 [ ADDR : EDIT/ DEL ]