Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
串口
DMA
10
串口DMA发送数据时,数据被覆盖
发布于 2020-07-03 11:35:29 浏览:2150
订阅该版
大神好。我在用DMA发送串口数据时会出现数据覆盖的现象 我用这种方式打开并配置串口DAM: ```c g_uart2obc = rt_device_find("uart1"); if(!g_uart2obc) { AWLOG_ERROR("can't find obc conn uart"); return -1; } struct serial_configure uart_config = RT_SERIAL_CONFIG_DEFAULT; uart_config.baud_rate = 115200; uart_config.bufsz = 4096; if(RT_EOK != rt_device_control(g_uart2obc, RT_DEVICE_CTRL_CONFIG, &uart_config)) { AWLOG_ERROR("config obc uart failed"); return -1; } if(RT_EOK != rt_device_open(g_uart2obc, RT_DEVICE_FLAG_DMA_RX|RT_DEVICE_FLAG_DMA_TX)) { AWLOG_ERROR("open obc uart failed"); return -1; } return 0; ``` 但是如果连续发送两个数据包就会出现第二个数据包被发出去,而第一个数据包没有被发出去的情况,代码: ``` rt_device_write(g_uart2obc, 0, buf1, length1); // 发送第一个数据包 rt_device_write(g_uart2obc, 0, buf2, length2); // 发送第二个数据包 ``` 如果发送两个数据包中间有延时那么两个数据包就都能被发送出去: ``` rt_device_write(g_uart2obc, 0, buf1, length1); // 发送第一个数据包 rt_thread_mdelay(5); rt_device_write(g_uart2obc, 0, buf2, length2); // 发送第二个数据包 ``` 所以我推测是DMA底层代码的发送缓冲区资源分配的问题,导致数据被覆盖了 麻烦大神确认下这个问题,万分感谢!!!
查看更多
Ernest
2020-07-03
这家伙很懒,什么也没写!
## 现象分析 获取发送数据的返回值后,的确仍然可以改变发送值,无法确定是否发送完成导致的。 ## 解决方式 注册 rt_device_set_tx_complete 功能,确定发送完成。 ## 代码运行流程 - 发送第一条数据 - 等待发送完成产生的回调函数(使用信号量的话就是 release sem) - 接收到回调消息,发送第二条数据 如此反复,即可使用 dma 情况下确保数据发送完成、不覆盖。
4
个回答
默认排序
按发布时间排序
奇趣电子
2020-07-03
这家伙很懒,什么也没写!
问一下你的版本用的什么
whj467467222
认证专家
2020-07-03
开源,分享,交流,共同进步
同意 Ernest 的说法,DMA发送是否完成查看一下DMA发送完成中断的回调函数
海阔天kongcyc
2020-07-13
这家伙很懒,什么也没写!
我感觉如果应用层不要关心最底层硬件,认为调用了rt_device_write之后,数据就一定会发出去了,可能会更好些。不知道没这么实现的原因是?
撰写答案
登录
注册新账号
关注者
0
被浏览
2.2k
关于作者
xiaofyao
这家伙很懒,什么也没写!
提问
13
回答
8
被采纳
0
关注TA
发私信
相关问题
1
关于串口DMA模式下rt_device_close问题
2
利用stm32f427实现usb转串口,电脑端什么也没有识别到
3
finsh 控制台 适配 RS 485请大神指点????
4
uart_sample.c 中,读串口设备时偏移量pos要设置为-1而不是0?
5
【结贴】at_device软件包中对串口接收数据缺少判断导致数据接收异常
6
串口无法接受数据,但可以发送
7
串口如何有效的清除掉接收缓冲,而不必一个一个的去读取
8
串口接收使用方式问题
9
雅特力FINSH问题
10
rt-thread studio 串口修改波特率头文件的问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
五分钟玩转RT-Thread新社区
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
6
国产MCU移植系列教程汇总,欢迎查看!
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
RS485驱动包的使用
2
当做一件事,坚持到第二十年 ——Open-SkyEye强势回归!
3
stm32f407zgt6新建工程
4
【github】rt-thread BSP 目录所有支持开发板整理展示
5
使用 D1s (RDC2022 纪念版) 连接 thingspeak
热门标签
RT-Thread Studio
串口
LWIP
SPI
Env
AT
FinSH
ART-Pi
Bootloader
CAN总线
Hardfault
文件系统
USB
DMA
RT-Thread
线程
stm32
RT-Thread Nano
SCons
MQTT
ESP8266
ota
packages_软件包
UART
rtthread
RTC
freemodbus
I2C
flash
cubemx
W5500
rt-smart
定时器
FAL
PWM
ADC
BSP
SDIO
msh
AB32VG1
Debug
C++_cpp
socket
SFUD
中断
编译报错
MicroPython
keil
LVGL
dfs
本月问答贡献
出出啊
1424
个答案
315
次被采纳
小小李sunny
1327
个答案
262
次被采纳
crystal266
490
个答案
144
次被采纳
whj467467222
1210
个答案
141
次被采纳
张世争
581
个答案
131
次被采纳
本月文章贡献
出出啊
4
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
crystal266
1
篇文章
1
次点赞
whj467467222
2
篇文章
2
次点赞
张世争
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部