在STM32L071上实现ADC通道切换,可以通过以下步骤配置:
1. 硬件配置
- 确认ADC通道对应的GPIO引脚(如PA0对应ADC_IN0,PA1对应ADC_IN1等)。
- 将目标引脚配置为模拟输入模式(通过GPIO_MODER寄存器配置)。
2. ADC基础配置
// 启用ADC时钟
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
// 校准ADC
ADC1->CR &= ~ADC_CR_ADEN; // 关闭ADC
ADC1->CR |= ADC_CR_ADCAL; // 启动校准
while (ADC1->CR & ADC_CR_ADCAL); // 等待校准完成
// 使能ADC
ADC1->CR |= ADC_CR_ADEN;
while (!(ADC1->ISR & ADC_ISR_ADRDY)); // 等待ADC就绪
3. 单通道轮询切换(手动切换)
// 配置单通道(示例:通道0)
ADC1->CHSELR = ADC_CHSELR_CHSEL0; // 选择通道0
ADC1->CR |= ADC_CR_ADSTART; // 启动转换
while (!(ADC1->ISR & ADC_ISR_EOC)); // 等待转换完成
uint16_t value = ADC1->DR; // 读取结果
// 切换到通道1
ADC1->CHSELR = ADC_CHSELR_CHSEL1; // 修改通道选择
ADC1->CR |= ADC_CR_ADSTART; // 再次启动转换
4. 多通道扫描模式(自动切换)
// 启用扫描模式和多通道转换
ADC1->CFGR1 |= ADC_CFGR1_SCANDIR; // 扫描方向(可选)
ADC1->CHSELR = ADC_CHSELR_CHSEL0 | ADC_CHSELR_CHSEL1; // 启用通道0和1
ADC1->CFGR1 |= ADC_CFGR1_CONT; // 连续转换模式
// 启动转换
ADC1->CR |= ADC_CR_ADSTART;
// 通过DMA或轮询方式读取结果(推荐DMA)
5. 使用DMA传输多通道数据
// 配置DMA(通道需根据具体型号匹配)
DMA1_Channel1->CCR &= ~DMA_CCR_EN; // 关闭DMA
DMA1_Channel1->CPAR = (uint32_t)&(ADC1->DR); // 外设地址
DMA1_Channel1->CMAR = (uint32_t)adc_buffer; // 内存地址
DMA1_Channel1->CNDTR = 2; // 传输2个数据(通道0和1)
DMA1_Channel1->CCR = DMA_CCR_MINC | DMA_CCR_PSIZE_0 | DMA_CCR_MSIZE_0 | DMA_CCR_CIRC;
DMA1_Channel1->CCR |= DMA_CCR_EN; // 启用DMA
ADC1->CFGR1 |= ADC_CFGR1_DMAEN; // 启用ADC的DMA
ADC1->CR |= ADC_CR_ADSTART; // 启动转换
关键注意事项:
- 时钟配置:确保ADC时钟不超过STM32L071的14 MHz限制。
- 采样时间:通过
ADC1->SMPR寄存器调整采样时间(较弱的输入信号需要更长时间)。 - 中断处理:若使用中断,清除标志位
ADC->ISR并启用对应中断源。 - 低功耗优化:在单次转换后进入Stop模式,通过ADC唤醒节省功耗。
根据需求选择轮询、中断或DMA方式,扫描模式配合DMA适合高效的多通道采集场景。
STM32L071 VDD为2.5时无法工作
单片机STM32L071,VDD为2.5时无法工作,仿真器ST LINK 里也无法找到器件。程序拷的例程的配置,使用内部MSI,2MHz;一个LED灯闪烁,VDD是3.3V工作是好的,换成2.5V就不行了。我的板子是电池供电的,STM32L071不是1.65~3.6V都可以工作吗?有人遇到过吗?
cmh8
2019-03-28 08:03:55
请问STM32L071有标准库开发吗?
我第一次开发低功耗的产品,打算采用 STM32L071开发,但是浏览了官网好像只有 HAL库可以用?习惯了 STD库开发 想咨询下LO71只能用 HAL库开发吗?
sfafa
2019-01-28 06:49:07
如何实现ST95HF / STM32L071点对点连接?
大家好, 我正在使用ST95HF和我的STM32L071来读取NFC卡(标签类型检测,UID ..),它完美无缺。 现在我必须在我的程序中编写一个新模式,包括将我的产品与带有P2P的手机连接。您是
60user142
2019-07-29 07:48:22
STM32L071串口与BC260Y模块通讯异常
现在我手上有个项目是采用STM32L071与BC260Y串口通讯,经过反复测试发现,每次都是能通过串口唤醒模块,但是不能每次得到模块的AT指令的反馈,造成不能每次心跳都有数据上报平台,有没有大咔有类似的经验,分享一下,谢谢了.
awell
2023-06-07 09:14:00
即使在进入引导加载程序模式后,也无法使用USART刷新STM32L071板要怎么处理?
我正在为我的产品使用 STM32L071 微控制器。我们计划使用 USART 通信来刷新代码。MCU 的 USART1 使用 USB 转 UART 转换器连接到嵌入式系统(Nvidia Xavier
柱子图宁
2023-02-01 07:20:22
DS10690_STM32L071xx的数据手册
【STM32L071xx】本文档是关于基于ARM® Cortex®-M0+ 内核的超低功耗32位单片机STM32L071xx的数据手册, 介绍了它的主要外设资源和电特性参数:高达192KB闪存,20KB SRAM,6KB EEPROM, ADC
洒下墨色
2022-11-25 06:11:09
STM32L071CZY6 电子元器件 ST 封装WLCSP-49
2022-08-03 15:35:59
STM32L0时钟系统简介
软件:STM32CubeMX,MDK-ARM硬件:蓝桥杯物联网Lora开发板,板载芯片STM32L071一、STM32L0时钟系统简介1、LSI RC,低速内部时钟(RC振荡器),是看门狗
自我清欢
2021-08-06 09:22:26
为什么无法在EWARM上初始化STM32G071RB中的ADC1?
我正在使用 Nucle-G071 调试 STM32G071RB。我使用的代码是由 STM32CubeMX 生成的,我尝试将断点设置为“static void MX_ADC1_Init”中的变量,但它
jinheng
2023-01-12 07:49:39
STM32G071x8/STM32G071xB的数据手册
【STM32G071x8,STM32G071xB】本文档是关于主流产品线32位Arm Cortex-M0+单片机STM32G071x8,STM32G071xB的数据手册, 介绍了它的主要外设资源和电
打马过草原
2022-11-25 06:43:45
DS10009_STM32F071x8,STM32F071xB的数据手册
【STM32F071xx】本文档是关于ARM® Cortex®-M0内核的主流型单片机STM32F071x8,STM32F071xB的数据手册, 介绍了它的主要外设资源和电特性参数,外设资源包括
bertvwang
2022-11-25 07:56:03
STM32L0之ADC采集
STM32L0系列之ADC采集前言使用芯片:STM32L051C8T6软件平台:KEIL V5、STM32CubeL0库函数:HAL一、原理图本文介绍在STM32上使用ADC1的第1通道,对电池电量
efwedfd
2021-08-11 07:55:53
奇怪的ADC通道切换错误
你好,我正在尝试用PIC16F690为RPi上的一个项目实现一个并行的8位ADC设备。我有这个代码:当我在两个通道之间切换时,它工作得很好,一切正常。但是我需要4个频道。因此,当我使用ADC的4个
xiaohongchen615
2019-09-30 07:41:55
STM32G071RB上的ADC读数问题求解
嘿!我的 STM32G071RB 上的 ADC 读数有问题。我目前正在使用 2 个 ACD-s 进行测试。VREF 设置为 2.048 V。在 1 个 ADC 上,我直接从外部 PSU 提供
study875
2022-12-02 07:29:44
STM32L552xx系列微控制器中ADC的复用通道是什么意思
我坚持对 ADC 实现的理解。请帮我得到这个。在STM32L5xx参考手册(RM0438)中,ADC的主要特性如下(RM0438 Rev7中第685页)" 最多 2 个 ADC 可以在
我不吃鱼
2022-12-23 09:04:57
STM32L011E4的R_ADC标准通道是否具有更高的阻抗
根据数据表,STM32L011E4 的 R_ADC 最大为 1kOhm。这是否也适用于标准通道,或者标准通道是否具有更高的阻抗?带有 R_AIN_max 的表格在这方面并不是很有帮助,因为我的计算结果与标准或快速通道都不匹配。AN2834 提到了ADC 采样估计工具。有可能获得吗?
Shype
2022-12-02 07:13:50
用STM32L071C8Tx做低功耗STOP模式无法使用Debug是为什么?
使用STM32L071C8Tx芯片做低功耗STOP模式无法使用Debug是为什么?
nhcp
2021-11-16 09:36:57
没有VREF+ 输入的STM32G071设备的参考是什么?
正在为 STM32G071GBUxN 制作原理图,它没有 VREF+ 引脚,并且在 CubeMX 中我没有找到该设备的任何参考设置。那么这个设备的 ADC/DAC 参考值是多少,我该如何进行调整呢?
h1654155957.9520
2022-12-05 06:57:42
STM32-ADC单通道与多通道采集
STM32-ADC单通道与多通道采集单通道配置多通道配置单通道配置单通道就比较简单了,并且Duck不比用DMA,这里正好讲解一下,STM32内部自带的一个温度传感器。多通道配置多通道就是读取多个通道
tutu304725938
2021-12-17 07:29:56
使用STM32L011F4读取2通道ADC没有问题吧
我正在尝试使用 STM32L011F4 读取 2 通道 ADC。我在cubemx中的ADC和DMA设置如下 我的问题是 DMA 只返回最后一个通道的低 8 位。uint16_t ADC
沈文强66
2022-12-08 06:25:20
