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 |