杰发科技AC7840——ADC简介(1)_双路ADC同时使用

0. 简介

1. 特性

2. 双路ADC

Sample里面没有双路的,以为那个规则组只有一个通道,看了外设寄存器才发现,原来他的通道是双路的。

注意1: ADC硬件引脚的配置

注意2: 规则组长度设置和

RSEQ序列号和CH通道号组合应该就对应了转换顺序,如下图所示配置

cpp 复制代码
 ADC_ConfigChannel(ADC_INDEX, ADC_RSEQ_0, ADC_CH_9);
 ADC_ConfigChannel(ADC_INDEX, ADC_RSEQ_1, ADC_CH_8);
 ADC_ConfigChannel(ADC_INDEX, ADC_RSEQ_2, ADC_CH_12);
 ADC_ConfigChannel(ADC_INDEX, ADC_RSEQ_3, ADC_CH_1);
 ADC_ConfigChannel(ADC_INDEX, ADC_RSEQ_4, ADC_CH_5);
 ADC_ConfigChannel(ADC_INDEX, ADC_RSEQ_5, ADC_CH_4);
 ADC_ConfigChannel(ADC_INDEX, ADC_RSEQ_6, ADC_CH_7);
 ADC_ConfigChannel(ADC_INDEX, ADC_ISEQ_0, ADC_CH_12);
 ADC_ConfigChannel(ADC_INDEX, ADC_ISEQ_1, ADC_CH_7);
 ADC_ConfigChannel(ADC_INDEX, ADC_ISEQ_2, ADC_CH_13);

代码如下:

