ST/STM32F103C8

STM32F103C8 - ADC(Interrupt)

engineer4ever 2025. 8. 8. 10:07

 

MCU
STM32F103(ST)
IDE
Atollic(TrueSTUDIO), STM32CubeMX
목표
HAL driver를 사용하여 ADC를 여러개를 interrupt mode로 multi conversion 한다.

 

1. STM32CubeMX : ADC-Interrupt 설정

- 'Pinout & Configuration' Tab으로 이동

1) Analog 선택

2) ADC1 항목 선택

 

- ADC Configuration 확인

ADC_Settings >

1) Scan Convsersion Mode : Enabled

여러 채널을 샘플링 하는 경우 scan 모드를 enable 하고 한개 채널만 샘플링 하는 경우 disable

2) Continous conversion mode : Enabled

3) Discontinous conversion mode : Disabled

 

ADC_Regular_Conversion Mode >

1) Enable Regular Conversions : Enable

2) Number of Conversion : 3

3) 각 Rank 별로 원하는 ADC 채널 선택

4) Sampling Time : 제일 느린 시간으로 선택

 

- NVIC Settings 확인

1) NVIC 선택

2) ADC1 and ADC2 global interrupts : Enabled에 체크

- GENERATE CODE 클릭


2. ATOLLIC : main.c 수정

- callback 함수 추가

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint16_t adc_ch = 0;
uint16_t adc_val[3];

int _write(int FD, char *buffer, int len)
{
	HAL_UART_Transmit (&huart1, (uint8_t*)buffer, len, 500);
	return len;
}

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc_cb)
{
	adc_val[adc_ch] = HAL_ADC_GetValue(hadc_cb);
	adc_ch = (adc_ch + 1) % 3;
}
/* USER CODE END 0 */
 

- main() : 실행 코드

while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
	HAL_ADC_Start_IT(&hadc1);
	printf("PB0 = %d, PC5 = %d, PA2 = %d\n", adc_val[0], adc_val[1], adc_val[2]);
}
/* USER CODE END 3 */
 

'ST > STM32F103C8' 카테고리의 다른 글

STM32F103C8 - TIMER  (1) 2025.08.08
STM32F103C8 - ADC(DMA)  (0) 2025.08.08
STM32F103C8 - ADC(Polling)  (1) 2025.08.08
STM32F103C8 - printf()를 이용하여 UART로 문자열 출력  (0) 2025.08.08
STM32F103C8 - UART(DMA)  (3) 2025.08.08