ST/STM32F103C8

STM32F103C8 - ADC(Polling)

engineer4ever 2025. 8. 8. 10:00

 

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