STM32G070 CubeMX配置多通道/单通道ADC+DMA流程 LL库

基础配置不再赘述,时钟这些根据硬件来配置
多通道ADC+DMA配置图:
在这里插入图片描述
在这里插入图片描述
程序配置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
调试查看内存数据,硬件上将PA1接到GND,PA2接到3V3
在这里插入图片描述
采集的数据会循环覆盖内存
问题:代码里先初始化ADC_IN1,再初始化的ADC_IN2,但是内存里面的数据却先是ADC_IN2数据,再是ADC_IN1数据

### STM32CubeMX L4 ADC多通道 LL 配置 示例 在使用STM32CubeMX配置L4系列微控制器的ADC多通道时,LL(Low Layer)提供了更底层的访问方式,能够实现更高性能和更灵活的控制[^3]。以下是一个完整的示例,展示如何通过LL配置ADC进行多通道采样。 #### 1. 初始化ADC 初始化过程包括设置ADC的时钟源、分辨率、数据对齐方式等参数。以下代码展示了如何使用LL初始化ADC模块: ```c // 启用ADC时钟 LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_ADC); // 配置ADC公共寄存器 LL_ADC_SetCommonPathInternalRegul(&ADC1_COMMON, LL_ADC_PATH_INTERNAL_NONE); // 配置ADC分辨率 LL_ADC_SetResolution(ADC1, LL_ADC_RESOLUTION_12B); // 设置数据对齐方式为右对齐 LL_ADC_SetDataAlignment(ADC1, LL_ADC_DATA_ALIGN_RIGHT); ``` #### 2. 配置常规通道 通过LL可以配置多个输入通道,并指定每个通道的采样时间。以下代码展示了如何配置两个通道(例如通道1和通道2): ```c // 配置通道1的采样时间为1.5个ADC时钟周期 LL_ADC_SetChannelSamplingTime(ADC1, LL_ADC_CHANNEL_1, LL_ADC_SAMPLINGTIME_1CYCLE_5); // 配置通道2的采样时间为1.5个ADC时钟周期 LL_ADC_SetChannelSamplingTime(ADC1, LL_ADC_CHANNEL_2, LL_ADC_SAMPLINGTIME_1CYCLE_5); // 启用通道1和通道2 LL_ADC_EnableChannel(ADC1, LL_ADC_CHANNEL_1); LL_ADC_EnableChannel(ADC1, LL_ADC_CHANNEL_2); ``` #### 3. 启动ADC转换 启动ADC转换可以通过软件触发或外部触发等方式完成。以下代码展示了如何通过软件触发启动单次转换模式: ```c // 设置ADC工作在单次转换模式 LL_ADC_REG_SetSequencerLength(ADC1, LL_ADC_SEQ_SCAN_DISABLE); // 禁用扫描模式 LL_ADC_REG_SetTriggerSource(ADC1, LL_ADC_REG_TRIG_SOFTWARE); // 使用软件触发 // 启动ADC转换 LL_ADC_StartConversionSWStart(ADC1); ``` #### 4. 读取转换结果 在转换完成后,可以通过轮询的方式读取转换结果。以下代码展示了如何读取通道1和通道2的转换值: ```c // 等待转换完成 while (!LL_ADC_IsActiveFlag_EOS(ADC1)) {} // 清除转换完成标志 LL_ADC_ClearFlag_EOS(ADC1); // 读取通道1的转换结果 uint32_t adcValue1 = LL_ADC_REG_ReadConversionData32(ADC1); // 读取通道2的转换结果 uint32_t adcValue2 = LL_ADC_REG_ReadConversionData32(ADC1); ``` #### 5. 连续转换模式 如果需要连续采样多个通道,可以启用连续转换模式并配置扫描顺序。以下代码展示了如何启用连续转换模式: ```c // 设置ADC工作在连续转换模式 LL_ADC_REG_SetSequencerLength(ADC1, LL_ADC_SEQ_SCAN_ENABLE_2RANKS); // 启用2个通道的扫描 LL_ADC_REG_SetTriggerSource(ADC1, LL_ADC_REG_TRIG_SOFTWARE); // 使用软件触发 // 启用连续转换模式 LL_ADC_REG_SetContinuousMode(ADC1, LL_ADC_REG_CONV_CONTINUOUS); // 启动ADC转换 LL_ADC_StartConversionSWStart(ADC1); ``` ### 注意事项 - 在使用LL时,需确保正确配置时钟树以满足ADC的时钟要求[^3]。 - 如果使用DMA传输数据,需要额外配置DMA控制器并与ADC外设关联[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值