ioc 파일에서 설정 해야된다.
각 보드의 데이터 시트를 살펴보면 ADC을 연결할 핀이 나올 것이다.
나의 경우, PA4-5에 ADC을 연결해야 했다.
이런 식으로, PA4-5의 우클릭을 해보면, ADC에 설정이 있는 것을 볼 수 있다.
이렇게, 핀에 ADC IN4-IN5로 설정해줬다.
ADC 설정을 열어, IN4-5에 체크해주면 된다.
멀티 채널을 읽을 때는 DMA 방식을 이용하면 쉽게 읽힌다.
따라서, DMA Setting을 열어 ADD을 눌러 ADC을 추가해주고, Mode는 Circular로 설정해준다.
그 다음, Parameter Settings 에서 ADC_Setting에 DMA Continuous Conversion Mode을 Enabled로 만든다.
이후, 코드는 간단하다.
자신이 실행시키고 있는 함수 main에 아래 코드를 추가하면 된다.
extern ADC_HandleTypeDef hadc; //나의 경우 다른 파일에서 실행하고 있기에 extern로 가져왔음!
uint16_t adcVal[3]; //adc값 저장하기 위함
HAL_ADC_Start_DMA(&hadc, (uint16_t*)adcVal, 2);
printf("%d %d\r\n",adcVal[0],adcVal[1]); //2개의 채널에서 나오는 adc값 출력됨.
이 방식으로 나는 조이스틱의 ADC값 2개를 받아 모터를 제어하는 로직을 구현했다.
제가 fw는 잘 몰라서 그러는데요. 올려주신 블로그 마지막 실행코드에
uint16_t adcVal[3]; 를 선언하면 배열변수가 adcVal[0], adcVal[1], adcVal[2] . 이렇게 3개가 선언되자나요
두개의 adc 값을 읽을려면 " uint16_t adcVal[2]; " 로 해서 변수를 2개로 하는게 아닌 3개로 하는 이유가 있을까요??