cpp 复制代码
void ADC_Init(void)
{
    adc_converter_config_t adcConfig;

    /*! ADC输入端口(电位器)配置*/
    GPIO_DRV_SetMuxModeSel(VR1_PORT, VR1_PIN, PORT_PIN_DISABLED); /*! 电位器VR1*/
    GPIO_DRV_SetMuxModeSel(VR2_PORT, VR2_PIN, PORT_PIN_DISABLED); /*! 电位器VR2*/
    GPIO_DRV_SetMuxModeSel(PORTD, 2, PORT_PIN_DISABLED);          /*! 电位器VR2*/

    /*! ADC配置
    配置ADC为12位分辨率,工作模式为MODE3规则组扫描+注入组扫描模式多通道单次转换,规则组长度为4。
    每触发一次进行一次ADC转换,每次转换规则组中的4个通道。
    */
    ADC_DRV_Init(ADC_INDEX);
    ADC_DRV_InitConverterStruct(&adcConfig);
    adcConfig.clockDivide = ADC_CLK_DIVIDE_6;        /*! ADC时钟分频。ADC时钟源选择在时钟初始化里配置,此例程选择为SPLLDIV2_CLK,频率为60MHz*/
    adcConfig.resolution = ADC_RESOLUTION_12BIT;     /*! ADC分辨率设置*/
    adcConfig.regularTrigger = ADC_TRIGGER_INTERNAL; /*! 规则组触发源类型选择*/
    adcConfig.injectTrigger = ADC_TRIGGER_INTERNAL;  /*! 注入组触发源类型选择*/
    adcConfig.dmaEnable = false;                     /*! DMA使能位*/
    adcConfig.voltageRef = ADC_VOLTAGEREF_VREF;      /*! ADC参考电压源选择,VREF/VDDA*/
    adcConfig.scanModeEn = true;                     /*! 工作模式配置:扫描模式使能位,多通道时需要使能扫描模式,单个通道时不需要使能扫描*/
    adcConfig.continuousModeEn = false;              /*! 工作模式配置:连续模式使能位,1:触发后可连续转换,0:触发一次只转换一次,转换完成后停止*/
    adcConfig.regularDiscontinuousModeEn = false;    /*! 工作模式配置:规则组不连续模式使能位*/
    adcConfig.injectDiscontinuousModeEn = false;     /*! 工作模式配置:注入组不连续模式使能位*/
    adcConfig.injectAutoModeEn = false;              /*! 工作模式配置:自动注入模式使能位*/
    adcConfig.intervalModeEn = false;                /*! 工作模式配置:间隔模式使能位*/
    adcConfig.regularDiscontinuousNum = 0;           /*! 规则组子组长度 (用于mode7)*/
    adcConfig.regularSequenceLength = 4;             /*! 规则组长度设置*/
    adcConfig.injectSequenceLength = 0;              /*! 注入组长度设置*/
    adcConfig.powerEn = true;                        /*! ADC上电*/
    ADC_DRV_ConfigConverter(ADC_INDEX, &adcConfig);  /*! 初始化ADC配置*/

    /*! ADC通道配置*/
    ADC_ConfigChannel(ADC_INDEX, ADC_RSEQ_0, VR1_ADC_CH);     /*! 电位器VR1对应通道*/
    ADC_ConfigChannel(ADC_INDEX, ADC_RSEQ_1, VR2_ADC_CH);     /*! 电位器VR2对应通道*/
    ADC_ConfigChannel(ADC_INDEX, ADC_RSEQ_2, ADC_CH_TSENSOR); /*! 内部温度传感器通道*/
    ADC_ConfigChannel(ADC_INDEX, ADC_RSEQ_3, ADC_CH_SUPPLY);  /*! 内部供电电压通道*/

    ADC_DRV_Init(ADC1_INDEX);
    ADC_DRV_InitConverterStruct(&adcConfig);
    adcConfig.clockDivide = ADC_CLK_DIVIDE_6;            /*! ADC时钟分频。ADC时钟源选择在时钟初始化里配置,此例程选择为SPLLDIV2_CLK,频率为60MHz*/
    adcConfig.resolution = ADC_RESOLUTION_12BIT;         /*! ADC分辨率设置*/
    adcConfig.regularTrigger = ADC_TRIGGER_INTERNAL;     /*! 规则组触发源类型选择*/
    adcConfig.injectTrigger = ADC_TRIGGER_INTERNAL;      /*! 注入组触发源类型选择*/
    adcConfig.dmaEnable = false;                         /*! DMA使能位*/
    adcConfig.voltageRef = ADC_VOLTAGEREF_VREF;          /*! ADC参考电压源选择,VREF/VDDA*/
    adcConfig.scanModeEn = true;                         /*! 工作模式配置:扫描模式使能位,多通道时需要使能扫描模式,单个通道时不需要使能扫描*/
    adcConfig.continuousModeEn = false;                  /*! 工作模式配置:连续模式使能位,1:触发后可连续转换,0:触发一次只转换一次,转换完成后停止*/
    adcConfig.regularDiscontinuousModeEn = false;        /*! 工作模式配置:规则组不连续模式使能位*/
    adcConfig.injectDiscontinuousModeEn = false;         /*! 工作模式配置:注入组不连续模式使能位*/
    adcConfig.injectAutoModeEn = false;                  /*! 工作模式配置:自动注入模式使能位*/
    adcConfig.intervalModeEn = false;                    /*! 工作模式配置:间隔模式使能位*/
    adcConfig.regularDiscontinuousNum = 0;               /*! 规则组子组长度 (用于mode7)*/
    adcConfig.regularSequenceLength = 1;                 /*! 规则组长度设置*/
    adcConfig.injectSequenceLength = 0;                  /*! 注入组长度设置*/
    adcConfig.powerEn = true;                            /*! ADC上电*/
    ADC_DRV_ConfigConverter(ADC1_INDEX, &adcConfig);     /*! 初始化ADC配置*/
    ADC_ConfigChannel(ADC1_INDEX, ADC_RSEQ_0, ADC_CH_2); /*! 内部供电电压通道*/
}
相关推荐
GeekArch8 小时前
第24讲:Vibe模式代码风格控制——适配Keil/STM32工程规范
人工智能·stm32·单片机·嵌入式硬件·mcu·决策树·ai编程
sramdram2 天前
低功耗MCU微控制器在动态血糖仪(CGM)中的应用方案
单片机·嵌入式硬件·mcu·mcu微控制器
GeekArch5 天前
第8讲:裸机单片机项目——Vibe快速迭代的最优边界
c语言·stm32·单片机·嵌入式硬件·mcu·物联网·ai编程
GeekArch6 天前
第5讲:嵌入式场景二范式决策树:什么情况快写、什么情况严写
人工智能·stm32·单片机·mcu·物联网·决策树·机器学习
不想努力只想躺平的菜鸟ing7 天前
2. UART与TTL UART、CMOS UART、RS232、RS422、RS485、tod
mcu
OIDCAT9 天前
国产USB转千兆网卡芯片CH398 VLAN应用
网络·嵌入式硬件·国产·usb转千兆网卡
腾讯数据架构师9 天前
CubeStudio 平台简介:国产化云原生一站式开源人工智能平台(MLOps / 大模型全链路)
人工智能·云原生·开源·mlops·国产·maas·机器学习平台
wuyk55510 天前
38.什么是C语言?从语法到工程落地的工程师视角解读
c语言·开发语言·stm32·单片机·mcu·51单片机
MounRiver_Studio13 天前
RISC-V IDE MRS2调试秘籍(三):通过栈帧可视化模块定位栈溢出、栈内存非法篡改等运行时错误
mcu·risc-v·代码调试
MounRiver_Studio13 天前
RISC-V IDE MRS2调试秘籍(一):通过Memory内存导出对比,锁定隐性内存异常代码
mcu·调试技巧·risc-v·代码调试