树莓派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*

主要是四个头文件:

  1. wiringPi.h 基本IO驱动和常用配置定义;
  2. wiringPiI2C.h I2C驱动的头文件;
  3. wiringPiSPI.h SPI驱动的头文件;
  4. wiringSerial.h Serial驱动的头文件;

串口驱动库主要提供以下接口:

  1. extern int   serialOpen      (const char *device, const int baud) ;//打开串口,输入设备描述符和串口波特率,返回串口的设备ID
  2. extern void  serialClose     (const int fd) ;//关闭串口,
  3. extern void  serialFlush     (const int fd) ;//清空缓存区
  4. extern void  serialPutchar   (const int fd, const unsigned char c) ;//输出一个字符
  5. extern void  serialPuts      (const int fd, const char *s) ;//输出字符串
  6. extern void  serialPrintf    (const int fd, const char *message, ...) ;//格式化输出
  7. extern int   serialDataAvail (const int fd) ;//返回设备缓存区接收到的数据个数
  8. 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-修改驱动】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux mint视频,Linux Mint 20.1 beta 发布,新增免费视频播放器

经过六个月的开发&#xff0c;Linux Mint 20.1“ Ulyssa”的 Beta 版于近日发布了。Mint 20.1 是一个长期支持(LTS)版本&#xff0c;基于 Ubuntu 20.04 LTS &#xff0c;将持续维护到 2025 年。该 Beta 版本基本上实装了此前预告的一些新功能&#xff0c;并提供了 Cinnamon、MA…

linux python pymysql,Python之pymysql的使用

在Python3.x中&#xff0c;可以使用pymysql来MySQL数据库的连接&#xff0c;并实现数据库的各种操作&#xff0c;本次博客主要介绍了pymysql的安装和使用方法。PyMySQL的安装一、.windows上的安装方法&#xff1a;在python3.6中&#xff0c;自带pip3&#xff0c;所以在python3中…

树莓派静态IP配置方法

一、网络接口文件 配置静态IP有个好处在于每次的访问IP是固定的&#xff0c;比如用到的samba服务器共享文件时可以不改动网络地址。树莓派网络接口在/etc/network/interfaces 文件中进行配置&#xff0c;打开该文件&#xff1a;sudo vi /etc/network/interfaces 可以看到第四行…

前端小知识点(2):普通字符串和new String有什么区别

目录 一、其实不仅字符串 二、那么到底为什么&#xff1f; 三、代码案例 四、运行结果 一、其实不仅字符串 var str abc; typeof str > string //他不是对象&#xff0c;可以有方法或者属性 var num 123; //他不是对象&#xff0c;可以有方法或者属性 typeof num …

Linux 管理登陆的用户/查看/剔除

Linux是多用户操作系统&#xff0c;支持多用户同时在线&#xff0c;支持对登陆用户的管理&#xff1a;查看与剔除等。 一、查看在线用户命令 命令&#xff1a; w 二、查看登录记录命令 命令 last 三、剔除在线用户命令 命令&#xff1a;sudo pkill -kill -t usr 四、pkill…

Windows下 maven3.0.4的安装步骤+maven配置本地仓库

简单讲下maven的安装步骤&#xff1a; 1.在安装maven之前&#xff0c;先确保已经安装JDK1.6及以上版本&#xff0c;并且配置好环境变量。 2.下载maven3&#xff0c;最新版本是Maven3.0.4 &#xff0c;下载地址&#xff1a;http://maven.apache.org/download.html 下载apache…

前端小知识点(3):JavaScript 单线程

目录 一、为什么 JavaScript 是单线程&#xff1f; 二、JavaScript是单线程&#xff0c;怎样执行异步的代码&#xff1f; 三、事件循环机制 四、代码1 五、结果1 六、代码2 七、结果2 一、为什么 JavaScript 是单线程&#xff1f; JavaScript 语言的一大特点就是单线程…

Linux安装samba的过程,Samba安装全过程

对于linux与windows共享&#xff0c;和平共处&#xff0c;我们可以用Samba软件Samba是一套免费的开源软件&#xff0c;可以在linux或其他类unix操作系统上实现windows域控制器&#xff0c;文件服务&#xff0c;打印服务等。Samba实现了windows系统所使用的核心网络协议&#xf…

树莓派UART串口编程--使用wiringPi库-C开发【2-修改驱动】

一、前言 上一篇博文记录了使用wiringPi提供的串口驱动wiringSerial.c wiringSerial.h&#xff0c;并基于该驱动对串口进行简单的通信&#xff0c;测试中发现该串口的驱动比较简单&#xff0c;接收数据会存在分包的现象&#xff0c;另外一点是串口配置只提供了波特率参数配置&…

