由于实验室项目需要处理数据并用串口进行发送,最后还要开机自启,专门鼓捣了一番。由于网上的方案随着树莓派本身版本变化而不适应,因此调试过程中也实在耗费了不少功夫。最有价值的调试方案还是官方的英文教程: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(注意图中的白线和灰线)。

树莓派 service python 树莓派3b+配置参数_QT

树莓派 service python 树莓派3b+配置参数_树莓派_02

 

2. 开启串口功能

sudo raspi-config

树莓派 service python 树莓派3b+配置参数_串口_03

树莓派 service python 树莓派3b+配置参数_串口_04

树莓派 service python 树莓派3b+配置参数_树莓派_05

 

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

sudo nano /boot/config.txt

末尾添加

dtoverlay=pi3-miniuart-bt

树莓派 service python 树莓派3b+配置参数_串口_06

 

4. 关闭串口控制台

sudo nano /boot/cmdline.txt

替换配置文件内容为

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

树莓派 service python 树莓派3b+配置参数_串口_07

树莓派 service python 树莓派3b+配置参数_树莓派 service python_08

 

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

关闭蓝牙

sudo systemctl disable hciuart

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

 

6. 下载串口测试工具minicom

sudo apt-get install minicom

树莓派 service python 树莓派3b+配置参数_树莓派 service python_09

进入root模式(密码自定)

su root

树莓派 service python 树莓派3b+配置参数_QT_10

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

minicom –s

树莓派 service python 树莓派3b+配置参数_QT_11

树莓派 service python 树莓派3b+配置参数_树莓派 service python_12

树莓派 service python 树莓派3b+配置参数_QT_13

 

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

ls -l /dev

树莓派 service python 树莓派3b+配置参数_树莓派_14

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

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

树莓派 service python 树莓派3b+配置参数_树莓派 service python_15

 

8. 更新和重启

 

9. 打开minicom测试

sudo minicom -D /dev/ttyAMA0 -b115200

或者直接

sudo minicom

树莓派 service python 树莓派3b+配置参数_树莓派 service python_16

树莓派 service python 树莓派3b+配置参数_QT_17

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

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

 

10. QT测试串口输出

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

LIBS += -lwiringPi

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

树莓派 service python 树莓派3b+配置参数_串口_18

测试成功!

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


QT程序自启动:

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

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

 

具体调试与实现步骤:

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

树莓派 service python 树莓派3b+配置参数_串口_19

 

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

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

 

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

sudo nano my.desktop

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

 

4. 添加自启文件内容

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

树莓派 service python 树莓派3b+配置参数_串口_20

树莓派 service python 树莓派3b+配置参数_树莓派_21

 

5. 重启测试

sudo reboot

树莓派 service python 树莓派3b+配置参数_树莓派_22

测试成功!

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