参考了CH573F官方的ADC示例:
/* 单通道采样:选择adc通道0做采样,对应 PA4引脚, 带数据校准功能 */ PRINT( "\n2.Single channel sampling...\n" ); GPIOA_ModeCfg( GPIO_Pin_4, GPIO_ModeIN_Floating ); 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[i] = ADC_ExcutSingleConver() + RoughCalib_Value; // 连续采样20次 } for( i = 0; i < 20; i++ ) { PRINT( "%d \n", abcBuff[i] ); // 注意:由于ADC内部偏差的存在,当采样电压在所选增益范围极限附近的时候,可能会出现数据溢出的现象 }
主要有两个疑问:
既然是单通道采样, 为何需要这行代码: GPIOA_ModeCfg( GPIO_Pin_5, GPIO_ModeIN_Floating );
如何根据 abcBuff[i] 的值换算出实际电压呢?
热门产品 :
CH585: 集成高速USB和NFC的蓝牙MCU