硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4309|回复: 8
收起左侧

[UART] stm32h7 连续使用dma uart tx时,最后一个数据会出错,求解???

[复制链接]

1

主题

3

回帖

6

积分

新手上路

积分
6
发表于 2020-7-17 12:05:09 | 显示全部楼层 |阅读模式


stm32h7 使用dma uart tx时,最后发的一个数据最后几个字节会出错,求解?发送同一个数据,但收到的最后一个数据后几个字节是不对的:

例如:sendbuf[9] = {0x00, 0x09, 0x0a, 0x00, 0x00, 0x00, 0x14, 0x5c, 0xf9}时,之前收的数据都是对的,但收到的最后一个数据是: 00 09 0A 06 9F 05 00 08 00

          sendbuf[5] = 00 05 09 6E DC时,之前收的数据都是对的,但收到的最后一个数据是: 00 05 09 24 05



u8 sendbuf[9];   // u8 sendbuf[5]

...



HAL_UART_Transmit_DMA(&UART2_Handler,sendbuf,datacnt);

delay_ms(10);

...        

HAL_UART_Transmit_DMA(&UART2_Handler,sendbuf,datacnt);









回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
发表于 2020-7-17 12:15:56 | 显示全部楼层
【STM32H743实验例程】实验14:STM32H743串口DMA方式收发,DMA方式问题比较多,要注意数据一致性
http://www.armbbs.cn/forum.php?m ... 6271&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2020-7-17 14:33:04 | 显示全部楼层
eric2013 发表于 2020-7-17 12:15
【STM32H743实验例程】实验14:STM32H743串口DMA方式收发,DMA方式问题比较多,要注意数据一致性
http://w ...

版主多谢啦,那个工程我参考过。
我现在单次发收都没问题,连续发时候有问题,问题表现是:收到的最后一个数据的最后几个字节会不对。
这有可能是什么原因哦?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
发表于 2020-7-17 14:36:02 | 显示全部楼层
ClineH 发表于 2020-7-17 14:33
版主多谢啦,那个工程我参考过。
我现在单次发收都没问题,连续发时候有问题,问题表现是:收到的最后一 ...

我这个连续发没问题,你再研究研究你那边什么情况。
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2020-7-17 23:11:23 | 显示全部楼层
eric2013 发表于 2020-7-17 14:36
我这个连续发没问题,你再研究研究你那边什么情况。

谢谢版主,我又发现我的现象是:我的工程中用了ucosii,在主任务中用连续发送的话没问题。
但如果主任务调用其他c文件函数,其中包含了连续的发送时,有两种情况:
1. 连续发送的最后一个HAL_UART_Transmit_DMA()后有delay_ms(),发送正确
    {
        ....
        HAL_UART_Transmit_DMA(&UART2_Handler,sendbuf,datacnt);
        delay_ms(10);
    }
2. 连续发送的最后一个HAL_UART_Transmit_DMA()后无delay_ms(),发送最后几个字节会错误
    {
        ....
        HAL_UART_Transmit_DMA(&UART2_Handler,sendbuf,datacnt);
    }
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
发表于 2020-7-18 00:03:40 | 显示全部楼层
ClineH 发表于 2020-7-17 23:11
谢谢版主,我又发现我的现象是:我的工程中用了ucosii,在主任务中用连续发送的话没问题。
但如果主任务 ...

发送后,等待发送完成使用延迟是不合理,你要等待DMA中断里面得传输完成标志,详情还是看我的那个例子。
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2020-7-18 11:52:02 | 显示全部楼层
eric2013 发表于 2020-7-18 00:03
发送后,等待发送完成使用延迟是不合理,你要等待DMA中断里面得传输完成标志,详情还是看我的那个例子。

谢谢版主,确实是这个原因造成的。
直接使用HAL_UART_Transmit_DMA连续发送时,最后一个数据有可能有问题。
使用封装后的USART2_DMA_send(会等待dma中断的传输完成),就没有问题了
回复

使用道具 举报

25

主题

99

回帖

179

积分

初级会员

积分
179
发表于 2020-7-18 15:18:50 | 显示全部楼层
485???485的话需要等待传输完成,然后在切换使能脚,不然就跟你这个现象很像
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
发表于 2020-7-18 15:22:25 | 显示全部楼层
xujun 发表于 2020-7-18 15:18
485???485的话需要等待传输完成,然后在切换使能脚,不然就跟你这个现象很像

485的话,查询下串口TC传输完成标志靠谱。
66.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-13 04:15 , Processed in 0.320443 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表