登录/注册

stm32l071 adc 通道 切换

更多

在STM32L071上实现ADC通道切换,可以通过以下步骤配置:

1. 硬件配置

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;        // 启动转换

关键注意事项:

  1. 时钟配置:确保ADC时钟不超过STM32L071的14 MHz限制。
  2. 采样时间:通过ADC1->SMPR寄存器调整采样时间(较弱的输入信号需要更长时间)。
  3. 中断处理:若使用中断,清除标志位ADC->ISR并启用对应中断源。
  4. 低功耗优化:在单次转换后进入Stop模式,通过ADC唤醒节省功耗。

根据需求选择轮询、中断或DMA方式,扫描模式配合DMA适合高效的多通道采集场景。

STM32L071xx:超低功耗32位MCU的技术剖析与应用指南

STM32L071xx系列MCU采用了基于Arm® Cortex® - M0+的32位内核,具备高达192KB的Flash、20KB的SRAM和6KB的EEPROM,还集成了12位ADC等丰富的外设。该

2026-03-15 17:25:10

STM32L071做时钟配置成32M的话,系统就会在执行时钟切换时跑飞的原因?

最近在用STM32L071这个片子,做时钟配置的时候发现PLLVCO最大只能配置到16M,配成32M的话,系统就会在执行时钟切换时跑飞,于是我想到可能是FLASH的等待周期造成的,所以就写了下

2024-04-02 07:39:23

为什么STM32L071RBT6 NRST复位时还可以用IAR SWD烧程序?

BOOT0和BOOT1拉低,用了外部独立看门狗,RESET接STM32L071的NRST脚,发现不断开RESET的OΩ都可以用IAR SWD烧程序,点运行后如果加断点IAR就会提示断开。正常不接SWD,看了下看门狗又是正常工作的。这种情况不应该是烧不了程序吗?

2024-03-22 08:10:29

STM32CubeMx学习之——创建LED灯工程(基于STM32L071KBU)

STM32CubeMx学习之——创建LED灯工程(基于STM32L071KBU)本文介绍利用STM32CubeMx来创建工程代码,并且将代码下载

资料下载 佚名 2021-12-06 20:06:12

STM32ADC(直接采集、双通道DMA采集) Day6

软件:STM32CubeMX,MDK-ARM硬件:蓝桥杯物联网Lora开发板,板载芯片STM32L071一、前言ADC,模拟信号只有通过A/D转

资料下载 李伟 2021-12-05 21:06:08

STM32L4系列中ADC通道配置上的区别

STM32L4系列中ADC通道配置上的区别(电源技术博览会)-即使同是STM32L

资料下载 孙成红 2021-08-04 18:05:27

AN-665: Σ-Δ ADC通道切换

AN-665: Σ-Δ ADC的通道切换

资料下载 佚名 2021-03-21 11:38:18

STM32L071核心板的电路原理图免费下载

本文档的主要内容详细介绍的是STM32L071核心板的电路原理图免费下载。

资料下载 魏勇勤 2020-10-27 08:00:00

STM32L071ADC,接了一个10K电阻,为什么会有自带几十mv的电压?

[td] STM32L071的ADC,接了一个10K电阻,为什么会有自带几十mv的电压?电路如图所示,采样率79.5 时钟16M

2024-03-14 07:32:01

STM32L071串口与BC260Y模块通讯异常

现在我手上有个项目是采用STM32L071与BC260Y串口通讯,经过反复测试发现,每次都是能通过串口唤醒模块,但是不能每次得到模块的AT指令的反馈,造成不能每次心跳都有数据上报平台,有没有大咔有类似的经验,分享一下,谢谢了.

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,6

2022-11-25 06:11:09

STM32L071CZY6 电子元器件 ST 封装WLCSP-49

1970-01-01 08:00:00 至 1970-01-01 08:00:00

STM32L0时钟系统简介

软件:STM32CubeMX,MDK-ARM硬件:蓝桥杯物联网Lora开发板,板载芯片STM32L071一、STM32L0时钟系统简介1、LSI

2021-08-06 09:22:26

如何实现ST95HF / STM32L071点对点连接?

大家好, 我正在使用ST95HF和我的STM32L071来读取NFC卡(标签类型检测,UID ..),它完美无缺。 现在我必须在我的程序中编写一个新模式,包括将我的产品与带有P2P的手机连接。您是

2019-07-29 07:48:22
7天热门专题 换一换
相关标签