STMCU小助手
发布时间:2026-1-27 15:32
|
有人用到STM32H743片内的LPUART,并想用BDMA配合LPUART的数据传输。可是他发现LPUART的通信难以成功,希望有相关例程可以参考。 其实,基于DMA方式实现LPUART的通信并不难。就是有个地方要注意下,即此处的BDMA可以访问的内存仅限于SRAM4和备份SRAM。如果你把要传输的内存数据放在别的RAM区,BDMA鞭长莫及,是访问不到的。其它倒也没什么了。
下面要演示的功能是这样的,使用LPTIMER周期性的输出事件作为BDMA传输动作的同步信号。LPTIMER每产生一个输出上沿事件,BDMA就从内存取走1个数据送到LPUART的发送数据寄存器。最终将内存字符显示在PC的串口终端。 使用STM32CubeMx图形化工具进行配置,然后创建工程,添加用户代码,最后查看验证结果。 先对LPTIM2进行配置。时间参数不严格,能演示效果即可。开启其PWM输出功能。
下面是LPUART的配置,没有太多要注意的。如果使用LSE作为其驱动时钟的话,波特率不要超过9600。不过,我这里使用的是其它时钟。 下面是关于LPUART发送功能的DMA配置。【关于接收这里就省掉了】
基于上面配置,BDMA根据LPUART的TXE事件从内存搬运数据到LPUART发送数据寄存器的行为还得与LPTIMER输出的上沿事件同步。
当然,我们也可以选择LPTIMER输出的下沿或双沿作为同步触发信号。
根据上面的配置,如果LPTIMER不启动的话,BDMA是没法实现LPUART数据的发送传输的。 添加必要的用户代码,这里基于ARM KEIL IDE创建工程、组织代码。 按照指定地址的方式定义待发送的内存数据。注意地址是在SRAM4区域内。
下面两行代码的功用一目了然,此处不多做解释。
在BDMA传输完成中断里,修改发送字符串里的某个特定字符,便于查看演示效果。同时重新再启动LPUART发送的DMA传输。
下面是最终演示结果。绿色波形是LPTIM的PWM输出,另一幅图是串口终端的字符显示效果。
上述内容主要涉及三个外设的协同配合,即LPTIM/LPUART和BDMA的配合应用,并给出了些应用提醒。今天的分享就到这里,供有需要的人参考。 文章出处:茶话MCU |
经验分享 | STM32H723 SPI 通讯异常排查:实时观察窗口的 “隐形干扰” 解决方案
经验分享 | STM32H7 SPI NSS 脉冲模式灵活应用:解决外置 ADC 通信干扰问题
经验分享 | STM32H7 双核调试配置:STM32CubeIDE 下 M7+M4 协同调试实操
经验分享 | STM32H7 TouchGFX 花屏速解:更换 HyperRAM 后 latency 值适配实操
经验分享 | STM32H7Sx MCE 加密解密:外部存储安全防护全解析
如何在STM32和Arduino上实现卷积神经网络
详解STM32单片机的堆栈
STM32 开发者指南:ST.com 全新 MCU 产品阵容视觉布局深度解析
STM32和Arduino对比,谁更耐打?
STM32 LL为什么比HAL高效?
微信公众号
手机版