/**********************************?(C)?COPYRIGHT?******************************* *?File?Name??????????:?Main.c *?Author?????????????:?WCH *?Version????????????:?V1.0 *?Date???????????????:?2018/12/15 *?Description? ?:?adc采样示例,包括温度检测、单通道检测、差分通道检测、TouchKey检测、中断方式采样。 *******************************************************************************/ #include?"CH57x_common.h" UINT16?abcBuff[40]; volatile?UINT8??adclen; void?DebugInit(void) { ????GPIOA_SetBits(GPIO_Pin_9); ????GPIOA_ModeCfg(GPIO_Pin_8,?GPIO_ModeIN_PU); ????GPIOA_ModeCfg(GPIO_Pin_9,?GPIO_ModeOut_PP_5mA); ????UART1_DefInit(); } int?main() { ????UINT8?i; ????signed?short??RoughCalib_Value=0; //?ADC粗调偏差值 ???? /*?配置串口调试?*/??? ????DebugInit(); ????PRINT(?"Start?@ChipID=%02X\n",?R8_CHIP_ID?); /*?单通道采样:选择adc通道9做采样,对应?PA0引脚,?带数据校准功能?*/??? ????PRINT(?"\n2.Single?channel?sampling...\n"); ????GPIOA_ModeCfg(GPIO_Pin_0,?GPIO_ModeIN_Floating); ????ADC_ExtSingleChSampInit(?SampleFreq_3_2,?ADC_PGA_1_2); ???? /*? ????注意:数据校准包括?粗调和细调: ????ADC_DataCalib_Rough()?是粗调函数,调用前需保证PA5引脚配置浮空输入模式,外部没有电压信号,在ADC初始化之后调用,一般调用一次,除非更改了ADC模式(增益改变) ????ADC_DataCalib_Fine()?是细调函数,对于粗调过的数据进行拟合算法运算,得到更精确数据 */???? ????GPIOA_ModeCfg(GPIO_Pin_5,?GPIO_ModeIN_Floating); ????RoughCalib_Value?=?ADC_DataCalib_Rough();??//?用于计算ADC内部偏差,记录到全局变量?RoughCalib_Value中?? ????PRINT("=%d?\n",?RoughCalib_Value);? ????while(1) {???? ????int?sum=0; ADC_ChannelCfg(?9?);???????? for(i=0;?i<20;?i++) { abcBuff[i]?=?ADC_ExcutSingleConver()?+?RoughCalib_Value;??????//?连续采样20次 ADC_DataCalib_Fine(?&abcBuff[i],?ADC_PGA_1_2); sum?+=?abcBuff[i]; } printf("ADC值:%d\r\n",sum/20); } }
热门产品 :
CH641: PD及无线充电专用MCU