打印
[综合信息]

HC32 ADC 中断扫描操作

[复制链接]
570|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stm32jy|  楼主 | 2021-1-16 14:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ADC, HC, ge, rc
 ///< ADC中断服务函数
void Adc_IRQHandler(void)
{   
    if(TRUE == Adc_GetIrqStatus(AdcMskIrqJqr))
    {
        Adc_ClrIrqStatus(AdcMskIrqJqr);
        
        u32AdcRestult0   = Adc_GetJqrResult(AdcJQRCH0MUX);
        u32AdcRestult2   = Adc_GetJqrResult(AdcJQRCH1MUX);
        u32AdcRestult5   = Adc_GetJqrResult(AdcJQRCH2MUX);
        u32AdcRestult0_1 = Adc_GetJqrResult(AdcJQRCH3MUX);
        
        Adc_JQR_Stop();
    }
}


使用特权

评论回复
沙发
stm32jy|  楼主 | 2021-1-16 14:03 | 只看该作者
///< ADC采样端口初始化
void App_AdcPortInit(void)
{   
    ///< 开启ADC/BGR GPIO外设时钟
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
   
    Gpio_SetAnalogMode(GpioPortA, GpioPin0);        //PA00 (AIN0)
    Gpio_SetAnalogMode(GpioPortA, GpioPin2);        //PA02 (AIN2)
    Gpio_SetAnalogMode(GpioPortA, GpioPin5);        //PA05 (AIN5)
}

使用特权

评论回复
板凳
stm32jy|  楼主 | 2021-1-16 14:05 | 只看该作者
///< ADC模块初始化
void App_AdcInit(void)
{
    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);
}

使用特权

评论回复
地板
stm32jy|  楼主 | 2021-1-16 14:16 | 只看该作者
///< ADC插队扫描功能配置
void App_AdcJqrCfg(void)
{
    stc_adc_jqr_cfg_t          stcAdcJqrCfg;
   
    DDL_ZERO_STRUCT(stcAdcJqrCfg);
   
    ///< 插队扫描模式功能及通道配置
    ///< 注意:扫描模式下,当配置转换次数为n时,转换通道的配置范围必须为[JQRCH(0)MUX,JQRCH(n-1)MUX]
    stcAdcJqrCfg.bJqrDmaTrig = FALSE;
    stcAdcJqrCfg.u8JqrCnt    = 4;
    Adc_JqrModeCfg(&stcAdcJqrCfg);

    Adc_CfgJqrChannel(AdcJQRCH0MUX, AdcExInputCH0);
    Adc_CfgJqrChannel(AdcJQRCH1MUX, AdcExInputCH2);
    Adc_CfgJqrChannel(AdcJQRCH2MUX, AdcExInputCH5);
    Adc_CfgJqrChannel(AdcJQRCH3MUX, AdcExInputCH0);
   
    ///< ADC 中断使能
    Adc_EnableIrq();
    EnableNvic(ADC_IRQn, IrqLevel3, TRUE);
   
    ///< 启动插队扫描采样
    Adc_JQR_Start();
}

使用特权

评论回复
5
stm32jy|  楼主 | 2021-1-16 14:23 | 只看该作者
ADC 顺序扫描 功能配置
///< ADC 中断服务程序
void Adc_IRQHandler(void)
{   
    if(TRUE == Adc_GetIrqStatus(AdcMskIrqSqr))
    {
        Adc_ClrIrqStatus(AdcMskIrqSqr);
        
        u32AdcRestult0   = Adc_GetSqrResult(AdcSQRCH0MUX);  //获取顺序扫描通道0
        u32AdcRestult2   = Adc_GetSqrResult(AdcSQRCH1MUX);  //获取顺序扫描通道1
        u32AdcRestult5   = Adc_GetSqrResult(AdcSQRCH2MUX);  //获取顺序扫描通道2
        
        u32AdcRestultAcc = Adc_GetAccResult();
        
        Adc_SQR_Stop();
    }
}

使用特权

评论回复
6
stm32jy|  楼主 | 2021-1-16 15:29 | 只看该作者
///< ADC 采样端口初始化
void App_AdcPortInit(void)
{   
    ///< 开启GPIO外设时钟
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
   
    Gpio_SetAnalogMode(GpioPortA, GpioPin0);        //PA00 (AIN0)
    Gpio_SetAnalogMode(GpioPortA, GpioPin2);        //PA02 (AIN2)
    Gpio_SetAnalogMode(GpioPortA, GpioPin5);        //PA05 (AIN5)
}

///< ADC 模块初始化
void App_AdcInit(void)
{
    stc_adc_cfg_t              stcAdcCfg;

    DDL_ZERO_STRUCT(stcAdcCfg);
   
    ///< 开启ADC/BGR外设时钟
    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);
}

///< ADC 顺序扫描 功能配置
void App_AdcSQRCfg(void)
{
    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    = 3;
    Adc_SqrModeCfg(&stcAdcSqrCfg);

    Adc_CfgSqrChannel(AdcSQRCH0MUX, AdcExInputCH0);
    Adc_CfgSqrChannel(AdcSQRCH1MUX, AdcExInputCH2);
    Adc_CfgSqrChannel(AdcSQRCH2MUX, AdcExInputCH5);
   
    ///< ADC 中断使能
    Adc_EnableIrq();
    EnableNvic(ADC_IRQn, IrqLevel3, TRUE);
   
    ///< 启动顺序扫描采样
    Adc_SQR_Start();

}   

使用特权

评论回复
7
stm32jy|  楼主 | 2021-1-16 16:34 | 只看该作者
int32_t main(void)
{   
   
    ///< ADC 采样端口初始化
    App_AdcPortInit();
   
    ///< ADC 模块初始化
    App_AdcInit();
   
    ///< ADC 顺序扫描 功能配置
    App_AdcSQRCfg();
   
    while(1)
    {        
        ;
    }
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

1118

帖子

4

粉丝