1、前言
LPBAM 全称为 low-power background autonomous mode,系统时钟可以在进入低功耗模式之后打开或关闭,可以触发 DMA 请求,可以在 stop0,stop1,stop2 模式下使用。在 stop 模式下除了 LSI 和 LSE 以外其他时钟都会关闭,但 MSIK 和 HSI16 可以被临时使能,以支持 DMA 传输,这就是 LPBAM 的特点。
另外,LPBAM 需要 DMA 来进行配合,U5 系列的 DMA 有 Linked List 功能,也就是说DMA 可以完成链表设计好的任务。在初始化的时候,以链表模式设置好 DMA 相关寄存器,可以通过链表模式完成内存到内存,或者内存和外设寄存器之间的数据传输。
由于 LBAM 的特性,在进行低功耗应用设计时,可以使用 LPBAM 大大减少功耗,提升产品的低功耗性能。比如,可以在 stop2 模式下进行串口收发,ADC 采集任务等等。
本文将介绍如何使用 CubeMX,配置 DMA Linked List,在低功耗模式下,使用LPBAM 进行 GPIO Toggle。
2. 准备工作
2.1 环境准备
测试硬件:B-U585I-IOT02A 开发板
测试开发环境:IAR 8.50.1
CubeMX 版本:6.30.0
2.2 设计思路
如图所示,我们先在内存中定义好需要写入 GPIO 寄存器的数值,其中 Set GPIO 就将数据写入 BSRR 寄存器,Reset GPIO 就将数据写入 BRR 寄存器。LPDMA 设置两个节点,一个去 Set GPIO,另一个 Reset GPIO,然后由软件触发,由 LPTIM1 CH1 的上升沿触发 LPDMA 第一个节点进行动作,LPTIM1 CH1 的下降沿触发 LPDMA 第二个节点进行动作。
LPTIM1 设置使用 LSI 32KHz 为时钟,频率为 32KHz,占空比为 50%的 PWM 波输出,也就是说 GPIO 会以 500ms 的频率进行 toggle。
3.Step By Step
STEP10-1:代码修改 main.c
STEP10-2:代码修改 main.h
STEP10-3:代码修改 stm32u5xx_it.c
STEP10-4:代码修改 linked_list.c
STEP10-5:stm32u5xx_hal_msp.c
STEP11:
link file 修改 : stm32u585xx_flash.icf
修改完后,编译工程,在按下 USER BUTTON 后,系统将进入 STOP2 模式, 板载 LED 会停止toggle,但是 LPGPIO 控制的 LED 仍然会继续 toggle。
4、总结
本文介绍了 LPBAM 模式,以及如何使用 CubeMX 方便地配置 DMA Linked List,最后完成了在 CPU 进入 Stop2 模式下的 GPIO toggle 任务。LPBAM 模式将会在打造超低功耗的产品中发挥非常重要的作用。
关键字:STM32U5 DMA 请求
引用地址:
工程师笔记|STM32U5 LPBAM模式介绍
推荐阅读最新更新时间:2024-11-11 12:17
STM32串口DMA问题详解
昨天晚上在STM32串口DMA的问题上纠结了好长时间,所以今天上午写篇博客来谈谈我对串口DMA发送的理解。 讨论三个问题: 1、什么叫串口DMA 请求; 2、串口简要复习; 3、串口DMA发送流程。 1、什么叫串口DMA 请求(战舰STM32开发板) 说这个问题之前先简单回顾DMA的基本特性。先导出原子哥的PPT内容: DMA 全称Direct Memory Access,即直接存储器访问。 DMA传输将数据从一个地址空间复制到另一个地址空间。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实现和完成的。 STM32有两个DMA控制器(DMA2只存在于大容量产品中),DMA1有7个通道,DMA2有5个通道,
[单片机]
STM32F4 ADC采集数据的DMA数据传输
书接上文,开始折腾ADC的DMA传输。因为大家都在说DMA,就连ST的例子里边也是使用DMA的。 ADC采集到的数据都存储在一个固定的寄存器中。当常规采样方式采样多个通道时候,使用DMA可以较好地避免将采集到的数据丢失。当ADC的DMA功能被使能的时候,每个通道转换完毕时都会发出一个DMA请求。DMA方式也不能完全避免数据丢失问题,要实现数据不丢失需要在DMA的同时开启OVERRUN模式,当数据丢失时就停止数据转换。我们只需要检测是否有OVR时间发生,就能解决采样数据丢失造成的问题。比如,通道错位什么的。 在STM32F4的Reference manual中可以查到ADC1 的DMA映射在DMA1、CH0、Strea
[单片机]
STM32 ADC1_DMA
重温一个旧的例程 ADC 仍然十分简单,将DMA应用于 ADC 这个就比较实用了。 ADC规则数据寄存器(ADC_DR) 0x4001244C /************************************************************** ADC PB1_ADC9 ***************************************************************/ #include STM32Lib\\stm32f10x.h #define ADC1_DR_Address ((uint32_t)0x4001244C) extern u16 adc; void
[单片机]
stm32之DMA数据传输
从字面意思上看,DMA即为“直接内存读取”的意思,换句话说DMA就是用来传输数据的,它也属于一个外设。只是在传输数据时,无需占用CPU。 DMA请求 某个外设在通过DMA传输数据前,必须先给DMA控制器发送请求,控制器会返回一个应答信号给外设,外设应答后并且DMA控制器收到外设应答信号后,便会启动DMA传输。这个过程类似于TCP的“三次握手”。 DMA有DMA1和DMA2两个控制器,每个控制器都有不同的通道,每个通道对应不同的外设请求。如图12-1为DMA1的通道请求、图12-2为DMA2的通道请求。 图12-1 图12-2 如以上两图所示,DMA1有7个通道,DMA2有5个通道,每个通
[单片机]
STM32L1XX使用HAL_UART_Transmit_DMA发送串口数据
使用STM32CubeMX生成初始化代码。 问题: HAL_UART_Transmit_DMA函数只能调用一次,第二次就返回状态HAL_UART_STATE_BUSY 0x02。 原因: stm32l1xx_hal_uart.c开头有描述 (##) DMA Configuration if you need to use DMA process (HAL_UART_Transmit_DMA() and HAL_UART_Receive_DMA() APIs): (+++) Declare a DMA handle structure for the Tx/Rx channel. (+
[单片机]
stm32f030超时定时器+Dma的配置
经常我们会用到空闲中断IDLE,但是空闲中断默认一个BIT接收不到就是超时,而在超时中断中,超时时间是可以自己设定的, 超时时间根据波特率以及超时规定的字节个数来确定。此处的超时时间是 40 * (1/19200). #define USART_ReceiverTimeOut 40 void DMA_Configuration(void) { DMA_InitTypeDef DMA_InitStructure; /* DMA1 Channe3 (triggered by UART1 Rx event) Config */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1
[单片机]
浅谈stm32f1两路adc采集(非DMA)
由于项目的需要写2路ADC采集,发现采集的电压出现很大的误差。(后来换成ADC1和ADC2模式后解决了)仔细看了一下,不会是板子对应的引脚共用,那到底是怎么回事呢?想到了电路上的上拉电阻,测量出现的电压数值跳变不就是高阻态吗?在程序当中要是利用到上拉电阻不就搞定了吗!翻开某库函数关于ADC的介绍如下: STM32 拥有 1~3 个 ADC(STM32F101/102 系列只有 1 个 ADC),这些 ADC 可以独立使用,也可以使用双重模式(提高采样率)。STM32 的 ADC 是 12 位逐次逼近型的模拟数字转换器。 它有 18 个通道,可测量 16 个外部和 2 个内部信号源。各通道的 A/D 转换可以单次、连续、扫描
[单片机]
USB数据采集系统中DMA数据传输的实现
引言 USB通用串行总线(Universal Serial Bus)是被PC机广泛采用的一种总线,目前已经在计算机主板上大量集成,成为一种标准配置接口。它的即插即用、真正的热插拔、可总线供电、高性能和系统造价低等一系列的优点,使得USB接口得到了广泛的应用。特别是随着USB2.0高速传输协议的出现,其数据传输速度达到了480Mb/s,使得USB接口方式的虚拟仪器系统成为今天低成本虚拟仪器系统的主流。本文设计了基于USB2.0高速传输的数据采集系统,整个数据传输过程完全采用DMA方式,达到了较高的数据传输速度。 1、系统介绍 系统总体结构如图1所示。采用Philips公司的微控制器LPC2888作为系统核心控制
[单片机]