MM32F0121自带12位ADC,本次对ADC采集进行测试,开发板自带了一个电位器,通过改变电位器的阻值来产生不同的电压供MM32F0121采集,并用万用表对比测试。
先看原理图
下面对MM32F0121写入ADC采集程序,首先初始化,adc在通道3,
- void ADC_Configure(void)
- {
- ADC_InitTypeDef ADC_InitStruct;
- GPIO_InitTypeDef GPIO_InitStruct;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC, ENABLE);
- ADC_StructInit(&ADC_InitStruct);
- ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;
- ADC_InitStruct.ADC_Prescaler = ADC_Prescaler_16;
- ADC_InitStruct.ADC_Mode = ADC_Mode_Continue;
- ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
- ADC_Init(ADC1, &ADC_InitStruct);
- ADC_SampleTimeConfig(ADC1, ADC_Channel_3, ADC_SampleTime_240_5);
- ADC_AnyChannelNumCfg(ADC1, 0);
- ADC_AnyChannelSelect(ADC1, ADC_AnyChannel_0, ADC_Channel_3);
- ADC_AnyChannelCmd(ADC1, ENABLE);
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
- /* PA3(POT) */
- GPIO_StructInit(&GPIO_InitStruct);
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;
- GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;
- GPIO_Init(GPIOA, &GPIO_InitStruct);
- ADC_Cmd(ADC1, ENABLE);
- }
下面再来看打印的源码部分
- void ADC_AnyChannel_ContinuousScan_Polling_Sample(void)
- {
- float Voltage;
- printf("\r\nTest %s", __FUNCTION__);
- ADC_Configure();
- ADC_SoftwareStartConvCmd(ADC1, ENABLE);
- while (1)
- {
- while (RESET == ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC))
- {
- }
- ADC_ClearFlag(ADC1, ADC_FLAG_EOC);
- Voltage = (float)ADC_GetChannelConvertedValue(ADC1, ADC_Channel_3) * (float)3.3 / (float)4096.0;
- printf("\r\nPOT Voltage = %0.2f", Voltage);
- }
- }
打印1.79,万用表实测1.79
打印2.98,实测2.979
打印是3.29,实测为3.293,还是非常准确的。
|