本文为STM32AD7799操作函数。全文共分为二部分,第一部分为.c文件包含AD7799的配置与操作原函数。第二部分为.h文件,方便其它文件对AD7799操作函数进行调用。代码亲测可用,只要在主函数中引用ADC_Auto_Conversion();便可得到AD转换结果。第一部分:.c文件操作函数************************************************************************************@file~/USER/TM7711.c*@authorTianYu*@versionV0.9*@date29-Aug-2011*@briefThisfilecontainsalloftheinitializationfunctionforthisproject*************************************************************************************///DefinednecessaryheadfileandCONSTflag#includestm32f10x_conf.h#includestm32f10x.h#includeAD7799.h#includemain.hADC_VAL_DefAD_Value[AD7799_CHANN_USE];//各通道(含所有芯片)的ADC值,经数字滤波后的ADC值ADC_RUN_DefAD_Work_Info[AD7799_CHANN_USE];//各通道(含所有芯片)的工作信息u8ADC_Chn[AD7799_PCS]={0};//各芯片ADC转换通道号:0~2#defineSPI_PULSE_WIDE20//SPI模拟通信中,时钟信号的延时/********************************************************************************FunctionName:auto_gain*Description:根据采样的AD值,自动调整AD7799的增益*Input:chn-ADC的采样通道(AD7799_CHANN_USE以内)*Output:全局变量AD_Work_Info[chn].SetGain,其值为0~7,对应增益为1~128*Return:None*算法说明:在增益未达最大和最小时,自动控制增益后的AD值在%40~80%之间*******************************************************************************/voidauto_gain(u8chn){u32xd,xcv;chn=chn&0x03;if(AD_Work_Info[chn].CurrValue0)xcv=-AD_Work_Info[chn].CurrValue;elsexcv=AD_Work_Info[chn].CurrValue;if(xcv(REF_FULL_VAL*81/100))//大于81%,则在增益系数值不为0时,增益系数-1(即增益降低2倍){if(AD_Work_Info[chn].CurrGain){AD_Work_Info[chn].SetGain=AD_Work_Info[chn].CurrGain-1;}}elseif(xcv(REF_FULL_VAL*39/100))//小于39%时,直接把增益增大N倍,使其达到50%以内。{xd=REF_FULL_VAL/xcv;xd=xd/2;if(xd){xd--;}AD_Work_Info[chn].SetGain=AD_Work_Info[chn].CurrGain+xd;if(AD_Work_Info[chn].SetGain=7)//限制最大增益系数为7,即128倍{AD_Work_Info[chn].SetGain=7;}}}/********************************************************************************FunctionName:ADC7799_Init*Description:AD7799初始化:GPIO,配置启动,变量清0*Input:None*Output:None*Return:None*******************************************************************************/voidADC7799_Init(void){u8i;for(i=0;iAD7799_CHANN_USE;i++){AD_Value[i].Status=0;AD_Value[i].Value=0;AD_Work_Info[i].RefMode=0;AD_Work_Info[i].SetGain=0;AD_Work_Info[i].CurrGain=0;AD_Work_Info[i].CurrValue=0;}for(i=0;iAD7799_PCS;i++){AD7799_CS_Pin_Configuration(i);AD7799_SCLK_Pin_Configuration(i);AD7799_DIN_Pin_Configuration(i);AD7799_DOUT_Pin_Configuration(i);ADC_Chn[i]=0;Config_AD7799(i,ADC_Chn[i]);}}/********************************************************************************FunctionName:AD7799_SCLK_Pin_Configuration*Description:配置MCU与各AD7799的CS连接的引脚(OUT)*Input:chipn-AD7799芯片编号:0~(AD7799_PCS-1),最大3*Output:None*Return:None*******************************************************************************/voidAD7799_CS_Pin_Configuration(u8chipn){GPIO_InitTypeDefGPIO_InitStructure;GPIO_TypeDef*AD7799_PORT[4]={ADC1_CS_PORT,ADC2_CS_PORT,ADC3_CS_PORT,ADC4_CS_PORT};//端口uint16_tAD7799_PINx[4]={ADC1_CS_PIN,ADC2_CS_PIN,ADC3_CS_PIN,ADC4_CS_PIN};//Pinif(AD7799_PORT[chipn]&&(chipnAD7799_PCS))//端口和芯片有效,才对端口进行配置{GPIO_InitStructure.GPIO_Pin=AD7799_PINx[chipn];GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_Init(AD7799_PORT[chipn],&GPIO_InitStructure);}}/********************************************************************************FunctionName:AD7799_SCLK_Pin_Configuration*Description:配置MCU与各AD7799的SCLK连接的引脚(OUT)*Input:chipn-AD7799芯片编号:0~(AD7799_PCS-1),最大3*Output:None*Return:None*******************************************************************************/voidAD7799_SCLK_Pin_Configuration(u8chipn){GPIO_InitTypeDefGPIO_InitStructure;GPIO_TypeDef*AD7799_PORT[4]={ADC1_SCLK_PORT,ADC2_SCLK_PORT,ADC3_SCLK_PORT,ADC4_SCLK_PORT};//端口uint16_tAD7799_PINx[4]={ADC1_SCLK_PIN,ADC2_SCLK_PIN,ADC3_SCLK_PIN,ADC4_SCLK_PIN};//Pinif(AD7799_PORT[chipn]&&(chipnAD7799_PCS))//端口和芯片有效,才对端口进行配置{GPIO_InitStructure.GPIO_Pin=AD7799_PINx[chipn];GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_Init(AD7799_PORT[chipn],&GPIO_InitStructure);}}/********************************************************************************FunctionName:AD7799_SCLK_Pin_Configuration*Description:配置MCU与各AD7799的DIN连接的引脚(OUT)*Input:chipn-AD7799芯片编号:0~(AD7799_PCS-1),最大3*Output:None*Return:None*******************************************************************************/voidAD7799_DIN_Pin_Configuration(u8chipn){GPIO_InitTypeDefGPIO_InitStructure;GPIO_TypeDef*AD7799_PORT[4]={ADC1_DIN_PORT,ADC2_DIN_PORT,ADC3_DIN_PORT,ADC4_DIN_PORT};//端口uint16_tAD7799_PINx[4]={ADC1_DIN_PIN,ADC2_DIN_PIN,ADC3_DIN_PIN,ADC4_DIN_PIN};//Pinif(AD7799_PORT[chipn]&&(chipnAD7799_PCS))//端口和芯片有效,才对端口进行配置{GPIO_InitStructure.GPIO_Pin=AD7799_PINx[chipn];GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_Init(AD7799_PORT[chipn],&GPIO_InitStructure);}}/********************************************************************************FunctionName:AD7799_SCLK_Pin_Configuration*Description:配置MCU与各AD7799的DOUT连接的引脚(IN)*Input:chipn-AD7799芯片编号:0~(AD7799_PCS-1),