全志H616开发学习笔记(三):WiringPi安装与基本使用
官方外设SDK——WiringPi安装与基本使用
所谓外设,指通过IO口、串口等方式连接,通过IIC、PWM等方式控制的外部设备
外设和开发板建立连接,但大多数时候开发板与外设并不一定是一个厂家生产的,外设往往并不能被直接识别。所以要实现对设备的控制,就需要驱动程序。在Windows平台上有51单片机、STM32的开发经验,到了Linux环境,第一阶段先基于一个官方的外设开发SDK:wiringPi
来学习设备的控制,接着学习自己编写设备驱动,加载驱动,应用层访问驱动,这样会对基于ARM Linux外设驱动开发难度和过程有一个更立体的感受。
wiringPi
安装
库文件获取
git clone https://github.com/orangepi-xunlong/wiringOP
(如果开发板网络未配置好,可在Windows环境下载文件后通过MobaXterm
传到orangepi
)进入库目录,清除编译信息并执行构建
./build clean;./build
检验
gpio
口能否正常读取:

该命令输出了开发板上的物理针脚(从1-26有用,27后不存在!)以及与编程时实际使用编号的对应关系。供电口所在方向为右后方,由于开发板没有标注针脚,使用时注意不要插错针脚。
串口基础回顾
串口是串行接口的简称,也叫串行通信接口或串行通讯接口(常指COM接口),采用穿行通信方式。
串口协议的内容重点,包括波特率、奇偶校验位、数据位、停止位、数据寄存器的配置等
串行接口的特点:数据一位一位地顺序传送,通信线路简单,只要一对传输线路就可以实现全双工双向通信(可直接利用电话线作为传输线),大大降低了通信的成本,特别适合远距离通信。
串口接线:TX-RX,RX-TX交叉接线
常见的串口协议有RS232
RS422
等,单片机一般使用非标准的异步串行UART,即一头TTL电平,一头RS232
电平
这节课的目标,就是基于全志的Linux系统,通过串口向PC机发送数据,并通过串口调试助手查看数据
在一些较为复杂的(学习、开发)场景中,香橙派、树莓派等“有系统”的开发板,由于性能上比较强大,可以承担复杂的数据运算、用户界面交互等工作,充当上位机的角色;而对于一些需要和底层交互,但又不好直接从Linux
上面操作,比如温湿度传感器、振动传感器等基础模块,这些底层的交互可以交给51单片机去完成
基于wiringPi
的串口开发
前面也接触过了,香橙派初始刷机登录的时候,就是采用的串口通信,这组串口ttyS0
主要用于指令的传递,对于数据通信,我们常用ttyS5
,即上面GPIO
引脚图中的TXD.5
和RXD.5
首先看一下wiringPi
串口的示例代码的运行效果:

该程序顺序向串口输出了ASCII
码为0-255的字符,打开AiThinker
串口调试助手,向串口发送数据,屏幕上也将显示对应的ASCII
码。但是示例代码的逻辑是收和发在一个进程里边,有一点难以阅读
我们将其进行改造,通过创建线程的方式,主进程用于收,一个线程用于发。
点击展开
1 |
|
这里注意serialOPen
时选择串口S5,并在接收字符时直接当字符而不是ASCII
码输出。
这些函数我们也可以自己实现,因为WiringPiSetup
实际上也是调用了C
语言库中的标准函数,而Linux对串口也有专用的系统API可供调用
至于wiringPi
库的串口源码,以及对应到C库源码的具体实现,如果想要了解可以先阅读serialTest.c
,使用SourceInsight
一步一步跟到无法往下查找,最终查到的函数,在glibc-2.3.5
项目中,按Ctrl
+/
进行全局查找即可。
小结:这些函数相当于还是对应到标准的文件:serialOpen
、serialGetchar
、serialPutChar
,到基本C的层级,对应open
、read
、write
等基本方法。在Linux上进行开发,这些封装好的函数能够熟练使用就行了。