找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1238|回复: 13
打印 上一主题 下一主题
收起左侧

USART的数据位设置为9位

[复制链接]
跳转到指定楼层
楼主
ID:1040483 发表于 2023-9-13 13:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.请问有没有串口助手的数据位可以设置为9位

2.我看ESP32的USART的数据位最大设置为8位,可以设置为9位吗,另外ESP32的串口发送接受函数是按字节发的,不是按bit,如何才能将9bit数据发送接受出去呢

谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883242 发表于 2023-9-13 14:23 | 只看该作者
两个问题的答案都是“不可以!”

USART数据位有多少取决于硬件,软件就是无限作弊都绕不开硬件限制,第二个问题ESP的datasheet告诉你了,第一个问题可以查16C550的datasheet,电脑的串口都是这个芯片,虽然已经不存在实际的16C550,但是作为IP还是芯片集的标准配置。
回复

使用道具 举报

板凳
ID:123289 发表于 2023-9-13 15:08 | 只看该作者
可以自己定义(软件方式):
用一根、两根、三根IO线,都可以,只要双方的通讯协议一样即可。
以两线为例,P1.0 = clk、P1.1 = data。通讯的双方再协议一下,如:频率,同步方式……。(可以对照232的协议进行,8位改9位,不就可以了吗?)
不过,用软件做很麻烦,又要求有一定的水准。
用硬件做:用9位以上的移位寄存器,搭建。也很麻烦,也要求有一定硬件水准。

一般方案:就用现成的8位,9位用两个字节16位传递,做做组合、拆分就行了,16位去除7位,也不错啊。

最接近可行的方案:利用奇偶校验位传输第9位。
发送方:
1、将SCON的SM0设置成1,9位串行模式。
2、先将第9位写入TB8。
3、再将第1-8位写入SBUF,发送。
接收方:
1、将SCON的SM0设置成1,9位串行模式。
2、将SCON的SM2=0,这个设置是关键!!!如果SM2设置为1,则收不到第9位=0的数据。
3、将收到的RB8存于第9位,SBUF存于前8位。



回复

使用道具 举报

地板
ID:1040483 发表于 2023-9-13 15:13 | 只看该作者
Hephaestus 发表于 2023-9-13 14:23
两个问题的答案都是“不可以!”

USART数据位有多少取决于硬件,软件就是无限作弊都绕不开硬件限制,第 ...

好的,非常感谢。我现在单片机需要与一个模块进行串口通信,模块描述数据位是9位,其中第9位为0时,前8位作为数据写进模块,第9位为1时,前8位作为命令写进模块,所以第九位相当于一个标志吧。请问我要怎么才能让单片机的数据位为9呢。

回复

使用道具 举报

5#
ID:883242 发表于 2023-9-13 16:16 | 只看该作者
年薪30w 发表于 2023-9-13 15:13
好的,非常感谢。我现在单片机需要与一个模块进行串口通信,模块描述数据位是9位,其中第9位为0时,前8位 ...

如果单片机就是没有9位USART,那么只能有一个解决方案,就是加上奇偶校验位。另外计算8位数据的奇偶位,牺牲掉一个数据位,强制让奇偶位为1或0,这个方案根据你传输数据的不同,有可能不能用。
回复

使用道具 举报

6#
ID:1040483 发表于 2023-9-13 16:31 | 只看该作者
yzwzfyz 发表于 2023-9-13 15:08
可以自己定义(软件方式):
用一根、两根、三根IO线,都可以,只要双方的通讯协议一样即可。
以两线为例 ...

谢谢!
回复

使用道具 举报

7#
ID:1040483 发表于 2023-9-13 16:35 | 只看该作者
Hephaestus 发表于 2023-9-13 16:16
如果单片机就是没有9位USART,那么只能有一个解决方案,就是加上奇偶校验位。另外计算8位数据的奇偶位, ...

请问如何强制让奇偶校验位为1或0呢,我这边使用ESP32-S3在配置串口时只有失能奇偶校验位、使能偶检验、使能奇校验三种可选。另外此MCU的UART的发送函数是按字节发送,不是按位发送
回复

使用道具 举报

8#
ID:1092275 发表于 2023-9-13 17:09 | 只看该作者
硬件决定了软件
回复

使用道具 举报

9#
ID:213173 发表于 2023-9-13 20:28 | 只看该作者
串行通讯不必非得用硬件串口。
回复

使用道具 举报

10#
ID:883242 发表于 2023-9-13 22:47 | 只看该作者
年薪30w 发表于 2023-9-13 15:13
好的,非常感谢。我现在单片机需要与一个模块进行串口通信,模块描述数据位是9位,其中第9位为0时,前8位 ...

还是把模块描述贴出来吧,我就不信有这么屌的公司自绝于,故意让自己的产品跟主流不兼容,卖不出去。
回复

使用道具 举报

11#
ID:1040483 发表于 2023-9-14 08:30 | 只看该作者
Hephaestus 发表于 2023-9-13 22:47
还是把模块描述贴出来吧,我就不信有这么屌的公司。

CH375 的串行数据格式是 1 个起始位、9 个数据位、1 个停止位,其中前 8 个数据位是一个字节
数据,最后 1 个数据位是命令标志位。第 9 位为 0 时,前 8 位的数据被写入 CH375 芯片中,第 9 位为
1 时,前 8 位被作为命令码写入 CH375 芯片中。

这是模块datashit关于串口的描述,他其实还支持并口
回复

使用道具 举报

12#
ID:1040483 发表于 2023-9-14 08:31 | 只看该作者
wulin 发表于 2023-9-13 20:28
串行通讯不必非得用硬件串口。

请高人详细指点!
回复

使用道具 举报

13#
ID:213173 发表于 2023-9-14 13:04 | 只看该作者
年薪30w 发表于 2023-9-14 08:31
请高人详细指点!

MCU既可以与CH375并口连接,也可以与CH375串口连接。也不存在你描述的串口传输9bit数据问题。如果MCU端口够用,采用并口连接更好。搜索本论坛有相关示例程序。 CH375中文手册.pdf (235.54 KB, 下载次数: 3)

回复

使用道具 举报

14#
ID:1040483 发表于 2023-9-14 14:57 | 只看该作者
wulin 发表于 2023-9-14 13:04
MCU既可以与CH375并口连接,也可以与CH375串口连接。也不存在你描述的串口传输9bit数据问题。如果MCU端口 ...

我就是参照了这个手册,他说串行连接是需要数据位9位啊。但是之前我一直用的串口助手测的,8位,不知道为什么也能正常收发数据
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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