|
有人用到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区域内。
下面两行代码的功用一目了然,此处不多做解释。 image.png=webp&wxfrom=5&wx_lazy=1#imgIndex=8) 在BDMA传输完成中断里,修改发送字符串里的某个特定字符,便于查看演示效果。同时重新再启动LPUART发送的DMA传输。
下面是最终演示结果。绿色波形是LPTIM的PWM输出,另一幅图是串口终端的字符显示效果。
上述内容主要涉及三个外设的协同配合,即LPTIM/LPUART和BDMA的配合应用,并给出了些应用提醒。今天的分享就到这里,供有需要的人参考。 文章出处:茶话MCU |
【 逢7发帖赢大礼】7、TouchGFX中实现云彩流动效果
【 逢7发帖赢大礼】6、TouchGFX中添加图像素材和自定义代码编辑
【 逢7发帖赢大礼】5、TouchGFX 创建自定义界面和交互
【 逢7发帖赢大礼】4、CubeMX工程复用以及TouchGFX应用
【 逢7发帖赢大礼】3、利用CubeMX添加TouchGFX功能:工程修改和编译烧录
【 逢7发帖赢大礼】2、利用CubeMX添加TouchGFX功能:CubeMX配置
【 逢7发帖赢大礼】1、利用CubeMX生成正点原子H7R7开发板的STM32CubeIDE工程
CubeMX生成CubeIDE工程代码乱码
经验分享 | 基于STM32H7不同MPU配置的拷贝性能比较
【STM32U3 评测】CAN基本通讯测试
微信公众号
手机版