21ic问答首页 - HC32L196使用ADC顺序扫描采样,采样值不更新
HC32L196使用ADC顺序扫描采样,采样值不更新
IchBinMarcel2021-08-10
我使用HC32L196上的PB13和PB14 进行AD采样,模式为顺序采样模式,但是发现采样值不更新,一直都是刚上电的值
下载视频
代码如下:
///< 开启ADC/BGR GPIO外设时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
Gpio_SetAnalogMode(GpioPortB, GpioPin13); //PB13 TEMP
Gpio_SetAnalogMode(GpioPortB, GpioPin14); //PB14 HUMI
stc_adc_cfg_t stcAdcCfg;
DDL_ZERO_STRUCT(stcAdcCfg);
Sysctrl_SetPeripheralGate(SysctrlPeripheralAdcBgr, TRUE);
Bgr_BgrEnable(); ///< 开启BGR
///< ADC 初始化配置
stcAdcCfg.enAdcMode = AdcScanMode; ///<采样模式-扫描
stcAdcCfg.enAdcClkDiv = AdcMskClkDiv1; ///<采样分频-1
stcAdcCfg.enAdcSampCycleSel = AdcMskSampCycle8Clk; ///<采样周期数-8
stcAdcCfg.enAdcRefVolSel = AdcMskRefVolSelAVDD; ///<参考电压选择-VCC
stcAdcCfg.enAdcOpBuf = AdcMskBufDisable; ///<OP BUF配置-关
stcAdcCfg.enInRef = AdcMskInRefDisable; ///<内部参考电压使能-关
stcAdcCfg.enAdcAlign = AdcAlignRight; ///<转换结果对齐方式-右
Adc_Init(&stcAdcCfg);
stc_adc_sqr_cfg_t stcAdcSqrCfg;
DDL_ZERO_STRUCT(stcAdcSqrCfg);
///< 顺序扫描模式功能及通道配置
///< 注意:扫描模式下,当配置转换次数为n时,转换通道的配置范围必须为[SQRCH(0)MUX,SQRCH(n-1)MUX]
stcAdcSqrCfg.bSqrDmaTrig = FALSE;
stcAdcSqrCfg.enResultAcc = AdcResultAccEnable;
stcAdcSqrCfg.u8SqrCnt = 2;
Adc_SqrModeCfg(&stcAdcSqrCfg);
Adc_CfgSqrChannel(AdcSQRCH0MUX, AdcExInputCH20); //PB13
Adc_CfgSqrChannel(AdcSQRCH1MUX, AdcExInputCH21); //PB14
///< ADC 中断使能
// Adc_EnableIrq();
// EnableNvic(ADC_DAC_IRQn, IrqLevel3, TRUE);
///< 启动顺序扫描采样
Adc_SQR_Start();
然后用了一个函数来读取AD采样值
void get_ADC_Value(void)
{
if(TRUE == Adc_GetIrqStatus(AdcMskIrqSqr))
{
u32AdcRestult0 = Adc_GetSqrResult(AdcSQRCH0MUX); //获取顺序扫描通道0 TEMP
u32AdcRestult1 = Adc_GetSqrResult(AdcSQRCH1MUX); //获取顺序扫描通道1 HUMI
Adc_ClrIrqStatus(AdcMskIrqSqr);
}
}
有没有大神知道我哪里出错了?
谢谢!!
下载视频
代码如下:
///< 开启ADC/BGR GPIO外设时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
Gpio_SetAnalogMode(GpioPortB, GpioPin13); //PB13 TEMP
Gpio_SetAnalogMode(GpioPortB, GpioPin14); //PB14 HUMI
stc_adc_cfg_t stcAdcCfg;
DDL_ZERO_STRUCT(stcAdcCfg);
Sysctrl_SetPeripheralGate(SysctrlPeripheralAdcBgr, TRUE);
Bgr_BgrEnable(); ///< 开启BGR
///< ADC 初始化配置
stcAdcCfg.enAdcMode = AdcScanMode; ///<采样模式-扫描
stcAdcCfg.enAdcClkDiv = AdcMskClkDiv1; ///<采样分频-1
stcAdcCfg.enAdcSampCycleSel = AdcMskSampCycle8Clk; ///<采样周期数-8
stcAdcCfg.enAdcRefVolSel = AdcMskRefVolSelAVDD; ///<参考电压选择-VCC
stcAdcCfg.enAdcOpBuf = AdcMskBufDisable; ///<OP BUF配置-关
stcAdcCfg.enInRef = AdcMskInRefDisable; ///<内部参考电压使能-关
stcAdcCfg.enAdcAlign = AdcAlignRight; ///<转换结果对齐方式-右
Adc_Init(&stcAdcCfg);
stc_adc_sqr_cfg_t stcAdcSqrCfg;
DDL_ZERO_STRUCT(stcAdcSqrCfg);
///< 顺序扫描模式功能及通道配置
///< 注意:扫描模式下,当配置转换次数为n时,转换通道的配置范围必须为[SQRCH(0)MUX,SQRCH(n-1)MUX]
stcAdcSqrCfg.bSqrDmaTrig = FALSE;
stcAdcSqrCfg.enResultAcc = AdcResultAccEnable;
stcAdcSqrCfg.u8SqrCnt = 2;
Adc_SqrModeCfg(&stcAdcSqrCfg);
Adc_CfgSqrChannel(AdcSQRCH0MUX, AdcExInputCH20); //PB13
Adc_CfgSqrChannel(AdcSQRCH1MUX, AdcExInputCH21); //PB14
///< ADC 中断使能
// Adc_EnableIrq();
// EnableNvic(ADC_DAC_IRQn, IrqLevel3, TRUE);
///< 启动顺序扫描采样
Adc_SQR_Start();
然后用了一个函数来读取AD采样值
void get_ADC_Value(void)
{
if(TRUE == Adc_GetIrqStatus(AdcMskIrqSqr))
{
u32AdcRestult0 = Adc_GetSqrResult(AdcSQRCH0MUX); //获取顺序扫描通道0 TEMP
u32AdcRestult1 = Adc_GetSqrResult(AdcSQRCH1MUX); //获取顺序扫描通道1 HUMI
Adc_ClrIrqStatus(AdcMskIrqSqr);
}
}
有没有大神知道我哪里出错了?
谢谢!!
赞0
评论
2021-08-10
您需要登录后才可以回复 登录 | 注册