打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
STM32 HAL库 串口DMA 发送失败的问题

今天再用HAL库做简单的串口DMA发送时突然出现了一个小问题,感觉有点意思,以此记录;

一开始时再主程序中直接测试串口功能的, 如下发送:

HAL_UART_Transmit_DMA(&huart2, (uint8_t *)'AT+NAME=helloworld', strlen('AT+NAME=helloworld');

发送顺利,串口另一端的设备应答一切顺利,既然测试正常,就开始进行功能开发;于是再启动设备的时候准备 MCU 的UNIQUE ID修改一下名称,于是有了如下的 方法:

#define _NAME 'AT+NAME='

void SetName(void)

{undefined

        uint8_t str[48] = {0};

        sprintf((char *)str, '%sSimulator-%02X-%02X-%02X', _NAME, *((uint32_t *)0x1FFF7590), \
        *((uint32_t *)0x1FFF7594), *((uint32_t *)0x1FFF7598));

        HAL_UART_Transmit_DMA(&huart2, (uint8_t *)str, strlen(str));

}

于是奇怪的事情发生了,HAL_UART_Transmit_DMA调用一切正常,串口设备竟然没有回应,刚才测试的时候还是好的呢?

换上测试代码,重新测试,一切OK, 反复来回切换,确定了上面的代码有问题;于是跟踪了进去,发现HAL_UART_Transmit_DMA 接收的参数内容都正常, 一步步下来,突然发现了这么一句代码:

这就让我猜测 DMA发送应该是一种异步模式;跟踪进去感觉可能性就更明显了,这应该是跟DMA发送机制相关,明显我欠缺了一些基础,既然判定了原因,于是直接将局部变量 uint8_t str[48] = {0}; 设置为static,再重新编译运行,果然一切顺利;

一个小小的问题,反应了硬件与软件的结合,感觉有点意思,以此为记;

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
HAL库UART的几个常用函数讲解+中断处理过程讲解
协议中UART的两种模式
Z-Stack串口DMA方式
串口接收不定长数据的几种方法,学会横着走!
STM32 之 HAL库
STM32
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服