完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本来的硬件平台是STM32F303VC,ADC校准能通过。换成STM32F303CC,校准就不行了,程序用的老的固件库。ADC的校准需要什么条件才能成功。初始化代码如下:
ADC_InitTypeDef ADC_InitStructure; ADC_CommonInitTypeDef ADC_CommonInitStructure; /* Configure the ADC clock */ RCC_ADCCLKConfig(RCC_ADC12PLLCLK_Div1); // RCC_AHBPeriphResetCmd(RCC_AHBPeriph_ADC12,ENABLE); /* Enable ADC1 clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ADC12, ENABLE); /* ADC GPIO configuration */ ADC_GPIO_Configuration(); /* ADC DMA Channel configuration */ ADC_DMA_Configuration(); ADC_StructInit( ADC_InitStructure); /* ADC Calibration procedure */ ADC_VoltageRegulatorCmd(ADC1, ENABLE); ADC_VoltageRegulatorCmd(ADC2, ENABLE); ADC_SelectCalibrationMode(ADC1, ADC_CalibrationMode_Single); ADC_StartCalibration(ADC1); ADC_SelectCalibrationMode(ADC2, ADC_CalibrationMode_Single); ADC_StartCalibration(ADC2); while(ADC_GetCalibrationStatus(ADC1) != RESET ) { calibration_value_1 = ADC_GetCalibrationValue(ADC1); debug_log("ADC1 Calibration Value %d",calibration_value_1); } while(ADC_GetCalibrationStatus(ADC2) != RESET ) { calibration_value_2 = ADC_GetCalibrationValue(ADC2); debug_log("ADC2 Calibration Value %d",calibration_value_2); } // /* ADC Dual mode configuration */ ADC_CommonInitStructure.ADC_Mode = ADC_Mode_RegSimul; ADC_CommonInitStructure.ADC_Clock = ADC_Clock_AsynClkMode; ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1; ADC_CommonInitStructure.ADC_DMAMode = ADC_DMAMode_Circular; ADC_CommonInitStructure.ADC_TwoSamplingDelay = 1; ADC_CommonInit(ADC1, ADC_CommonInitStructure); /* */ ADC_InitStructure.ADC_ContinuousConvMode = ADC_ContinuousConvMode_Enable; ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; ADC_InitStructure.ADC_ExternalTrigConvEvent = ADC_ExternalTrigConvEvent_0; ADC_InitStructure.ADC_ExternalTrigEventEdge = ADC_ExternalTrigEventEdge_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_OverrunMode = ADC_OverrunMode_Disable; ADC_InitStructure.ADC_AutoInjMode = ADC_AutoInjec_Disable; ADC_InitStructure.ADC_NbrOfRegChannel = 16; ADC_Init(ADC1, ADC_InitStructure); ADC_Init(ADC2, ADC_InitStructure); ADC_TempSensorCmd(ADC1,ENABLE); ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 1, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 2, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC2, ADC_Channel_2, 2, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 3, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC2, ADC_Channel_3, 3, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 4, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC2, ADC_Channel_4, 4, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 5, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 5, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 6, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC2, ADC_Channel_2, 6, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 7, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC2, ADC_Channel_3, 7, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 8, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC2, ADC_Channel_4, 8, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 9, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 9, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 10, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC2, ADC_Channel_2, 10, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 11, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC2, ADC_Channel_3, 11, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 12, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC2, ADC_Channel_4, 12, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 13, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 13, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 14, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC2, ADC_Channel_2, 14, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 15,ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC2, ADC_Channel_3, 15, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 16, ADC_SampleTime_61Cycles5); ADC_RegularChannelConfig(ADC2, ADC_Channel_4, 16, ADC_SampleTime_61Cycles5); /* Configures the ADC DMA */ ADC_DMAConfig(ADC1, ADC_DMAMode_Circular); /* Enable the ADC DMA */ ADC_DMACmd(ADC1, ENABLE); /* Enable ADC1 and ADC2 */ ADC_Cmd(ADC1, ENABLE); ADC_Cmd(ADC2, ENABLE); /* wait for ADC1 ADRDY */ while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_RDY)); /* wait for ADC2 ADRDY */ while(!ADC_GetFlagStatus(ADC2, ADC_FLAG_RDY)); /* Enable the DMA channel */ DMA_Cmd(DMA1_Channel1, ENABLE); /* Start ADC1 Software Conversion */ ADC_StartConversion(ADC1); |
|
相关推荐
1个回答
|
|
ADC校准不通过的原因可能有很多,以下是可能的原因和解决方法:
1. 引脚配置错误:确保ADC输入引脚和通道配置正确,并连接到正确的电源和地线。确保GPIO和ADC的引脚和寄存器配置正确。 2. ADC参考电压错误:确保ADC参考电压源配置正确并提供稳定的参考电压。对于内部参考电压源,确保内部参考电压源使能,并且电压值正确。 3. ADC转换时间错误:确保ADC转换时间配置正确。如果转换时间太短,可能会导致校准失败。 4. ADC时钟配置错误:确保ADC时钟源和分频配置正确。检查RCC_ADCCLKConfig函数的参数是否正确。 5. ADC校准模式错误:确保使用了正确的校准模式。在初始化ADC时,通过ADC_InitStructure.ADC_ExternalTrigConvEdge参数配置校准模式。 6. ADC倍增模式错误:确保使用了正确的倍增模式。在初始化ADC时,通过ADC_CommonInitStructure.ADC_Mode参数配置倍增模式。 7. 噪声抑制错误:确保噪声抑制器的配置正确。通过ADC_CommonInitStructure.ADC_Prescaler参数配置噪声抑制器的时钟分频。 8. ADC控制寄存器配置错误:确保ADC控制寄存器的配置正确。检查ADC_InitStructure.ADC_ContinuousConvMode、ADC_InitStructure.ADC_DataAlign和ADC_InitStructure.ADC_Resolution参数的配置。 9. 软件延迟:在ADC校准之前,需要等待一段时间来稳定ADC。确保在调用校准函数之前执行足够的延迟。 10. 调用顺序错误:确保ADC初始化和校准的调用顺序正确。首先初始化ADC,然后校准,最后启动ADC。 除了以上可能的原因,还要确保使用的固件库版本与所使用的硬件兼容。可以尝试更新固件库版本或尝试重新编译和下载固件。 同时,可以在校准失败时检查ADC的状态寄存器,并查看错误位的值,以了解校准失败的具体原因。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1658 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1568 浏览 1 评论
996 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
695 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1616 浏览 2 评论
1876浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
660浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
528浏览 3评论
547浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
517浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 23:03 , Processed in 0.616027 second(s), Total 48, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号