2018最新最详细 树莓派3B+ QT5 串口收发配置与用户程序开机自启方法图文教程

版权声明:本文为博主NJU_ChopinXBP原创文章,发表于CSDN,仅供交流学习使用,转载请私信或评论联系,未经博主允许不得转载。感谢您的评论与点赞。 https://blog.csdn.net/qq_20304723/article/details/82460992

2018.9.6

由于实验室项目需要处理数据并用串口进行发送,最后还要开机自启,专门鼓捣了一番。由于网上的方案随着树莓派本身版本变化而不适应,因此调试过程中也实在耗费了不少功夫。最有价值的调试方案还是官方的英文教程:Raspberry Pi 3 UART Boot Overlay Part Two,本文也是主要参照英文教程的方法进行调试,顺便附加了网上的一些其他经验。

本文分为两部分:1.树莓派串口数据发送配置(包括QT测试),2.树莓派用户程序开机自启(QT release的用户程序)


环境:

树莓派3B+ Version 2018 June(理论上Raspbian Jessie releases 2016年3月18日后的版本均适用)

Qt Creator 4.2.0 Based on Qt 5.7.1 (GCC 6.2.1 20161124, 32 bit)


串口发送数据:

首先先解释一下为什么树莓派3B+使用串口收发数据这么麻烦。树莓派内部有两个串口,

1. 硬件串口:官方称为PL011 UART,对应软件上的serials1,默认使用ttyS0,默认分配给蓝牙

2. 迷你串口:官方称为mini-uart,对应软件上的serials0,默认使用ttyAMA0,没有时钟源,必须由内核提供时钟参考源,这样以来由于内核的频率本身是变化的,就会导致“迷你串口”的速率不稳定。

因此我们希望能够稳定地使用硬件串口进行数据收发,解决思路是:使能串口,更换映射关系令serials1对应ttyAMA0,关闭硬件串口控制的蓝牙功能,将硬件串口重新恢复给GPIO的串口使用。

具体调试与实现步骤:

1. 串口线连接

注意引脚与图中接线,树莓派与串口连接线的RXD与TXD相互反接,树莓派GPIO中串口的管脚在p6、p8和p10(注意图中的白线和灰线)。

2. 开启串口功能

sudo raspi-config

3. 恢复串口使用并设置为通用串口

sudo nano /boot/config.txt

末尾添加

dtoverlay=pi3-miniuart-bt

4. 关闭串口控制台

sudo nano /boot/cmdline.txt

替换配置文件内容为

dwc_otg.lpm_enable=0  console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4  elevator=deadline fsck.repair=yes   rootwait

5. 关闭蓝牙功能与禁用串口控制台功能

关闭蓝牙

sudo systemctl disable hciuart

禁用串口控制台(由于已经有上述步骤4,此步非必须)

sudo systemctl stop [email protected]
sudo systemctl disable [email protected]

6. 下载串口测试工具minicom

sudo apt-get install minicom

进入root模式(密码自定)

su root

对minicom串口默认启动状态进行设置

minicom –s

7. 查看系统串口设备状态

ls -l /dev

查看hciuart.service(有很多老版本的教程需要对此处进行修改,但是新版本其实没必要,保持默认即可,参考下图)

sudo nano /lib/systemd/system/hciuart.service

8. 更新和重启

sudo apt-get update

sudo apt-get upgrade

sudo reboot

9. 打开minicom测试

sudo minicom -D /dev/ttyAMA0 -b115200

或者直接

sudo minicom

串口发送测试成功,接下来上QT测试。

#如果你也测试成功,感谢你的点赞或留言;如果你遇到了问题,欢迎留言与我交流探讨#

10. QT测试串口输出

创建新工程,Pro文件添加Pi自带的库,末尾添加

LIBS += -lwiringPi

串口发送测试代码(在mainwindow.cpp里添加即可)

int serialfd;
if((serialfd = serialOpen("/dev/ttyAMA0",115200)) < 0)
{
       fprintf(stderr, "Unable to open serial device: %s\n", strerror(errno));
}
serialPuts(serialfd, "Hello ChopinXBP");

测试成功!

#如果你也测试成功,感谢你的点赞或留言;如果你遇到了问题,欢迎留言与我交流探讨#


QT程序自启动:

网上很多改脚本的方法实际上不太适用,因为QT的启动过程是:自动登录->自动启动窗口->自动运行用户程序。

脚本程序可以在自动启动窗口这一步之前运行,但是用户程序是不行。

具体调试与实现步骤:

1. Qt先release出一个可执行文件,一般在原工程目录下。

2. 创建与打开自启文件夹

cd ~/.config

or

cd /home/pi/.config

创建一个自启文件夹,如果已经存在直接打开

mkdir autostart

cd autostart

3. 生成一个*.desktop文件(比如:my.desktop)

sudo nano my.desktop

每次开机都会自动检查该文件夹下每一个*.desktop文件,启动需要的用户程序

4. 添加自启文件内容

[Desktop Entry]
Type=Application
Exec=/home/lepton/copyLeptonModule-master_v1/software/raspberrypi_video/raspberrypi_video

Exec=后填入可执行程序的绝对路径,为了免除缺乏支持dll文件的困扰,我直接选在了QT工程的文件夹

5. 重启测试

sudo reboot

测试成功!

#如果你也测试成功,感谢你的点赞或留言;如果你遇到了问题,欢迎留言与我交流探讨#

猜你喜欢

转载自blog.csdn.net/qq_20304723/article/details/82460992