串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。
串口可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。
串口通信(Serial Communications)是串口按位(bit)发送和接收字节的通信方式,它是嵌入式物联网领域中常用的通讯方式。
典型的串口通信使用3根线完成,分别是发送、接收、地线。
由于串口通信是异步的,所以端口能够在一根线上发送数据,同时在另一根线上接收数据。
异步通信和同步通信都要进行发送方和接收方的“同步”。其中异步通信按字符进行传输,利用每一帧的起始位和停止位实现同步;而同步通信采用共同外部时钟来进行同步。
TX(Transmit Exchange)数据发送脚
RX(Receive Exchange)数据接收脚
GND(Ground)底线
参考资料:串口编程
在 Linux 系统中,操作设备的统一接口就是:open/ioctl/read/write。
对于 UART,又在 ioctl 之上封装了很多函数,主要是用来设置行规程。所以对
于 UART,编程的套路就是:
怎么设置行规程?行规程的参数用结构体 termios 来表示,可以参考 Linux
串口—struct termios 结构体:
这些函数在名称上有一些惯例:
下面列出一些函数:
具体函数参数使用时,可以查找手册!
函数不多,主要是需要设置好 termios 中的参数,这些参数很复杂,可以参考Linux 串口—struct termios 结构体。
程序:
我使用的是imx6ull板子
上机实验:
编译:arm-buildroot-linux-gnueabihf-gcc -o serial_send_recv serial_send_recv.c
复制过去板子上:cp serial_send_recv~/nfs_rootfs/
板子上运行:/mnt/serial_send_recv /dev/ttymxc5
GPS 模块与外部控制器的通讯接口有多种方式,这里我们使用串口进行通讯,
波特率为 9600bps,1bit 停止位,无校验位,无流控,默认每秒输出一次标准格
式数据。
这里我们只分析$GPGGA (Global Positioning System Fix Data)即可,它包含了 GPS 定位经纬度、质量因子、HDOP、高程、参考站号等字段。其标准格式如下:
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh
$XXGGA 语句各字段的含义和取值范围各字段的含义和取值范围见下表所示,XX 取值有:
◼ GPGGA:单 GPS
◼ BDGGA:单北斗
◼ GLGGA:单 GLONASS
◼ GNGGA:多星联合定位
例子:$GPGGA,074529.82,2429.6717,N,11804.6973,E,1,8,1.098,42.110,,,M,,*76。
编程:我们只需要在上面的实验代码上修改即可(修改while里面的内容即可)
子函数实现:
上机实验:
板子接线(imx6ull):
编译代码:arm-buildroot-linux-gnueabihf-gcc -o gps_read gps_read.c
复制过去板子:cp gps_read ~/nfs_rootfs/
板子上运行:/mnt/gps_read /dev/ttymxc5
实验效果:
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/cjjbc/37074.html