树莓派-wiringPi-UART串口
来源:互联网 发布:php 大端序 编辑:程序博客网 时间:2024/06/01 16:25
原文地址:http://nicekwell.net/blog/20171123/shu-mei-pai-wiringpi-uartchuan-kou.html
前面介绍了python操作串口的方法,是通过通用的串口库实现的。
用c语言当然也可以通过通用串口接口实现,而wiringPi也提供了自己的一套串口操作函数,可以很方便地操作串口。
事实上,wiringPi就是在上层利用通用串口操作接口,封装了一套自己的库函数。
概述
在前面python串口编程处就介绍了,树莓派3B的板载串口被蓝牙占用,但可以方便地使用USB串口模块。
树莓派的板载串口是给系统登录使用的,我们要先把这个功能关掉。
sudo raspi-config
Advanced Options –> Serial –> 关闭串口 –> 重启
树莓派上有两个串口,一个硬件串口,工作稳定,但是分配给了蓝牙;还有一个“mini-uart”,这个串口的时钟是由内核提供,所以不太稳定 。 在树莓派3B上,蓝牙和硬件串口是不能兼得。
这个链接(http://ukonline2000.com/?p=880)有介绍如何把硬件串口分配到GPIO14、GPIO15上,这里不做介绍了。
总之,在树莓派3B上,想要使用板载硬件串口是比较麻烦的,我们这里使用的是USB转串口模块,也能很方便地使用串口。
0、包含头文件
#include <wiringSerial.h>
1、打开串口
<fd> = serialOpen(char* device, int buad);
【功能】
打开串口文件,并设置波特率,返回文件编号。
【输入】
【输出】一个文件编号,代表这个串口设备文件,后面对这个串口的操作都会用到。
【说明】
1、wiringPi提供的设置(以及后面的读写功能)是简化的文件操作,可以满足大部分需求。
2、这里的是标准的linux文件描述符,可以使用linux标准的文件操作函数write()、read()等来操作。
后面也会有说明,wiringPi提供的读写功能是简化的,不提供二进制数值读写,但是可以使用linux标准的读写函数来操作。
2、写入(发送)
void serialPutchar(int fd, unsigned char c) ;
【功能】发送一个字节数据。
【输入】
fd是打开串口时的文件描述符。
输入的就是一个字节数据,可以用字符表示,也可以用十六进制数表示。
void serialPuts(int fd, char *s) ;
【功能】发送字符串。
【输入】
fd是打开串口时的文件描述符。
*s 是一个字符串,会发送该字符串,直到’\0’结束。‘\0’不会发送出去。
void serialPrintf(int fd, char *message, …) ;
【功能】功能类似于printf,可以同时发送多个字符串。
注意:以上两个发送函数只是把数据推送到发送缓冲区里,不会等待串口发送完成。后续程序如果要用到用到串口返回数据应当要考虑到串口传输时间。
并且最好等之前的数据全部发送完成后再发送新数据,否则可能会出问题,这也要考虑到串口发送数据的时间,可能需要等待。
关键是上层还没有找到判断串口发送完成的方法。
3、读取(接收)
int serialDataAvail(int fd) ;
【功能】获取接收缓冲区里的字节数。
【输入】创建串口设备文件时的文件描述符。
【输出】接收缓冲区里所存放的数据字节数。
int serialGetchar(int fd) ;
【功能】从接收缓冲区里读取一个字节数据。
【输入】创建串口设备文件时的文件描述符。
【输出】读取到的一个字节内容。虽然是一个字节内容,但仍然定义为了int型。
【说明】
如果缓冲区里没有数据,则会等待10s,相当于python里把timeout设置为10s。
10s过后如果还没有数据的话,则会返回 -1,十六进制显示为 0xffffffff。 这里的10s是wiringPi默认的,查看源代码可以看到:
4、缓冲区操作
void serialFlush(int fd) ;
清空缓冲区,放弃所有数据。
5、关闭串口
void serialClose(int fd) ;
- 树莓派-wiringPi-UART串口
- 树莓派-pypi-UART串口
- 树莓派3wiringPi安装以及串口相关调试和配置
- 通过串口UART登录树莓派
- UART串口
- 串口uart
- 串口UART
- 串口UART
- 树莓派---wiringPi串口使用(win10+树莓派3+usb转串口)
- 树莓派使用uart串口与串口设备通信
- 为树莓派装上WiringPi
- 树莓派wiringPi输出PMW
- 树莓派wiringPi库详解
- 树莓派安装wiringPi库
- 树莓派-wiringPi-GPIO
- 树莓派-wiringPi-时间函数
- Uart串口实验--TQ2440
- linux UART串口驱动
- Spring-boot使用Quartz实现多线程调度任务
- FPGA实验6:计数器、ROM和DDS
- maven仓库--sonatype nexus如何搭建集群
- mac xcode文件相对路径设置
- python四中方法实现字符串连接
- 树莓派-wiringPi-UART串口
- [数位DP]BZOJ 4513
- # 微信AccessToken、JSSDK关键属性获取
- shell编程的基本知知识<一>
- 不破不立!!!
- Nodejs学习笔记(十四)— Mongoose介绍和入门 && Nodejs学习笔记(十)--- 与MongoDB的交互(mongodb/node-mongodb-native)、MongoDB入门
- Effective c++ (1)
- 传统架构
- java学习总结系列II