关于怎样在linux上用C写串口收发数据程序

关于怎样在linux上用C写串口收发数据程序,第1张

对于编程来说,没什么区别,通过控制485的使能端该程序完全可以使用。唯一的区别就是你在发送的时候通过程序把485的控制脚拉高,接收的时候把他拉低就可以了。至于电气方面的区别:RS232是全双工,可以同时收发,RS485是半双工,不能同时收发,还有电平信号不一样,这个编程你就不要理了。

由于linux的内核参数信息都存在内存中,因此可以通过命令直接修改,并且修改后直接生效。但是,当系统重新启动后,原来设置的参数值就会丢失,而系统每次启动时都会自动去/etc/sysctlconf文件中读取内核参数,因此将内核的参数配置写入这个文件中,是一个比较好的选择。

首先打开/etc/sysctlconf文件,查看如下两行的设置值,这里是:

kernelshmall = 2097152

kernelshmmax = 4294967295 如果系统默认的配置比这里给出的值大,就不要修改原有配置。同时在/etc/sysctlconf文件最后,添加以下内容:

fsfile-max = 6553600

kernelshmmni = 4096

kernelsem = 250 32000 100 128

netipv4ip_local_port_range = 1024 65000

netcorermem_default = 4194304

netcorermem_max = 4194304

netcorewmem_default = 262144

netcorewmem_max = 262144

这里的“fsfile-max = 6553600”其实是由“fsfile-max = 512 processes”得到的,我们指定processes的值为12800,即为“fsfile-max =512 12800”。

sysctlconf文件修改完毕后,接着执行“sysctl -p”使设置生效。

[root@localhost ~]# sysctl -p 常用的内核参数的含义如下。

kernelshmmax:表示单个共享内存段的最大值,以字节为单位,此值一般为物理内存的一半,不过大一点也没关系,这里设定的为4gb,即“4294967295/1024/1024/1024=4g”。

kernelshmmni:表示单个共享内存段的最小值,一般为4kb,即4096bit

kernelshmall:表示可用共享内存的总量,单位是页,在32位系统上一页等于4kb,也就是4096字节。

fsfile-max:表示文件句柄的最大数量。文件句柄表示在linux系统中可以打开的文件数量。

ip_local_port_range:表示端口的范围,为指定的内容。

kernelsem:表示设置的信号量,这4个参数内容大小固定。

netcorermem_default:表示接收套接字缓冲区大小的缺省值(以字节为单位)。

netcorermem_max :表示接收套接字缓冲区大小的最大值(以字节为单位)

netcorewmem_default:表示发送套接字缓冲区大小的缺省值(以字节为单位)。

netcorewmem_max:表示发送套接字缓冲区大小的最大值(以字节为单位)。

安装完成后,请不要着急打开软件。需先进行配置。具体步骤如下:

查看串口设备及文件权限

linux下的所有 *** 作面向用户的都是文件 *** 作,在对串口 *** 作之前,我们应该先确认自己对该文件有没有读写权限。

linux下的usb串口命名为ttyUSB,运行上面命令,可以看到有几个设备挂载。

我们这里是:

只有ttuUSB0再用lsusb查看:

usb 004正是我们挂上去的usb转串口线缆,使用的芯片是PL2303。

但是正如上面显示,ttyUSB0这个设备是root所有的,所以,我们以普通用户身份打开minicom是没法访问该文件的。

运行sudo minicom -s便进入了minicom的配置界面,使用上下键选择Serial port setup,回车。此时光标在“change which setting”后面停留,它的上面有如下菜单:

我们只需输入上面对应的字母,就可以进如相应的菜单进行设置。设置完成,回车,光标会回到“change which setting”后面,如此重复。完成按回车返回主菜单即可。

返回主菜单后,选择“Save setup as df1”,将其保存为默认设置,然后选择 Exit退出。需退出后重新打开minicom,软件才会使用上述参数进行初始化。

注意:如果没有使用USB转串口,而是直接使用串口,那么Serial Device要配置为/dev/ttyS0。

如果上面设置顺利,打开minicom

重新给设备上电后,此时,窗口里就有信息打印出来了。

1)需使用Ctrl+a 进入设置状态

2)按z进入设置菜单

(1)O键:打开配置选项;

(2)W键:自动卷屏。当显示的内容超过一行之後,自动将後面的内容换行。这个功能在查看内核的启动信息时很有用。

(3)C键:清除屏幕的显示内容;

(4)B键:浏览minicom的历史显示;

(5)X键:退出minicom,会提示确认退出。

Ctrl + A --> O

选择"Filenames and paths"

更多的参数,参见"man minicom"的输出。

如果不加这个项,那么在minicom和pc交互的时候中键入命令超过一行时候会被截断,(这时候可以通过 <C-a> w 来开和关切换截断行功能)

这样,启动之后我们会发现显示的内容不是黑白的了。

这样,启动之后,所在minicom的输出都会在<filename>中保留一份,如果原来文件存在,则追加,不存在则创建一个。

这样,我们可以取代用 <C-a> 发送命令的方式,将 <C-a> 替换成 [Alt] 或者 [ESC]

这里,<filename>是你的脚本文件的名字,应该指定绝对路径,否则就会在你启动minicom的路径下寻找。

Minicom是基于窗口的。要d出所需功能的窗口,可按下 Ctrl-A (以下使用C-A来表示Ctrl-A),然后再按各功能键(a-z或A-Z)。先按C-A,再按'z',将出现一个帮助窗口,提供了所有命令的简述。配置 minicom(-s 选项,或者C-A、O)时,可以改变这个转义键,不过现在我们还是用Ctrl-A吧。

这里,只给出很少的命令,更多的交互命令参见"<C-a> z"的帮助输出。

minicom -s 或启动minicom之后运行 <C-a> o 来进行配置。

C:脚本文件的存放位置: <C-a> g 运行脚本时的路径 。

D:选择脚本程序: 默认 runscript ,也可以选择 bash 脚本格式。

可以参考man手册 man runscript 交互命令中可以运行" <C-a> G "来运行脚本。

参考资料

简单说几句吧,linux下的设备都是文件,流程也无非是open, read/write, close等

当然,串口你得设置各种属性才行对不对,比如在win下的超级终端就设置了波特率啊,停止位啊,奇偶校验啊什么的,这些属性都通过

int tcgetattr(int fd, struct termios termios_p);

int tcsetattr(int fd, int optional_actions, const struct termios termios_p);函数来设置。

完整代码吗自己去google,一把一把的,其实最重要的是设置好属性,剩下的就是read,write的问题咯。

希望对你有用

对了,了解终端函数的详情请在linux命令行终端获取: man termios

使用串口协议登录Linux终端控制台,通过Zmodem文件传输协议接收一个外部文件。

命令:rz -y

会d出文件浏览窗口,选择要上传的文件即可。

-y 表示若文件已存在,则覆盖。

连串口,中断设定一般控制这几个参数就可以了: 1。波特率 -》一般串口设置成 ,你的终端可以输出讯息,这个参数应该没问题 2。奇偶校验 -》一般关闭 3。流控 -》 一般关闭 4。停止位 -》一般设置为无 5。有时候要设置数据位 -》

串口发送的数据是8位的,最大为255,就是FF,如果要发送大于255的数,必须变成几个字节发送,例如要发送十进制2315,就要将数据拆分 data(0)=2315/256; data(1)=2315%256; 这样就拆分开数据,再将数据发送出去。

以上就是关于关于怎样在linux上用C写串口收发数据程序全部的内容,包括:关于怎样在linux上用C写串口收发数据程序、linux 内核 配置串口、Linux串口调试工具--minicom等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9397422.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存