
配置串口需要包含头文件
其中最核心的配置结构体为:
如何获取该结构呢?我们 *** 作串口跟 *** 作文件一样,也是调用 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_linux.c 文件。
参考:
1、将设备u口插入pc 2、输入#lsmod 先看看能否检测到这个设备,就看有没有pl2303字眼可以了。如果有,则不需要再装驱动。另外如果有的话最好再用dmesg | grep usb查找如果看到: “drivers/usb/serial/usb-serial.c: USB Serial support registered for Generic” 就说明设备已被识别,然后往下看 drivers/usb/serial/usb-serial.c: USB Serial support registered for PL-2303 usb 2-2: PL-2303 converter now attached to ttyUSB0 (or usb/tts/0 for devfs)如果没有则需要驱动程序,一般硬件厂商都会提供,如果真的没有的话就只有到网上下载了,一般2.6内核以上的都支持。 安装完毕后再输入这个命令瞧瞧,是否安装成功。说明我的usb转串口芯片是PL-2303,对应系统设备是 dev/usb/ttUSB0,最后只需在minicom配置文件里将端口改成/dev/usb/ttyUSB0就可以使用了:) 3、检测步骤,检测步骤如下,只是需要主意的是设置串口设备的时候可能不是ttyS2了,有可能是ttyUSB0或者ttyUSB1等之类的,我这里就是ttyUSB0(我用的是Fedora Core 8)。 因此,最好请您先看一下/dev下面的文件。 USB转串口安装 型号PL2303h 1、插入USB转串口到主机, 2、启动 Linux,打开终端,检查是否存在设备/dev/ttyUSB0,如果没有就建立一个: mknod /dev/ttyUSB0 c 188 0 如果有多个USB口,可以类推,建立/dev/ttyUSB[1-n],注意从设备号要累加, 如:mknod /dev/ttyUSB[1-n] c 188 [1-n] 3、输入命令:#setserial /dev/ttyS0 -aP (COM-1) 显示内容:/dev/ttyS0, Line 0, UART: 16550A, Port: 0x3f8, irq: 4 Baud_base: 115200, clos_delay: 50, divisor: 0 closing_wait: 3000, closing_wait2: infinite Flags: spd_normal skip_test 4、输入命令:#setserial /dev/ttyS2 -a (COM-3) 显示内容:/dev/ttyS2, Line 2, UART: unknown, Port: 0x3e8, irq: 4 Baud_base: 115200, clos_delay: 50, divisor: 0 closing_wait: 3000, closing_wait2: infinite Flags: spd_normal skip_test 第3、4步 *** 作的目的主要是对主机自带串口及PCI扩展串口的区别。区别在于4显示的内容中UART:未知unknow。不过若您检测这一步的时候 UART为16550A而不是unknow,证明你的系统已经认识了扩展的串口,不需要进一步设置,直接跳入第8步测试就可以了。 5、设置好了后是不是需要测试一下是否能够通讯呢?最好的办法是两台pc相连。如果pc为windows *** 作系统就用超级终端,是linux呢就用minicom吧 6、装有linux的机器,首先需要设置一下监听的串口参数,输入命令 #minicom -s 进入界面后有个框d出来,如果你学过英文的话,就会知道选择哪个的。应该是第三个吧,串口参数设置。 将第一行更改为 /dev/ttyUSB0 波特率也更改您所需要的。 更改完后保存,保存的那个菜单应该是 save ... df1 最后exit 7.重启minicom, 复位目标板,看是否有打印信息?如果没有请确认:a)USB/串口线没问题,b)确认你使用的USB口是第一个(一个个的试吧,一般电脑不会标示出来) 在另外一台机器发送数据,这台机器minicom界面就能够收到信息了。另外不要把两个COM顺序弄翻了,如果弄错了哪个是COM3 COM4测试可就不灵便咯。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)