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

[OT]我的2010(加班无极限)

在今年的最后几天,做一下总结. 1. 今年跳了两次槽(~!#$%^&*()) 前面俩公司还都做WM开发(这不之前写了不少WM文章),不过最后这个公司,做mmo服务器,所以目前一直在做Linux上面的写代码. 成功从C#转型到C. 2. C#->C的转换,是在第二个公司完成的,他们不用C#写WM程序. 第一个…

前端小知识点(5):JS垃圾回收机制

目录 一、什么是垃圾回收 二.垃圾回收机制原理 三、垃圾回收方法 3.1 引用计数 3.2 标记清除 内存常见内存泄露以及解决方法 4.1 全局变量&#xff1a; 4.2 定时器和回调函数 4.3 闭包 4.4 没有清理DOM元素引用&#xff1a; 一、什么是垃圾回收 垃圾回收是一种自…

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 可以看到第四行…

带可变参数的宏函数和普通函数实现

From: http://www.vimer.cn/2010/03/cc%E5%AE%8F%E5%AE%9A%E4%B9%89%E7%9A%84%E5%8F%AF%E5%8F%98%E5%8F%82%E6%95%B0.html 编写代码的过程中&#xff0c;经常会输出一些调试信息到屏幕上&#xff0c;一般会调用printf这类的函数。 但是当调试解决之后&#xff0c;我们需要手工将…

SAP 免费赠与客户货物的销项税处理

免费赠与客户货物的销项税处理 如果免费赠与客户货物却要体现销项税&#xff0c;如何处理&#xff1f;在实际业务中因为免费货物是不免税的。所以大家总是以为使用0费用解决但是有一种情况是存在于视同销售。 即D&#xff1a;销售费用 C&#xff1a;销项税 SAP中的处理逻…

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

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

linux更新命令yum,Linux中升级更新命令yum upgrade和yum update的区别

Linux中升级更新命令yum upgrade和yum update的区别更新时间&#xff1a;2019-10-31 17:21最满意答案Linux升级命令有两个分别是yum upgrade和yum update, 这个两个命令是有区别的:复制代码代码如下:yum -y update升级所有包同时也升级软件和系统内核复制代码代码如下:yum -y u…

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…

C语言日志操作类实例

包含三个主要的文件&#xff1a;joefunction.h(c), m.c(主函数文件) 1. m.c #include <stdio.h> #include <string.h> #include <time.h> #include "joefunction.h"extern FILE *g_logFile;int main(int argc, char *argv[]) {char temp[16] {0}…

ESX与ESXi管理员必备25个命令

ESX与ESXi管理员必备25个命令VMware ESX和ESXi命令这些VMware ESX和ESXi的命令可以运行在ESX服务控制台&#xff08;本地或远程使用Secure Shell&#xff09;或RCLI&#xff08;在VMware Infrastructure 3&#xff09;和vSphere CLI的&#xff08;在vSphere&#xff09;。在RCL…

前端小知识点(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;另外一点是串口配置只提供了波特率参数配置&…

《软件开发计划》

校友聊项目开发计划书 项目名称&#xff1a;校友聊 1.引言 1.1编写目的 编写本文档的目的是为了校园内网的用户使用本软件进行文字&#xff0c;视频聊天&#xff0c;而不耗费内网的外网的流量。 1.2背景 基于校园内网用户对流量的强大需求&#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…