单片机学习小组
直播中

张燕

7年用户 1315经验值
私信 关注

请问树莓派与STM32如何实现透传?

请问树莓派与STM32如何实现透传?

回帖(1)

任莉虹

2022-2-18 11:14:52
功能实现

项目基础章节,主要讲解树莓派与STM32实现透传,透传的意思是不经过任何通讯设备,直接用杜邦线把两个设备连接起来,形成通讯。我们把这一关先打通之后,想要再去加协议、通讯设备等等,都是要以这个为基础的。
树莓派

物品清单

树莓派3 B+以上的版本、网线(或使用HDMI、WIFI等方式登录)、串口调试助手以及杜邦线。
连接图


实物图

如图所示,这是树莓派的接口定义图,每个接口都有它存在的作用。

GPIO Pins


环境配置

开启ttyS0设备

注意:不要再普通用户组上进行操作,一定要在root用户组上配置,否则将会出错。
进入树莓派之后,输入命令:
ls -la /dev/ 如果树莓派再此之前并没有做任何的串口配置,默认红色框内的串口ttyAMA0,这是给蓝牙模块使用的。我们还要启用串口ttyS0。

下面打开串口/dev/ttyS0,在命令框输入:
sudo raspi-config 然后选择 Interfacing Options,回车

选择Serial ,然后回车

选择 Yes

然后 Yes

然后退出即可,此时提示树莓派需要重启。
再输入命令:
ls -la /dev/ 此时我们能看到,除了之前的 ttyAMA0以外,ttyS0也显示在设备当中,说明前面的配置没问题。

修改映射关系

sudo vim /boot/config.txt 在该文件最后一行添加:
dtoverlay=pi3-miniuart-bt 重启树莓派,然后重新在输入ls -la /dev/,查看两者是否对调成功。


关闭Console
在终端中输入:


sudo systemctl stop serial-getty@ttyS0.service
sudo systemctl disable serial-getty@ttyS0.service


然后配置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
输入 python 打开 python 命令行模式,创建serial实例ser,端口为‘/dev/ttyAMA0',波特率设置为115200bps。


>>> import serial
>>> ser = serial.Serial('/dev/ttyAMA0',115200)


检验串口是否打开,若未打开则输入 ser.open()打开


>>> ser.isOpen()  
True


打开串口调试助手




树莓派往 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
#include
#include
#include


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;
}
下面是 PC 端串口调试助手回显功能。
简单透传测试

接下来,我们就直接烧录程序,有关如何把程序下载到STM32当中,请跳转至教程里的相关手册。
连接图

烧录完成后,只需要把树莓派与STM32引脚一一对应连接即可。


实验结果

整体的过程:

举报

更多回帖

发帖
×
20
完善资料,
赚取积分