이번에는 인터럽트 방식을 사용해보겠습니다
먼저 ADC를 설정합니다.
이전 Polling 방식과 같이 ADC1 IN2를 선택하여 체크해 줍니다.
이번에는 인터럽트를 사용할 것임으로
NVIC 인터럽트 테이블에 Global 인터럽트 Enabled를 체크해 줍니다.
그럼 LL로 변경하시고 Generate Code를 진행합니다.
인터럽트는 EOCIE bit를 Set하면 인터럽트가 발생한다고 되어 있네요.
그럼 먼저 main 함수를 다음과 같이 작성합니다.
LL_ADC_Enable(ADC1);
LL_ADC_EnableIT_EOCS(ADC1);
LL_ADC_REG_StartConversionSWStart(ADC1);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(adc_flag == 1)
{
adc_flag = 0;
printf("%d\r\n", adc_data);
}
}
main에서 확인해야 할 부분은 ADC와 ADC 인터럽트를 Enable 시키고
한번 LL_ADC_REG_StartConversionSWStart를 시켜줘야 하는 부분입니다. ^^;
그리고 stm32f4xx_it.c 파일에 ADC_IRQHandler를 보겠습니다.
void ADC_IRQHandler(void)
{
/* USER CODE BEGIN ADC_IRQn 0 */
LL_ADC_REG_StartConversionSWStart(ADC1);
if(LL_ADC_IsActiveFlag_EOCS(ADC1))
{
LL_ADC_ClearFlag_EOCS(ADC1);
adc_flag = 1;
adc_data = LL_ADC_REG_ReadConversionData12(ADC1);
}
/* USER CODE END ADC_IRQn 0 */
/* USER CODE BEGIN ADC_IRQn 1 */
/* USER CODE END ADC_IRQn 1 */
}
동작 설명은 인터럽트가 발생하면 adc_flag를 1로 변경하고 데이터는 adc_data에 저장 후
이를 main에서 adc_flag를 확인하여 데이터를 출력하도록 만들었습니다.
반응형
'b. 임베디드 > STM32' 카테고리의 다른 글
[Mikromedia+ for STM32 ARM] GPIO 테스트 (0) | 2020.08.27 |
---|---|
[Mikromedia+ for STM32 ARM] 업로드를 위한 2가지 방법 (0) | 2020.08.26 |
[STM32F407VE] w25q16 Flash SPI 동작 (2) | 2020.08.19 |
[STM32F407VGT Discovery] SPI with MAX41100 사용하기 (0) | 2019.06.29 |
[STM32F407VGT Discovery] ADC Single Conversion(Polling) 사용하기 (0) | 2019.06.25 |
[STM32F407VGT Discovery] USART printf 사용하기 (0) | 2019.06.24 |
[STM32F407VGT Discovery] USART Interrupt, Polling 사용하기 (0) | 2019.06.23 |
[STM32F407VGT Discovery] Timer Output Compare Mode (0) | 2019.06.21 |