一个字节有8位。115200/8=14400 字节。 但最重要的:串口都不是连续通讯,需要留有交互时间间隔,也有通讯封包格式。因此真正有效的通讯字节,一般可以按50%来计算(各种协议和情况是不相同的)。也就是1秒钟你的有效字节传输也就大约为1440050
一般,根据你的传输距离、数据流量大小和串口设备的性能来决定
传输距离长速度就要下降,流量大自然就要提升。有些串口设备在某些波特率下可能误差会比较大,要尽量避免使用那些波特率
一般对于普通的嵌入式系统,9600波特率已经足够了
波特率是1S内传输的位数,50M晶振指每秒内脉冲个数,即每秒5010^6的脉冲个数,每个脉冲1/(5010^6)秒。分频数为每N个脉冲发送一个数据。N[1/(5010^6)]=1/9600,N=5208简便算来,就是晶振除以比特率
关于串口设备,最好联系厂家询问是否提供API接口。
关于API接口一般是一个可供调用的DLL文件。
如果有可以直接在C#中引用,作为类库来 *** 作设备。
具体调用方式需要询问厂家或参阅api的文档说明。
不提供软件接口的设备是无法进行开发的。
我大概搜了下这个设备,设备是提供配套软件的,那么这款设备是有相关通讯接口类库的,也就是可以用C#进行开发。
如果找不到API文档,
请尝试用串口调试工具,跟踪配套软件的每一步 *** 作,获取串口通讯报文,用C#模拟 *** 作报文自己封装通讯类后进行开发。
配置串口需要包含头文件
其中最核心的配置结构体为:
如何获取该结构呢?我们 *** 作串口跟 *** 作文件一样,也是调用 open() 函数来打开串口,
这样我们就能够得到一个文件描述符 fd ,然后就可以调用 tcgetattr() 函数来获取上述配置结构体了。
Linux 串口默认的配置为:波特率 9600,数据位 8 位,无奇偶校验,停止位 1 位,无 CTS/RTS 。
以下介绍一些常用的配置项:波特率、奇偶校验、数据位、停止位、硬件控制流。
相关接口:
Linux 将串口的波特率分为了输入波特率和输出波特率,不过最常用的场景是将两者设置成一样。
cfgetispeed() 函数获取输入波特率, cfgetospeed() 函数获取输出波特率。 cfsetispeed() 函数设置输入波特率, cfsetospeed() 函数用于设置输出波特率,当然 cfsetspeed() 函数扩展为同时设置输入和输出波特率。
上述接口中的 speed_t 是一系列波特率的标志位,例如常用的 115200 波特率就为 B115200,参考下述选项:
设置奇偶校验位可以通过修改 termios 结构体中的 c_cflag 成员来实现,若无校验,则将 PARENB 位设为 0;若有校验,则 PARENB 为 1。之后再根据 PARODD 来区分奇偶校验, PARODD 为 1 表示奇校验, PARODD 为 0 表示偶校验。例如设置无奇偶校验位:
设置数据位可以通过修改 termios 结构体中的 c_cflag 成员来实现,CS5、CS6、CS7 和 CS8 分别代表数据位 5、6、7 和 8。不过在设置数据位之前,需要先用 CSIZE 来做屏蔽字段,清楚这几个标志位,例如设置数据位为 8 位:
设置停止位可以通过修改 termios 结构体中的 c_cflag 成员来实现, CSTOPB 位为 1 表示 2 位停止位, CSTOPB 位为 0 标志 1 位停止位。例如设置停止位为 1 位:
设置硬件控制流可以通过修改 termios 结构体中的 c_cflag 成员来实现, CRTSCTS 为 1 表示使用硬件控制流,为 0 表示不使用硬件控制流。例如使能硬件控制流:
当然,最后还需要用 tcflush() 抛弃存储在 fd 里的未接收的数据。
再利用接口 tcsetattr() 函数将配置信息写入文件描述符 fd :
这样整个串口最常用的用法就配置完成了。
具体的配置使用可以参考我的项目 HCI-Middleware 里的 hci_transport_uart_linuxc 文件。
参考:
以上就是关于新手求教如何使用串口读取波特率为115200的字符串全部的内容,包括:新手求教如何使用串口读取波特率为115200的字符串、串口通信的波特率如何确定、cpld串口波特率具体怎么算,比如说50M的晶振,要得到9600比特率,应该多少分频等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)