串口的初始化常用函数
int tcgetattr(int fd , struct termios * termios_p)
int cfsetispeed(struct termios * termios_p, speed_t speed)
句柄 speed B115200 8位数据位 无奇偶校验 一位停止位 一共5个参数!
int cfsetospeed(struct termios * termios_p, speed_t speed)
int tcflush(int fd, int queue_selector)
- 由于树莓派3B+ 和 4B版本的硬件没有直接配置uart,需要写配置文件,使能相应的引脚!
- vim 查找字符串 /***
- 在文件夹 /boot/overlays 中找到 pi3-miniuart-bt
- 使得 serial 0 指向 GPIO 串口,serial 1 指向 ttys0
- 关闭控制台
wiringSerial 函数测试树莓派串口收发数据操作没有问题。
串口单次发送收不完,连续发送没问题。
不能使用简单的轮询查询方式。串口接收数据时,即使是数据块,也不可能一下就收到。
串口的驱动层会将每次收到的数据放在底层的缓冲区中,至于程序中读出的数据,它们应该就来自底层缓冲区。底层数据读出后就被清空,因此不会读到重复的数据。串口函数提供了一个询问指令用于检查缓冲区的长度,可以通过比较前后读到的长度是否相同,判定数据是否读完。一但读完可以一次将底层数据全部读出。