项目基础——树莓派与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

创建serial实例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引脚一一对应连接即可。

在这里插入图片描述

在这里插入图片描述

实验结果

整体的过程:

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43125185/article/details/112791641