MCU
|
STM32F103(ST)
|
IDE
|
Atollic(TrueSTUDIO), STM32CubeMX
|
목표
|
HAL driver를 사용하여 ADC를 1개를 polling mode로 single conversion 한다.
|
ADC는 크게 세가지 모드가 있다.
1. Polling
2. Interrupt
3. DMA
이번 페이지에서는 polling 모드를 사용한다.
1. STM32CubeMX : ADC-Polling 설정
- 'Pinout & Configuration' Tab으로 이동
1) Analog 선택
2) ADC1 항목 선택
- ADC1, 2, 3중에 사용할 ADC 선택

또는,
- 'Pinout view' Tab으로 이동
1) ADC로 사용하고 싶은 Pin을 직접 선택

- 'Clock Configuration' Tab으로 이동
1) Clock Issues 확인 하여 클럭 이슈 제거 할 것


2. Single Conversion
- ADC Configuration 확인
ADC_Settings >
1) Scan Convsersion Mode : Disabled
여러 채널을 샘플링 하는 경우 scan 모드를 enable 하고 한개 채널만 샘플링 하는 경우 disable
2) Continous conversion mode : Disabled
타이머의 TRGO 신호를 받을때만 샘플링 시작을 할 예정이므로 disable
3) Discontinous conversion mode : Disabled
타이머의 TRGO 신호를 받을때만 1 샘플링씩 할 예정이므로 disable
ADC_Regular_Conversion Mode >
1) Enable Regular Conversions : Enable
2) Number of Conversion : 1
3) Rank 1 : Channel 8(Converting 원하는 ADC 채널 선택)
4) Sampling Time : 제일 느린 시간으로 선택

- GENERATE CODE 클릭
3. ATOLLIC : main.c 수정
- main() : 실행 코드
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 100);
uint32_t val_pb0 = HAL_ADC_GetValue(&hadc1);
printf("PB0 = %d\n", val_pb0);
}
/* USER CODE END 3 */
MCU
|
STM32F103(ST)
|
IDE
|
Atollic(TrueSTUDIO), STM32CubeMX
|
목표
|
ADC를 여러개를 polling mode로 multi conversion 한다.
|
4. Multi Conversion
- ADC Configuration 확인
ADC_Settings >
1) Scan Convsersion Mode : Enabled
여러 채널을 샘플링 하는 경우 scan 모드를 enable 하고 한개 채널만 샘플링 하는 경우 disable
2) Continous conversion mode : Disabled
타이머의 TRGO 신호를 받을때만 샘플링 시작을 할 예정이므로 disable
3) Discontinous conversion mode : Enabled
여러 채널을 샘플링 하는 경우 Enable, Trigger 한번에 몇 채널 받아올지 설정해야 함
ADC_Regular_Conversion Mode >
1) Enable Regular Conversions : Enable
2) Number of Conversion : 3
3) 각 Rank 별로 원하는 ADC 채널 선택
4) Sampling Time : 제일 느린 시간으로 선택

- GENERATE CODE 클릭
5. ATOLLIC : main.c 수정
- main() : 실행 코드
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 100);
uint32_t val_pb0 = HAL_ADC_GetValue(&hadc1);
printf("PB0 = %d ", val_pb0);
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 100);
uint32_t val_pc5 = HAL_ADC_GetValue(&hadc1);
printf("PC5 = %d ", val_pc5);
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 100);
uint32_t val_pa2 = HAL_ADC_GetValue(&hadc1);
printf("PA2 = %d\n", val_pa2);
}
/* USER CODE END 3 */
'ST > STM32F103C8' 카테고리의 다른 글
STM32F103C8 - ADC(DMA) (0) | 2025.08.08 |
---|---|
STM32F103C8 - ADC(Interrupt) (0) | 2025.08.08 |
STM32F103C8 - printf()를 이용하여 UART로 문자열 출력 (0) | 2025.08.08 |
STM32F103C8 - UART(DMA) (3) | 2025.08.08 |
STM32F103C8 - UART(Interrupt) (1) | 2025.08.08 |