이번 포스팅에서는 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) 단위로 측정됩니다.
'STM32' 카테고리의 다른 글
IAR STM32F429I-DISC1 보드 UART(USART2) 통신 설정 및 사용 방법 (0) | 2025.04.23 |
---|---|
STM32 CUBE IDE 개발환경 구축하기 (0) | 2025.04.10 |
IAR STM32F 시리즈 개발환경 구축 (0) | 2024.02.20 |