[STM32F372 EVM] 12bit ADC 테스트
STM32F3 시리즈의 가장 강점은 저렴지만 강력한 ADC성능이다.
16비트 ADC도 추가되었고, ADC 속도도 향상되고 3채널 동시 획득이 가능하다고 한다.
- Ultra-fast 12-bit ADCs with 5 MSPS per channel (up to 18 MSPS in Interleaved mode)
16bit ADC테스트를 먼저 해 보고 싶지만 우선 기존 코드로 테스트 해 볼 수 있는 12bit ADC를 테스트 해보자
하지만 기존 코드와 많이 변경된것 같다.
STM32F373 ADC 초기화 코드
ADC_HandleTypeDef AdcHandle;
void AdcInit(void)
{
__HAL_RCC_ADC1_CONFIG(RCC_ADC1PCLK2_DIV6);
AdcHandle.Instance = ADCx;
AdcHandle.Init.ScanConvMode = DISABLE;
AdcHandle.Init.ContinuousConvMode = DISABLE;
AdcHandle.Init.DiscontinuousConvMode = DISABLE;
AdcHandle.Init.NbrOfDiscConversion = 0;
AdcHandle.Init.ExternalTrigConv = ADC_SOFTWARE_START;
AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
AdcHandle.Init.NbrOfConversion = 1;
GPIO_InitTypeDef GPIO_InitStruct;
ADCx_CLK_ENABLE();
ADCx_CHANNEL_GPIO_CLK_ENABLE();
GPIO_InitStruct.Pin = ADCx_CHANNEL_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(ADCx_CHANNEL_GPIO_PORT, &GPIO_InitStruct);
}
STM32F373 ADC 획득 소스코드
unsigned int GetAdc(unsigned int Ch)
{
unsigned int val = 0;
ADC_ChannelConfTypeDef sConfig;
sConfig.Channel = Ch;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_7CYCLES_5;
HAL_ADC_ConfigChannel(&AdcHandle, &sConfig)
//Start the conversion process
HAL_ADC_Start(&AdcHandle)
HAL_ADC_PollForConversion(&AdcHandle, 10);
//ADC conversion completed
val = HAL_ADC_GetValue(&AdcHandle);
return val;
}