树莓派与STM32串口透传
功能实现
项目基础章节,主要讲解树莓派与STM32实现透传,透传的意思是不经过任何通讯设备,直接用杜邦线把两个设备连接起来,形成通讯。我们把这一关先打通之后,想要再去加协议、通讯设备等等,都是要以这个为基础的。
树莓派
物品清单
树莓派3 B+以上的版本、网线(或使用HDMI、WIFI等方式登录)、串口调试助手以及杜邦线。
连接图
实物图
如图所示,这是树莓派的接口定义图,每个接口都有它存在的作用。
GPIO Pins
环境配置
开启ttyS0设备
注意:不要再普通用户组上进行操作,一定要在root用户组上配置,否则将会出错。
进入树莓派之后,输入命令:
ls -la /dev/
如果树莓派再此之前并没有做任何的串口配置,默认红色框内的串口ttyAMA0
,这是给蓝牙模块使用的。我们还要启用串口ttyS0
。
下面打开串口/dev/ttyS0
,在命令框输入:
sudo raspi-config
然后选择 Interfacing Options
,回车
选择Serial
,然后回车
选择 No
然后 Yes
然后退出即可,此时提示树莓派需要重启。
再输入命令:
ls -la /dev/
此时我们能看到,除了之前的 ttyAMA0
以外,ttyS0
也显示在设备当中,说明前面的配置没问题。
修改映射关系
sudo vim /boot/config.txt
在该文件最后一行添加:
dtoverlay=pi3-miniuart-bt
重启树莓派,然后重新在输入ls -la /dev/
,查看两者是否对调成功。
关闭Console
在终端中输入:
sudo systemctl stop [email protected]
sudo systemctl disable [email protected]
然后配置cmdline.txt
,使用的是vim
,不会用的可以使用其他编辑器
sudo vim /boot/cmdline.txt
如果打开后,存在 console=serial1,115200 和 kgdboc=serial1,115200
,则删除。如果没有,这步骤忽略。
console=tty1 root=PARTUUID=ea7d04d6-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
模拟测试
python测试
安装python、python3、python-serial
sudo apt install python
sudo apt install python3
sudo apt install python-serial
启动python IDE
创建seria
l实例ser
,端口为‘/dev/ttyAMA0'
,波特率设置为115200bps
。
>>> import serial
>>> ser = serial.Serial('/dev/ttyAMA0',115200)
检验串口是否打开,若未打开则输入 ser.open()
打开
>>> ser.isOpen()
True
打开串口调试助手
>>> ser.write(b'Raspberry pi')
12
树莓派往 PC
端发送了 Raspberry
字符,也就是上图蓝框部分,说明树莓派前面的一系列配置可以实现串口透传通讯了。
python代码
最后我们创建并写一个python脚本代码,实现串口的发送和接收:
import serial
import time
ser = serial.Serial('/dev/ttyAMA0', 115200)
if ser.isOpen == False:
ser.open() # 打开串口
ser.write(b"hello stm32!!\n")
try:
while True:
size = ser.inWaiting() # 获得缓冲区字符
if size != 0:
res = ser.read(size) # 读取内容并显示
print(res)
ser.flushInput() # 情况接收缓存区
time.sleep(0.5) # 软件延时
except KeyboardInterrupt:
ser.close()
C语言测试
查看 wiringPi
是否安装成功!
创建C文件写一个串口实现例程:
#include<stdio.h>
#include<wiringPi.h>
#include<wiringSerial.h>
#include<unistd.h>
int main()
{
int fd;
int res;
int i;
i = 0;
if(wiringPiSetup() < 0)
{
return 1;
}
fd = serialOpen("/dev/ttyAMA0", 115200);
if(fd < 0)
{
return 1;
}
printf("serail test start ...\n");
serialPrintf(fd, "hello stm32!!\n");
while(1)
{
if(serialDataAvail(fd) != 0)
{
res = serialGetchar(fd);
putchar(res);
fflush(stdout);
}
}
serialClose(fd);
return 0;
}
gcc test.c -o test -lwiringPi
./pi@raspberrypi:~/test $ ./test
下面是 PC 端串口调试助手回显功能。
简单透传测试
接下来,我们就直接烧录程序,有关如何把程序下载到STM32
当中,请跳转至教程里的相关手册。
连接图
烧录完成后,只需要把树莓派
与STM32
引脚一一对应连接即可。
实验结果
整体的过程: