Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
关于STM32例程中串口DMA接收数据长度出现随机错误的问题
发布于 2019-08-09 11:36:02 浏览:2841
订阅该版
* 本帖最后由 RickFlying 于 2019-8-9 11:41 编辑 * 使用RT-Thread官方的BSP工程(基于正点原子F429),运行官网文档教程中提供的串口DMA接收例程,发现接收到的数据长度会随机出错(注意:是接收到的数据的长度出错,在serial.c 文件下的 rt_hw_serial_isr 函数里面出错)。 具体情况描述: 如下图1所示,串口助手发送10个数据给串口,串口用DMA方式接收(官网例程),但是在RT-Thread源码中的 serial.c 文件下的 rt_hw_serial_isr 函数里面,对应DMA接收的代码,把接收到的数据长度length输出到调试串口中,显示DMA接收的数据长度会随机的出现错误,比如接收100次,会出现一次长度错误。请问这种情况怎么解决呢? ![X}U]Y@SPGNQ[3TO]2LTZB.png](/uploads/201908/09/112939eemq1h6e1gk563iz.png) 进一步实验发现,屏蔽掉drv_usart.c文件中的HAL_UART_RxCpltCallback函数的内容,如下图2所示,接收到的数据长度就不会出错了,这是怎么回事?是不是屏蔽掉HAL_UART_RxCpltCallback这个函数之后,RT-Thread默认串口运行方式是普通中断模式发送???按理说不应该是这样的。 ![_Y8@9)XA_NW7BFY7A{74510.png](/uploads/201908/09/114022dmkuko33w3k3orka.png)
查看更多
18
个回答
默认排序
按发布时间排序
RickFlying
2019-08-09
something in the way
希望看到的大神们帮帮我,十分感谢!
sync
2019-08-09
这家伙很懒,什么也没写!
数据应该是不会错的,只是楼主打印的位置不对。 参看这里的例子[https://www.rt-thread.org/document/site/programming-manual/device/uart/uart/#dma](https://www.rt-thread.org/document/site/programming-manual/device/uart/uart/#dma) 打印下dma接收到的内容,应该只是分包显示了,数据不会错的
RickFlying
2019-08-09
something in the way
>数据应该是不会错的,只是楼主打印的位置不对。 >参看这里的例子https://www.rt-thread.org/document/site/p ... --- 我用的就是这个例子,数据没错,长度错了比如每次10个数据,突然会变成4个然后紧接着再同时输出一个10,你看我第一个图,上面标注出来了,很清楚。。请问这种情况跟您说的分包有什么关系呢?我不太理解您说的分包是什么意思?
sync
2019-08-10
这家伙很懒,什么也没写!
使用dma方式接收时,drv_usart.c文件里面使用了3种中断模式 串口空闲中断,dma完成中断,以及dma完成一半中断 而dma接收使用的是循环模式 所以dma接收缓冲区一旦满了或者接收一半时,就会进入dma_isr里面的,而此时串口空闲中断并不一定才生,因此就会造成这个现象了。
sync
2019-08-10
这家伙很懒,什么也没写!
完整的数据不会错的,你的每帧长10字节,一旦出现接收4字节的情况(dma_isr),应该马上接收一个6字节才对(串口接收空闲中断),之所以没有打印出来,应该是程序执行的问题。具体看这个例子[https://www.rt-thread.org/document/site/programming-manual/device/uart/uart/#dma](https://www.rt-thread.org/document/site/programming-manual/device/uart/uart/#dma) 里面的uart_dma_sample
RickFlying
2019-08-10
something in the way
>使用dma方式接收时,drv_usart.c文件里面使用了3种中断模式 >串口空闲中断,dma完成中断,以及dma完成一半中 ... --- 您好,我在drv_usart.c文件中的stm32_dma_config函数内部已经找到了您说的这三种DMA方式的配置语句,应该是 DMA_Handle->Init.Mode = DMA_CIRCULAR; 我已经把它改成了了 DMA_Handle->Init.Mode = DMA_NORMAL; 但是发现只能接收两三次,然后程序就卡住不接收数据了。请问后续应该怎么具体修改呢?
sync
2019-08-10
这家伙很懒,什么也没写!
这是配置好的驱动,你当然不能自己想当然的修改了,你想实现啥功能呢?上面的uart_dma_sample 例子不能满足使用吗?
RickFlying
2019-08-10
something in the way
>完整的数据不会错的,你的每帧长10字节,一旦出现接收4字节的情况(dma_isr),应该马上接收一个6字节才对 ... --- 您仔细看我发的截图,我的DMA接收时,收到4个数据之后,不会继续出现6个数据,而是马上再输出一个10个数据的长度。问题怪就怪到这里了,如果只是分包,那就应该是您说的那种情况,先输出4再输出6,但是我的是输出一个4紧接着输出一个10,4和10时同时一次输出的。然后我就搞不懂这到底时怎么一回事了。程序我就是按照官方文档的这个程序应用的。
RickFlying
2019-08-10
something in the way
>这是配置好的驱动,你当然不能自己想当然的修改了,你想实现啥功能呢?上面的uart_dma_sample 例子不能满足 ... --- 我想实现的时用串口2接收pc发的数据,然后给串口3再输出到电脑上,就是这样/ 串口2用DMA接收。
sync
2019-08-10
这家伙很懒,什么也没写!
你的打印函数在中断里面,如果本次没有打印完毕,又有新的中断发生,自然就会引起错误的,你可以跑下例子,看真正的数据内容错了没有,如果数据没错,就是你的程序流程问题,造成没有打印6字节了。
撰写答案
登录
注册新账号
关注者
0
被浏览
2.8k
关于作者
RickFlying
something in the way
提问
7
回答
45
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
国产MCU移植系列教程汇总,欢迎查看!
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
浅谈国产加密芯片的选择
2
NXP MCXN947测评之SPI实践 - BMI270 加速度计数据读取
3
【RA8D1-Vision Board】基于OpenMV 实现图像分类
4
[Vision Board创客营] PWM模块实践
5
FRDM-MCXN947 I2C(软件)使用
热门标签
RT-Thread Studio
串口
LWIP
Env
SPI
Bootloader
AT
ART-Pi
Hardfault
CAN总线
FinSH
USB
文件系统
DMA
RT-Thread
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
ota在线升级
WIZnet_W5500
I2C_IIC
UART
flash
cubemx
packages_软件包
freemodbus
潘多拉开发板_Pandora
PWM
定时器
ADC
BSP
中断
编译报错
socket
flashDB
keil_MDK
GD32
Debug
MicroPython
msh
ulog
SFUD
SDIO总线
rt_mq_消息队列_msg_queue
本月问答贡献
出出啊
1506
个答案
339
次被采纳
小小李sunny
1423
个答案
281
次被采纳
张世争
741
个答案
161
次被采纳
crystal266
540
个答案
157
次被采纳
whj467467222
1218
个答案
146
次被采纳
本月文章贡献
出出啊
1
篇文章
5
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
3
篇文章
1
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部