树莓派UART串口编程--使用wiringPi库-C开发【1-基础应用】
一、串口说明
莓派3B+上UART串口位于GPIO的8脚和10脚,分别为GPIO8=Tx,GPIO10=Rx。在连接外部接口时,需要交换接口,即GPIO8连接到外设的Rx,GPIO10连接到外设的Tx。Rpi3的接口如下:
Rpi3B+的GPIO8和GPIO10该串口不能直接用,Rpi3B+包含两组串口,一组硬串口ttyAMA0和一组软串口ttyS0,硬串口就是GPIO8和GPIO10,系统默认分配给了蓝牙设备,查询设备外设智能看到ttyS0。因此,需要将硬串口释放出来。
二、ttyAMA0硬串口配置
查看串口配置情况: ls -l /dev
找到serial,看它映射的是哪个设备。有可能是显示的一个,有可能是两个。
1、关闭ttyAMA0服务
sudo systemctl stop serial-getty@ttyAMA0.servicesudo systemctl disable serial-getty@ttyAMA0.service
2、删除控制台串口输出
sudo vi /boot/cmdline.txt ,删除语句 console=serial0,115200,变成如下:
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
3、切换蓝牙为软串口,释放硬件串口
sudo vi /boot/config.txt ,最后一行增加
dtoverlay=pi3-miniuart-bt
4、重启Rpi3
sudo reboot
5、查看设备信息
ls -l /dev
三、使用wiringPi库开发串口
安装wiringPi库后,可以在/usr/linclude找到wiringPi相关的头文件:
要查找wiringPi库的包含头文件在哪里,可以使用find命令查找:
sudo find / -name wiring*
主要是四个头文件:
- wiringPi.h 基本IO驱动和常用配置定义;
- wiringPiI2C.h I2C驱动的头文件;
- wiringPiSPI.h SPI驱动的头文件;
- wiringSerial.h Serial驱动的头文件;
串口驱动库主要提供以下接口:
- extern int serialOpen (const char *device, const int baud) ;//打开串口,输入设备描述符和串口波特率,返回串口的设备ID
- extern void serialClose (const int fd) ;//关闭串口,
- extern void serialFlush (const int fd) ;//清空缓存区
- extern void serialPutchar (const int fd, const unsigned char c) ;//输出一个字符
- extern void serialPuts (const int fd, const char *s) ;//输出字符串
- extern void serialPrintf (const int fd, const char *message, ...) ;//格式化输出
- extern int serialDataAvail (const int fd) ;//返回设备缓存区接收到的数据个数
- extern int serialGetchar (const int fd) ;//从设备ID读取一个字符
新建一个文件myuart.c,如下代码进行测试:
#include<wiringPi.h>
#include<wiringSerial.h>
#include<stdio.h>
#include<string.h>
#include<time.h>
void delay_ms(int ms);
int main()
{int filedevid;int recbytenum;int i;char buf[1024];memset(buf,0,1024);wiringPiSetup();if((filedevid=serialOpen("/dev/ttyAMA0",115200))<0){printf("/dev/ttyAMA0 Open Faild\r\n");return -1;}else{printf("/dev/ttyAMA0 Open with 115200, success\r\n");while(1){recbytenum = serialDataAvail(filedevid);if(recbytenum > 0){i=0;while(recbytenum--){buf[i++] = serialGetchar(filedevid);}printf("Rpi uart recv: %s\r\n",buf);serialPrintf(filedevid,"Rpi uart send: %s\r\n",buf);memset(buf,0,1024);}}}
}
四、编译和测试
编译命令:
gcc myuart.c -o runuart.o -l wiringPi
运行:
五、分析和讨论
上面的方法主要记录了Rpi3的Uart基本操作,但是存在以下问题:
1、串口无法修改奇偶校验、数据位数;
2、数据接收存在分包现象,主要是由于wiringPi库只提供了serialDataAvail函数,因此该串口驱动还需要进一步优化和改进。
可以参考下一篇博文:树莓派UART串口编程--使用wiringPi库-C开发【2-修改驱动】
树莓派UART串口编程--使用wiringPi库-C开发【1-基础应用】相关推荐
- 树莓派UART串口编程--使用wiringPi库-C开发【2-修改驱动】
一.前言 上一篇博文记录了使用wiringPi提供的串口驱动wiringSerial.c wiringSerial.h,并基于该驱动对串口进行简单的通信,测试中发现该串口的驱动比较简单,接收数据会存在 ...
- ft4232树莓派linux扩展串口,树莓派Linux串口编程实现自发自收
串口是计算机上一种非常通用设备通信的协议,常用PC机上包含的是RS232规格的串口,具有连接线少,通讯简单,得到广泛的使用. Linux对所有设备的访问是通过设备文件来进行的,串口也是这样,为了访问串 ...
- 深入浅出VC++串口编程之短信应用开发
前面数次连载我们以较长的篇幅讲解了串口通信的硬件原理.DOS平台控制以及基于WIN32 API.控件和第三方类的串口编程.作为本系列文章的最后一次连载,本章将给出一个典型的应用实例:西门子短信服务模块 ...
- 树莓派4B PWM温控风扇 wiringpi库 PWM调整频率 54M PWM频率不对
总结 很多博客文章都是说树莓派PWM是按19.2M基频率来算的,今天用逻辑分析仪抓了一下波形后发现频率有问题,然后按测得的频率反推,算出来我这里好像是按54M的时钟频率来的,不清楚是什么情况.我这里的 ...
- 关于linux下UART串口编程的困惑
之前对struct termios结构体的几个字段一直困惑,主要不知道它的作用,内核对应的struct ktermios结构体如下 struct ktermios {tcflag_t c_iflag; ...
- 树莓派交叉编译(PS交叉编译链下载安装、配置永久环境变量、带WiringPi库交叉编译、软链接)
目录 一.本章概述 二.交叉编译工具链的下载安装 下载 安装 交叉编译链临时有效 交叉编译链永久有效 三.交叉编译的使用 对比gcc与armgcc PC端交叉编译发送到树莓派运行 四.带WiringP ...
- C——Linux下的串口编程
原 C--Linux下的串口编程 2017年06月06日 19:30:50 C_Aya 阅读数:11537 <span class="tags-box artic-tag-box&qu ...
- 8_UART串口编程
第八章 UART串口编程 8.1 UART介绍 8.1.1 UART串口简介 UART全称是通用异步收发传输器(Universal Asynchronous Receiver/Transmitte ...
- 树莓派ZeroW学习笔记【2】wiringPi串口编程
一.树莓派ZeroW串口(UART)使用环境搭建 根据官方信息(https://www.raspberrypi.org/documentation/configuration/uart.md),树莓派 ...
最新文章
- R语言进行dataframe数据左连接(Left join):使用R原生方法、data.table、dplyr等方案
- 如何利用报表工具FineReport实现报表列的动态展示
- 算法踩坑6-二叉搜索树排序
- api怎么写_PHP开发api接口安全验证
- NC119-最小的k个数
- 【机器视觉】 HDevelop语言基础(六)-错误处理
- java锁的膨胀过程和优化
- 小程序开发好学吗?需要掌握哪些知识技能?
- 从 CVE-2020-1048 到 CVE-2020-17001:Windows打印机模块中多个提权漏洞分析
- 查看创建的hive表对应的hdfs文件路径
- android开机动画多长时间_Android开机动画及黑屏
- Sql Server 数据库出现“可疑”的解决办法
- Tcp协议socket通信数据包粘包问题分析及解决方案
- 终极邮件搜索群发大师 v3.47 绿色
- AXURE版富文本输入框(富文本编辑器)教程+下载
- 品味之旅见行见心 ——香港科大EMBA郎酒庄园深度体验之旅
- 在UBUNTU 13.1 中使用五笔拼音混合输入法
- 潘悟云方言计算机,山东方言精组与见晓组声母的分合研究
- 基于mindwave脑电波进行疲劳检测算法的设计(5)
- 做社交电商,你还没有用小程序?
热门文章
- linux svn log 乱码,解决p42svn中文log乱码的问题
- idea mybatis generator插件_SpringBoot+MyBatis+Druid整合demo
- php 禁用通知,推送消息能不能区分禁止通知和卸载两种类型?
- java javax.xml.ws_如何通过javax.xml.ws.Service进行调用
- 地址栏 输入 参数 刷新参数丢失_小米11 Pro屏幕参数曝光:2K屏幕+120Hz刷新率
- 用java判断一个年份是否为闰年_判断闰年还是平年
- 定时关机,适用于windows系统
- SuperAgent 中文乱码星号问号问题
- [react] react怎么拿到组件对应的DOM元素?
- React开发(151):外部引入记得导出