1.树莓派串口控制台功能
在2018-10-09-raspbian-stretch.img镜像中,要使用串口来调试设备,需要修改conig.txt文件。
1. sudo systemctl disable hciuart
2.sudo nano /boot/config.txt
在该最后加上一行
dtoverlay=pi3-miniuart-bt
3.sudo raspi-config,将系统启动设置为串口自动登录 启动方式
4.sudo reboot 即可使用串口了
树莓派3B+的硬件电路图如下:
我们将串口模块的TX、RX、GND连接到树莓派的UART0 RX、UART0 TX、GND,电源不用接,即可使用串口进行控制
2.如何让树莓派与其他设备使用串口进行通信呢?
配置这个功能可以让我们的树莓派与其他设备例如stm32进行数据的交互和通信,实现两者之间的互相控制功能,这个还是非常实用的!
使用以下步骤即可:
树莓派包含两个串口
1.硬件串口(/dev/ttyAMA0),硬件串口由硬件实现,有单独的波特率时钟源,性能高,可靠。一般优先选择这个使用。
2.mini串口(/dev/ttyS0),mini串口时钟源是由CPU内核时钟提供,波特率受到内核时钟的影响,不稳定。
想要通过树莓派的GPIO引脚进行稳定的串口通信,需要修改串口的映射关系。
serial0是GPIO引脚对应的串口,serial1是蓝牙对应的串口,可以使用 ls -l /dev/serial* 查看当前的映射关系
1.sudo raspi-config
Interfacing Options -> P6 Serial, 第一个选项(would you like a login shell to be accessible over serial?)选择NO,第二个选项(would you like the serial port hardware to be enabled?)选择 YES
然后我们可以通过使用ls -l /dev/serial* 查看串口映射关系发现
serial0(GPIO串口)默认使用的是ttyS0(mini串口),serial1(蓝牙)使用的是ttyAMA0(硬件串口)
如果想使用稳定可靠的硬件串口,就要将树莓派3的硬件串口与mini串口默认映射对换。而这个需求官方也考虑到了,在系统中放了一个实现这个功能的文件---stretch版本系统中的文件为/boot/overlays/pi3-miniuart-bt.dtbo。使用该文件发挥功能只需在/boot/config.txt文件末尾添加一行代码
sudo nano /boot/config.txt
在文件最后面添加一行:dtoverlay=pi3-miniuart-bt
修改完成后 sudo reboot 重启树莓派后使用 ls -l /dev/serial* 查看映射如下:
如上图所示,serial0(GPIO串口)使用的是ttyAMA0(硬件串口),而serial1(蓝牙)使用的是ttys0(mini串口)
2.禁用串口的控制台功能
前面步骤已经交换了硬件串口与mini串口的映射关系,但是,现在还不能使用树莓派串口模块与电脑进行通信,因为,树莓派io口引出串口默认是用来做控制台使用的,即是为了用串口控制树莓派,而不是通信。所以我们要禁用此默认设置。
首先执行命令如下:
sudo systemctl stop serial-getty@ttyAMA0.service
sudo systemctl disable serial-getty@ttyAMA0.service
然后执行命令行:
sudo nano /boot/cmdline.txt
删除语句 console=serial0,115200 (没有的话就不需要此步骤)
保存之后其内容如下:
接下来再次重启树莓派即可。
最终的/boot/config.txt文件内容如下:
3.测试验证串口功能
代码如下:
#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>
int main()
{
int fd;
if(wiringPiSetup()<0) {
return 1;
}
if((fd=serialOpen("/dev/ttyAMA0",115200))<0) {
return 1;
}
printf("serial test start ...\n");
serialPrintf(fd,"hello world!!\n");
serialClose(fd);
return 0;
}
编译命令:
gcc test.c -o test -lwiringPi
代码中使用到wiringPi库,具体该库的下载和使用可以参考官网:http://wiringpi.com/,里面描述了如何使用该库,这里不做介绍
执行:./test
我们可以将串口模块通过杜邦线插到树莓派的UART0 TX RX接入到PC机,在PC机上打开串口调试助手查看 执行上面命令后会打印 hello world 的字符串,说明通信成功。
同理,我们可以在树莓派上安装minicom,配置好 /dev/ttyAMA0 后在串口调试助手上发送字符串,树莓派minicom串口也能收到对应的字符串,说明两者通信成功