본문 바로가기
STM32

IAR STM32F429I-DISC1 보드로 B10K 가변저항 ADC 값 읽기

by 꼬맹님 2025. 4. 23.

이번 포스팅에서는 STM32F429I-DISC1 보드에서 B10K 가변저항을 이용해 ADC 값을 읽고 UART로 출력하는 방법을 정리했습니다. STM32F4 시리즈의 기본 ADC 사용법을 익히기에 좋은 예제입니다.


 회로 연결

  • 사용한 가변저항: B10K (10kΩ)
  • 연결 핀:
    • 가변저항 1번 핀 (한쪽 끝)GND
    • 가변저항 2번 핀 (중간)PA0 (ADC1 Channel 0)
    • 가변저항 3번 핀 (다른 끝)3.3V

 목표

  • 가변저항을 돌리면 ADC 값이 0 ~ 4095 범위로 변함
  • 이 값을 USART2를 통해 PC 터미널에 출력

 코드 설명

1. ADC 초기화 함수 (ADC1_Init)

void ADC1_Init(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);   // ADC1 클럭 인가
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);  // GPIOA 클럭 인가

    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AN;              // 아날로그 입력 모드
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOA, &GPIO_InitStruct);

    ADC_InitTypeDef ADC_InitStruct;
    ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;           // 12비트 해상도 → 0~4095
    ADC_InitStruct.ADC_ScanConvMode = DISABLE;
    ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;              // 단일 변환 모드
    ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
    ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
    ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStruct.ADC_NbrOfConversion = 1;
    ADC_Init(ADC1, &ADC_InitStruct);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_144Cycles);  // PA0 → 채널 0

    ADC_Cmd(ADC1, ENABLE);  // ADC 켜기
}

2. ADC 값 읽기 함수 (Read_ADC)

uint16_t Read_ADC(void)
{
    ADC_SoftwareStartConv(ADC1);                   // 변환 시작
    while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)); // 변환 완료까지 대기
    return ADC_GetConversionValue(ADC1);           // 변환된 값 반환 (0~4095)
}

 메인 루프 예시

uint16_t adc_value;
char buffer[50];

while (1)
{
    adc_value = Read_ADC();  // ADC 값 읽기
    sprintf(buffer, "ADC Value: %d\r\n", adc_value);
    USART_SendString(USART2, buffer);  // UART로 출력
    Delay(100);  // 100ms 딜레이
}

 동작 확인

  • 터미널 프로그램 (예: RealTerm, TeraTerm 등) 을 통해 COM 포트로 연결하면 다음과 같이 출력됩니다:
ADC Value: 23
ADC Value: 204
ADC Value: 1023
ADC Value: 3088
ADC Value: 4095
  • 가변저항을 돌릴수록 출력 값이 0에서 4095 사이로 실시간 변화합니다.

 참고

  • STM32F429 보드에서 PA0은 기본적으로 ADC1의 Channel 0으로 연결되어 있어서 아날로그 입력으로 쓰기 좋습니다.
  • 전압 범위는 0V ~ 3.3V이며, ADC 해상도는 12비트 → (3.3V / 4095) 단위로 측정됩니다.