参考了CH573F官方的ADC示例:
/* 单通道采样:选择adc通道0做采样,对应 PA4引脚, 带数据校准功能 */
PRINT( "n2.Single channel sampling...n" );
GPIOA_ModeCfg( GPIO_Pin_4, GPIO_ModeIN_Floa
ting );
ADC_ExtSingleChSampInit( SampleFreq_3_2, ADC_PGA_0 );
GPIOA_ModeCfg( GPIO_Pin_5, GPIO_ModeIN_Floating );
RoughCalib_Value = ADC_DataCalib_Rough(); // 用于计算ADC内部偏差,记录到全局变量 RoughCalib_Value中
PRINT( "RoughCalib_Value =%d n", RoughCalib_Value );
ADC_ChannelCfg( 0 );
for( i = 0; i < 20; i++ )
{
abcBuff
= ADC_ExcutSingleConver() + RoughCalib_Value; // 连续采样20次
}
for( i = 0; i < 20; i++ )
{
PRINT( "%d n", abcBuff ); // 注意:由于ADC内部偏差的存在,当采样电压在所选增益范围极限附近的时候,可能会出现数据溢出的现象
}
主要有两个疑问:
- 既然是单通道采样, 为何需要这行代码: GPIOA_ModeCfg( GPIO_Pin_5, GPIO_ModeIN_Floating );
- 如何根据 abcBuff 的值换算出实际电压呢?