硬汉嵌入式论坛

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

[UART] 双机串口通讯错位问题

[复制链接]

44

主题

563

回帖

700

积分

金牌会员

积分
700
发表于 2022-11-23 19:09:46 | 显示全部楼层 |阅读模式
STM32H7双机串口通讯发生错位问题,串口驱动代码用的是V7板的bsp_uart_fifo。出现的问题是这样的,如果发送端在接收端运行之前,先发送一次数据,接收端运行后接收第一帧数据是错的,第一个数据是一个不确定的数,第二数据才是发送端的数据。接收端先运行的话就是正常的,不知道什么问题呢。发送函数用的是:UartSend(COM4, (uint8_t *)&gsSPI_RxCmd,sizeof(sSPI_CmdType))
接收如下:
微信截图_20221123190455.png



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2022-11-24 01:10:22 | 显示全部楼层
这种的,有必要在操作数据前,先做个通信应答,另一端应答了再做数据通信。
回复

使用道具 举报

44

主题

563

回帖

700

积分

金牌会员

积分
700
 楼主| 发表于 2022-11-24 08:16:40 | 显示全部楼层
eric2013 发表于 2022-11-24 01:10
这种的,有必要在操作数据前,先做个通信应答,另一端应答了再做数据通信。

确是这样啊,调了一天,手册uart也看了几遍,还以为哪里出错了,看来还需要做一下应答啊。
回复

使用道具 举报

44

主题

563

回帖

700

积分

金牌会员

积分
700
 楼主| 发表于 2022-11-24 16:22:40 | 显示全部楼层
eric2013 发表于 2022-11-24 01:10
这种的,有必要在操作数据前,先做个通信应答,另一端应答了再做数据通信。

不太理解为啥是这样的情况,尝试用PC串口调试,发送和接收又都是正常的,这个通信只是单向的,
回复

使用道具 举报

0

主题

9

回帖

9

积分

新手上路

积分
9
发表于 2022-11-24 16:35:16 | 显示全部楼层
发送和接收方要正确通信的前提,是双方的串口硬件初始化已经正确完成。
通常,采用中断接收,串口接收到一个字节的时候触发中断,服务程序判断到是接收中断后,读取数据并写入缓冲区。这种操作可以确保每一个数据都接收到。
在主程序中,定时(比如每20ms)从缓冲区(一定要是个环形缓冲区)取数,根据通信协议判断数据是否成帧,没有错误就按协议执行相应操作。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2022-11-25 09:28:34 | 显示全部楼层
ou513 发表于 2022-11-24 16:22
不太理解为啥是这样的情况,尝试用PC串口调试,发送和接收又都是正常的,这个通信只是单向的,

你的串口引脚都使能内部上拉是不是好点。
回复

使用道具 举报

44

主题

563

回帖

700

积分

金牌会员

积分
700
 楼主| 发表于 2022-11-26 12:56:09 | 显示全部楼层
eric2013 发表于 2022-11-25 09:28
你的串口引脚都使能内部上拉是不是好点。

上拉确实可以,至少不会发送错位了,不太理解为啥
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2022-11-26 13:27:52 | 显示全部楼层
ou513 发表于 2022-11-26 12:56
上拉确实可以,至少不会发送错位了,不太理解为啥

有效防止空闲态随机值。
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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