-
【求助】HC32L110C6PA使用ADC电压数据采集
用万用表测量这个引脚是0.65v,但串口接收到AD值为459,电压是0.33v。然后我更改了基准电压,但AD仍为409不变,到底是什么原因 各位大佬救我,求路过不平拔刀相助啊 #include "adc.h" #include "gpio.h" #include "Serial.h" static uint32_t u32AdcResultAcc; float Average; float Voltage; void AdcContIrqCallback(void) { Adc_GetAccResult(&u32AdcResultAcc); Adc_ClrAccResult(); Average = (float)u32AdcResultAcc/10; Voltage = Average / 4095.0f * 3.3f ; char adcStr[64]; sprintf(adcStr, "AD Raw: %.2f, Voltage: %.3fV\r\n", Average, Voltage); Uart_SendString((uint8_t*)adcStr); Adc_ClrContIrqState(); } void AdcRegIrqCallback(void) { } void AdcHhtIrqCallback(void) { } void AdcLltIrqCallback(void) { } en_result_t AD_Init(void) { stc_adc_cfg_t stcAdcCfg; stc_adc_cont_cfg_t stcAdcContCfg; stc_adc_irq_t stcAdcIrq; stc_adc_irq_calbakfn_pt_t stcAdcIrqCalbaks; DDL_ZERO_STRUCT(stcAdcCfg); DDL_ZERO_STRUCT(stcAdcContCfg); DDL_ZERO_STRUCT(stcAdcIrq); DDL_ZERO_STRUCT(stcAdcIrqCalbaks); Clk_SwitchTo(ClkRCL); Clk_SetRCHFreq(ClkFreq24Mhz); Clk_SwitchTo(ClkRCH); Clk_SetPeripheralGate(ClkPeripheralGpio, TRUE); //GPIO 外设时钟使能 if (Ok != Clk_SetPeripheralGate(ClkPeripheralAdcBgr, TRUE)) //ADCBGR 外设时钟使能 { return Error; } Gpio_SetAnalog(3, 2, TRUE);// 设为模拟输入 Gpio_InitIOExt(3,2,GpioDirIn,FALSE,FALSE,0,FALSE); //ADC配置 M0P_BGR->CR_f.BGR_EN = 0x1u; //BGR必须使能 M0P_BGR->CR_f.TS_EN = 0x0u; //内置温度传感器,视使用需求 delay1ms(15); stcAdcCfg.enAdcOpMode = AdcContMode; //连续采样模式 stcAdcCfg.enAdcClkSel = AdcClkSysTDiv1; //PCLK stcAdcCfg.enAdcSampTimeSel = AdcSampTime8Clk; //8个采样时钟 // stcAdcCfg.enAdcRefVolSel = RefVolSelInBgr2p5; //参考电压:内部2.5V(avdd>3V,SPS<=200kHz) stcAdcCfg.enAdcRefVolSel = RefVolSelAVDD; //参考电压:AVDD stcAdcCfg.bAdcInBufEn = FALSE; //电压跟随器如果使能,SPS采样速率 <=200K stcAdcCfg.enAdcTrig0Sel = AdcTrigDisable; //ADC转换自动触发设置 stcAdcCfg.enAdcTrig1Sel = AdcTrigDisable; Adc_Init(&stcAdcCfg); delay1ms(100); stcAdcIrq.bAdcIrq = TRUE; //转换完成中断函数入口配置使能 stcAdcIrq.bAdcRegCmp = FALSE; stcAdcIrq.bAdcHhtCmp = FALSE; stcAdcIrq.bAdcLltCmp = FALSE; stcAdcIrqCalbaks.pfnAdcContIrq = AdcContIrqCallback; //转换完成中断入口函数 stcAdcIrqCalbaks.pfnAdcRegIrq = AdcRegIrqCallback; stcAdcIrqCalbaks.pfnAdcHhtIrq = AdcHhtIrqCallback; stcAdcIrqCalbaks.pfnAdcLltIrq = AdcLltIrqCallback; Adc_ConfigIrq(&stcAdcIrq, &stcAdcIrqCalbaks); //转换中断入口函数配置 Adc_EnableIrq(); //中断使能 NVIC_ClearPendingIRQ(ADC_IRQn); // 清除中断挂起标志 NVIC_SetPriority(ADC_IRQn, 1); // 设置中断优先级 NVIC_EnableIRQ(ADC_IRQn); // 开启CPU的ADC中断接收通道 Adc_CmpCfg(&stcAdcIrq); //结果比较中断使能/禁止配置 stcAdcContCfg.enAdcContModeCh = AdcExInputCH2; //通道2 P32 stcAdcContCfg.u8AdcSampCnt = 0x09u; //连续累加次数(次数 = 0x09+1) stcAdcContCfg.bAdcResultAccEn = TRUE; //累加使能 Adc_ConfigContMode(&stcAdcCfg, &stcAdcContCfg); Adc_Enable(); return Ok; }
289浏览量 2回复量 关注量

问答