【转】全面理解javascript的arguments,callee,caller,call,apply概念(修改版)

(注&#xff1a;在看到大家如此关注JS里头的这几个对象&#xff0c;我试着把原文再修改一下&#xff0c;力求能再详细的阐明个中意义 2007-05-21&#xff09;在提到上述的概念之前&#xff0c;首先想说说javascript中函数的隐含参数&#xff1a;arguments Arguments 该对象代表…

windows延缓写入失败相关问题解决办法

From: http://www.ggsafe.com/news/1324547234222.shtml 我们在使用电脑时&#xff0c;有时在不正常关机后电脑会出现这样那样的问题。windows延缓写入失败就是其中一个&#xff0c;很多网友在互联网上发帖求助windows延缓写入失败怎么办&#xff0c;出现这种情况一般都是由于电…

wince linux 性能,wince remote call profiler(性能分析)

如何使用1 建立工程,CPU类型必须于目标机型一致如ARMV4I,所以选择WCE Application,然后选择empty project2 project settings 中,link页,Object/library modules中添加 cecap.lib(前面有空格),Ingore libraries中添加,libc.lib(前面有逗号).C/C页Project Options最后添加 /call…

前端小知识点(4):JS 运行机制和存储

目录 被忽视的内存管理 JS工作原理 JS代码如何运行 JavaScript内存的生命周期 栈内存、堆内存 代码案例 运行结果 被忽视的内存管理 JavaScript不像C、C等语言——程序员必须通过调用内存管理接口&#xff0c;比如 malloc()和free()&#xff0c;自己手动分配和释放内存。…

Linux ps aux查看进程

一、ps 命令 ps 是Process Status的缩写&#xff0c;用于查看进程状态&#xff0c;ps 可以显示linux系统的所有进程信息。 用法&#xff1a; ps a 显示现行终端机下的所有程序&#xff0c;包括其他用户的程序。ps -A 显示所有程序。 ps c 列出程序时&#xff0c;显示每个程序…

2010数据库SQL Server 盘点

让我们一起来盘点一下2010数据库SQL Server 发布了那些给力的新品。 1. 微软发布SQL Server 2008 R2 微软公司于2010年4月21日宣布推出Microsoft SQL Server 2008 R2。SQL Server 2008 R2已经可以看作是本年度的一次重量级发布。微软公司努力将SQL Server打造为一个信息平台&am…

linux下有四个作业优先级,第一次作业:对Linux系统分析

一.操作系统的组成1.无进程的内核在一些操作系统当中操作系统的内核在所有的进程之外执行。也就是说操作系统有自己的内存区域和系统栈&#xff0c;当进程发生 中断&#xff0c;陷阱或系统调用时&#xff0c;此进程的上下文环境被保存在系统栈中&#xff0c;控制权转移给内…

前端小知识点(6):听了好多闭包,这次可能最懂

目录 一、作用域和作用域链 二、闭包 三、无意间共享环境[可以通过闭包解决] 代码一 结果一 代码二 结果二 代码三 结果三 一、作用域和作用域链 当函数声明的时候&#xff0c;函数会通过内部属性[scope]来记录创建范围 二、闭包 什么是闭包&#xff1a;闭包是一个函数加…

Linux的Qt编译出现:-1: error: cannot find -lGL问题的解决方法

Qt是支持跨平台的C图形用户界面应用程序开发框架&#xff0c;在一个平台上开发好应用程序可以在多个平台方便移植。 在将windows平台上开发的Qt界面程序移植到Linux Ubuntu系统中&#xff0c;在构建项目时出现以下编译问题&#xff1a; error: cannot find -lGL。 即&#xf…

git rebase原理(转)

git rebase 不会取回代码 要用git fetch先取回&#xff0c; git rebase 是合并代码。 &#xff08;1&#xff09;首先用git fetch返回服务器上的代码 &#xff08;2&#xff09;首先用git rebase origin/master 合并 &#xff08;3&#xff09;如果发生冲突了会提示&#xff0c…

前端小知识点(7):正则前瞻

目录 一、js中的正则表达式&#xff0c;只有前瞻没有后顾 正向前瞻&#xff1a;(?) 》匹配符合的 代码1 结果1 代码2 结果2 一、js中的正则表达式&#xff0c;只有前瞻没有后顾 正向前瞻&#xff1a;(?) 》匹配符合的 负向前瞻&#xff1a;(?!) 》匹配不…