이번에는 ADC를 사용해보도록 하겠습니다.
stm32f4 에 보면 ADC 방법이 여러 가지가 있습니다.
Polling, Interrupt, DMA, DMA Interrupt 이렇게 많은 방법이 있는데
이번에는 Polling 방식을 사용해보겠습니다
먼저 ADC를 설정해야 하는데요.
다음과 같이 ADC1 IN2를 선택하여 체크해 줍니다.
Parameter를 보시면 여러 가지 설정이 가능한데요.
해상도는 12bits데이터가 출력될 것임을 알수 있네요 ^^;;;
Single Conversion 에서는 별도로 손될 부분은 없고, 만일 멀티채널을 이용하려면 ADC_Regular_ConversionMode에 Rank가 있을 것임으로 출력 순서는 반드시 확인해야 합니다.
그럼 LL로 변경하시고 Generate Code를 진행합니다.
코드를 작성 전에 Convert 하는 방법을 알기 위해서 매뉴얼을 살펴봅시다.
저는 Regular channel을 사용할 것임으로
먼저 ADC_CR2 레지스터에 SWSTART Bit를 Set 합니다.
데이터는 ADC_DR 레지스터를 읽으면 변환된 데이터가 적재된다고 되어 있네요.
그리고 EOC flag가 Set 됨을 알수 있네요.
그럼 LL 드라이버 코드로 옮겨보겠습니다.
LL_ADC_Enable(ADC1);
uint16_t adc_data;
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
LL_ADC_REG_StartConversionSWStart(ADC1);
while(!LL_ADC_IsActiveFlag_EOCS(ADC1));
adc_data = LL_ADC_REG_ReadConversionData12(ADC1);
printf("%d\r\n", adc_data);
HAL_Delay(100);
}
반응형
'b. 임베디드 > STM32' 카테고리의 다른 글
[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 Interrupt 사용하기 (0) | 2019.06.26 |
[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 |
[STM32F407VGT Discovery] Timer FND(7segment)초 단위 동작 (0) | 2019.06.20 |