Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
DMA
STM32H7
CACHE
stm32h7使用uartv1和uartx都出现数据获取不正确问题,dma模式
发布于 2025-02-06 14:54:30 浏览:51
订阅该版
```c /** * @brief 遥控器接收回调函数 */ static rt_err_t rc_rx_cbk(rt_device_t dev, rt_size_t size) { rt_err_t result = rt_mq_send(&rc_rx_mq, &size, sizeof(size)); return result; } /** * @brief 遥控器接收线程 */ void rc_rx_thread_entry(void *parameter) { rt_device_t rc_serial = rt_device_find("uart4"); if (!rc_serial) { return ; } struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; /* 初始化配置参数 */ config.baud_rate = 420000; // 修改波特率为 9600 rt_device_control(rc_serial, RT_DEVICE_CTRL_CONFIG, &config); static char msg_pool[256]; /* 初始化消息队列 */ rt_mq_init(&rc_rx_mq, "rc_rx_mq", msg_pool, /* 存放消息的缓冲区 */ sizeof(rt_size_t), /* 一条消息的最大长度 */ sizeof(msg_pool), /* 存放消息的缓冲区大小 */ RT_IPC_FLAG_FIFO); /* 如果有多个线程等待,按照先来先得到的方法分配消息 */ /* 以 DMA 接收及轮询发送方式打开串口设备 */ rt_device_open(rc_serial, RT_DEVICE_FLAG_DMA_RX | RT_DEVICE_FLAG_INT_TX); /* 设置接收回调函数 */ rt_device_set_rx_indicate(rc_serial, rc_rx_cbk); while (1) { rt_size_t size; /* 从消息队列中读取消息 */ rt_err_t result = rt_mq_recv(&rc_rx_mq, &size, sizeof(size), RT_WAITING_FOREVER); if (result == RT_EOK) { /* 从串口读取数据 */ rt_size_t rx_length = rt_device_read(rc_serial, 0, rc_rx_buffer, size); // rt_kprintf("rc%d\n\r",rx_length);//测试用的 rt_kprintf("rc:%d\n\r",rx_length);//输出读取到的长度 for (size_t i = 0; i < rx_length; i++) { rt_kprintf("rc:%02X\n\r",rc_rx_buffer[i]);//在终端打印接收到的十六进制值 } //解析数据 // crfs_decode(rc_rx_buffer,rx_length); } } } ``` 代码如上,打印在终端的hex混乱,无论是v1还是x都是如此,rx_length长度值是对的,仔细查看代码发现rc_rx_cbk实际上就在USARTx_IRQHandler中断内被调用,device_read的时候从fifobuf复制数据到我自己的buf,然后更新index,会不会是dma接收到的数据比我打印出来要快导致的?或者这段代码存在其他问题?
查看更多
2
个回答
默认排序
按发布时间排序
用户名由3_15位
5小时前
这家伙很懒,什么也没写!
- debug从中断处查看buf内容是否正确;排查是不是接收就有问题;DMA默认开启了半满和全满回调;输入内容少于半满尝试是否正确,大于尝试是否正确; - 不使用DMA查看是否正常 - 使用逻辑分析仪接入查看
三世执戟
21小时前
这家伙很懒,什么也没写!
H7有cache? 用了DMA必刷cache!
撰写答案
登录
注册新账号
关注者
0
被浏览
51
关于作者
Guest
这家伙很懒,什么也没写!
提问
7
回答
1
被采纳
0
关注TA
发私信
相关问题
1
串口DMA发送数据时,数据被覆盖
2
关于串口DMA模式下rt_device_close问题
3
stm32L4 lpuart1DMA下不能打开的问题
4
UART驱动开启DMA后编译报错,UART DMA配置中加入了没有定义的域
5
UART DMA 设计问题
6
UART DMA 拆包问题
7
串口如何有效的清除掉接收缓冲,而不必一个一个的去读取
8
串口接收使用方式问题
9
在studio中打开串口的DMA后,编译出错
10
官方DMA串口例程,使用时数据打印错误
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
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
[E/app.filesystem] SD card mount to '/sdcard' failed!
2
单片机也能聊天?RT-Thread上跑通大语言模型
3
【RT-Thread】【ci】【scons】将ci.attachconfig.yml和scons结合使用
4
Rt-thread中OTA下载后,bootloader不搬程序
5
ulog 日志 LOG_HEX 输出时间改为本地日期时间
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
出出啊
1518
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
549
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
3
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部