树莓派4B 与 stm32 通信_树莓派4b 与 stm32 采用usb-ttl通信-程序员宅基地

技术标签: python  linux  嵌入式  

本文用来记录智能控制课设中的通信环节的实现

硬件便是树莓派4Bstm32(我用的是正点原子的STM32F103ZET6的核心板)
从头开始做的,带着你去从烧录树莓派,安装STM32的编译环境开始,直到二者成功通信。如何使用串口助手进行调试,以及如何通过代码进行通信。

1.准备环节

(树莓派已经烧录好镜像可以正常使用,stm32也已经装好keil5的同学可以略过)

1.1 树莓派

新买的树莓派4B一般TF卡没有烧入镜像(也就是树莓派的操作系统)
官方推荐系统是以下三种
32位Lite版(无桌面)
32位桌面版(推荐使用)
32位桌面版(含常用软件)
这三个链接都会直接下载官网最新的版本,但是由于树莓派官网下载一般是比较慢的,而且如果你想用VNC或者远程链接等新系统还需要做很多的配置。
下面这个链接是我实验室的大佬已经配置了一些常用配置的镜像(可以省很多事)
镜像下载链接
再放上几个常用的小工具
链接:https://pan.baidu.com/s/1nbRxYSjv2O1W9c9VcHETBA
提取码:j4w1
在这里插入图片描述

1.2 烧录镜像

你需要准备一张TF卡,一般16GB就够

  1. 先对TF卡进行格式化,使用小工具中的SD初始化工具
    在这里插入图片描述
    在这里插入图片描述
    点击Format即可

注意!烧录的时候一定不要插入别的U盘,万一不小心点错了你的资料就全没了,而且他会把你的U盘都格式化为14GB左右的,也就是哪怕你是两个T,也会变成14GB,此过程不可逆!!!

  1. 烧入镜像(Win32DiskImager.exe)
    在这里插入图片描述
    在这里插入图片描述
    烧录好以后刚才插入的TF盘会被分成两个部分
    在这里插入图片描述
    注意:如果提示说要将光盘进行格式化,点击取消即可。成功烧入镜像后有一部分是打不开的,如上图
    在这里插入图片描述

如果你是用的树莓派官方下载的镜像,那么你可以用一根Micro-HDMI线将树莓派的桌面/无桌面显示在你的显示器上,树莓派官方是默认禁用远程连接的,所以你要自己进行配置。这里暂不赘述。

如果用的是上面链接中的镜像,已经提前配置好了远程连接等选项,只需要插上电源,用你的电脑连接树莓派的热点

热点名:raspi-webgui
密码:guet-4102
在这里插入图片描述

连接wifi后,用浏览器打开下面的vnc地址,密码如下

vnc地址:http://raspberrypi
密码:guet-4102
在这里插入图片描述

就会跳转到以下界面
在这里插入图片描述
到此,树莓派的前置工作便已经准备妥当,插上网线后树莓派便可以上网了。

1.3 STM32编译工具Keil5安装

附上安装包以及破解器下载链接
链接:https://pan.baidu.com/s/1Lp5pRGo46obEIvFYWkK0cw
提取码:d7u4
在这里插入图片描述
安装与破解教程请参考

2. 通信设置

好了,到现在我们的准备工作已经做好了,我们现在开始树莓派和STM32的通信吧
和之前一样,一各一个来首先是,树莓派的设置

2.1 树莓派通信设置

树莓派我使用的是Linux下的串口调试助手:minicom

  1. 打开树莓派终端配置设置sudo raspi-config
    interfacing options→Serial→NO→YES→reboot

  2. 打开/boot/config.txt文件,查找‘enable_uart=1’,若有,使其所在行内容与这一行完全相同。若无,在文档最后添加这一行

  3. 在terminal中输入sudo apt-get install minicom安装minicom串口调试助手
    4.使用 minicom -s 指令(如果后续操作权限不足,把本指令改为sudo minicom -s再进行操作)→Serial port setup
    在这里插入图片描述

    按下E 调整波特率校验位等与PC上的串口调试助手设置一致(低波特率数据传输受干扰相对小),否则传输的数据混乱

    硬件流控制(F)与软件流控制(G)均调整为NO
    回车保存,返回上一层,选择save setup as dfl(这一步可能出现权限不足,可以sudo为更高权限)
    返回到此界面
    在这里插入图片描述

    按下crtl+a再按下z,进入minicom相关功能的页面,按下Q退出minicom

2.2 STM32通信设置

STM32F103ZET6板子上集成了CH340,直接用USB-TTL接到树莓派上即可
STM32上提前烧入一个简单的串口调试代码就行,能够发送信息,以及接收到信息时有提示(比如LED亮或者蜂鸣器响等等)

注意!!!STM32程序中的波特率一定要和树莓派的保持一致,比如我上面树莓派设置的是115200,所以STM32的波特率也一定要是115200不然信息通信会产生乱码。

3. 开始通信

接好线后,在终端中输入minicom -D 端口号便可以打开minicom的控制台看到从STM32发送来的信息了 如何查看端口号下面会讲到
hhlsh便是从STM32接收到的细
"hhlsh"便是从STM32接收到的数据(会一直接收)

但是这里我遇到一些问题,那就是在minicom的控制台里确实可以收到STM32发送的信息,但是通过控制台发送的信息,STM32却接收不到(可能是我32上代码的问题,暂时不太确定)

到这里已经可以基本实现树莓派4B与STM32之间的通信了,但是通信的目的还是为了能够通过代码发送信息

下面我介绍如何使用 python serial 库使用代码进行通信,以及如何查看端口号

4.使用Python serial通过代码进行通信

  1. 在终端内输入pip install pyserial安装

  2. 查找可用端口python3 -m serial.tools.list_ports
    在这里插入图片描述

  3. 测试代码

读取0.5s接收到的信息

import serial
dev=serial.Serial('/dev/ttyUSB1',115200,timeout=0.5)
dev.readlines()

向STM32发送字母 L

s = 'L'
dev.write("{}\r\n".format(s).encode())

注:1.Linux环境下换行符和Windows是有区别的,Linux下是\r\n,windows下是\n,因此当出现派收的到stm32的数据但是,派发成功的数据stm32收不到那就在write里 面的内容后面加个\r\n试试
2.需要将传输的字符串添加encode()方法,对字符串进行编码

更多关于python serial的用法请参考

到此为止,大家能跟到这一步树莓派4B和STM32之间通信应该已经建立,有细节问题可以在评论区留言

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44711932/article/details/117390815

智能推荐

两端固定弦的自由振动 | 分离变量法(一)| 偏微分方程(十三)_两端固定振动定解问题分离变量-程序员宅基地

文章浏览阅读6.2k次,点赞5次,收藏25次。分离变量法是一种可用来求某些典型区域上定解问题精确解的经典方法,本章将通过典型例子,介绍分离变量法的基本思想和具体步骤,并提出方法的理论核心——固有值问题,进而从Fourier展开角度来认识和应用分离变量法。两端固定弦的自由振动作为乐器上弦的发声模型,讨论两端固定的弦在初始扰动影响下产生的运动。选弦在张力作用下的平衡位置为x轴,线上各质点的横向位移u(t,x)u(t,x)u(t,x)满足弦振动方程的混合问题{∂2u∂t2=a2∂2u∂x2,t>0,0<x<l,(1a)u∣x=0=u∣_两端固定振动定解问题分离变量

python+selenium 捕捉不到弹出的div类型的提示解决方法_selenium div弹出层-程序员宅基地

文章浏览阅读1w次。我在用python+selenium,进行某一网址,登录口的测试时,对错误处理进行处理用户名 错误用户名 密码 正确密码格式 然后,如果是上面这种情况,系统会从右上角弹出一个类似于文本框的提示:不存在该用户名或用户被禁用!但是这个框,我尝试捕获&lt;p&gt;,&lt;div&gt;,它是div类型的,但是无法捕获,如下:b.find_element_b..._selenium div弹出层

第01章 Java语言概述-程序员宅基地

文章浏览阅读521次。软件,即一系列按照特定顺序组织的计算机数据和指令的集合。有系统软件和应用软件之分。Pascal之父Nicklaus Wirth: “Programs = Data Structures + Algorithms”系统软件:是SUN(Stanford University Network,斯坦福大学网络公司 )1995年推出的一门高级编程语言。是一种面向Internet的编程语言。Java一开始富有吸引力是因为Java程序可以在Web浏览器中运行。这些Java程序被称为Java小程序。

加油站抽烟烟火智能识别算法_烟火识别算法培训内容-程序员宅基地

文章浏览阅读377次。加油站抽烟烟火智能识别系统通过yolo+opencv网络模型图像识别分析技术,加油站抽烟烟火智能识别算法识别出抽烟和燃放烟火的情况,并发出预警信号以提醒相关人员,减少火灾风险。OpenCV基于C++实现,同时提供python, Ruby, Matlab等语言的接口。OpenCV-Python是OpenCV的Python API,结合了OpenCV C++API和Python语言的最佳特性。OpenCV-Python使用Numpy,这是一个高度优化的数据库操作库,具有MATLAB风格的语法。所有OpenCV数_烟火识别算法培训内容

用逻辑门制作出加法器_逻辑门电路怎么算加法-程序员宅基地

文章浏览阅读4.2k次,点赞8次,收藏26次。文章目录1 用逻辑门制作出加法器1.1 半加器1.2 全加器1.3 8位加法器1 用逻辑门制作出加法器1.1 半加器我们首先看下二进制加法的运算规则:我们将加法值、进位值的真值表和异或运算、与运算的真值表进行对比:我们可以使用异或门、与门电路搭建不带进位的加法器:我们将内部逻辑门进行封装,只留出输入输出引脚:1.2 全加器我们可以在半加器的基础上制造全加器:我们加全加器..._逻辑门电路怎么算加法

python——爬虫与脚本_python爬虫脚本-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏4次。关于py在其他方面的脚本或爬虫应用_python爬虫脚本

随便推点

经典乱码锟斤拷-程序员宅基地

文章浏览阅读3.1k次。锟斤拷是什么?我也是最近才搞明白的。http://www.baidu.com/baidu?word=%EF%BF%BD%EF%BF%BDhttp://www.google.com/search?hl=en&q=%E9%94%9F%E6%96%A4%E6%8B%B7我考证了一下,这个乱码的原因来源相当经典。Unicode和老编码体系的转化过程中,肯定有一些字,用Unicode是没法表..._"b\"\\xef\\xbf\\xbd\\xce"

Class path contains multiple SLF4J bindings.问题原因及解决方案-程序员宅基地

文章浏览阅读2.4w次,点赞8次,收藏8次。根据上面的错误提示,存在多个SLF4J bindings绑定,即存在多个slf4j的实现类,按上图所示这两个实现分别是。因此,我们去掉log4j的依赖就行;查找slf4j-log4j12-1.6.1并将其删除。,我们需要的是logback而不是log4j,_class path contains multiple slf4j bindings

Linux——通过OTG方式烧写镜像文件步骤详解_怎么用otg烧写img-程序员宅基地

文章浏览阅读217次,点赞2次,收藏2次。其中,/path/to/image.img是你要烧写的镜像文件路径,/dev/sdX是你的设备名称。确保设备已连接并挂载后,使用dd命令将镜像文件写入设备,最后同步缓存并卸载设备即可。在本文中,我们将介绍如何通过OTG方式在Linux系统下进行镜像文件的烧写,并提供相应的源代码。请注意,使用dd命令时需要谨慎,确保指定正确的设备名称,以免误写入其他设备导致数据丢失。在完成烧写后,我们需要同步缓存并从系统中卸载设备。接下来,我们需要将设备挂载到文件系统中。其中,/dev/sdX是你的设备名称,可以通过执行。_怎么用otg烧写img

Android listview viewpager解决冲突 滑动,android开发需要什么基础-程序员宅基地

文章浏览阅读275次,点赞4次,收藏10次。这个方法只是改变flag*/@Overrideif (parent!= null) {

聊聊运营商对UDP的QoS限制和应对_udp qos-程序员宅基地

文章浏览阅读3.5w次,点赞41次,收藏80次。UDP和运营商有什么关系?这个问题有点大且突兀。只要不是在三大运营商上班的,其实我们都是端到端用户,而端到端用户对于网络的认知必然是盲目的,我们不知道路由器对我们的流量做了什么,我们更没有能力去控制它们,我们只能猜测。本来一个技术范畴的讨论一旦涉及到了猜测,就不是技术讨论了,而是社会学讨论,这往往会带来无休止的辩论,争吵,在此其中,独占鳌头的往往不是靠技术实力,而是靠口才和措辞,或者还有夹杂着各种手势的抑扬顿挫。我是极其讨厌充斥着此类调调的场合的,我在这种场合往往会选择闭嘴,然后离开。人们无休止地讨_udp qos

数据库查询 数据库笔记_数据库笔记查-程序员宅基地

文章浏览阅读89次。单表查询简单查询在编辑器里面查询特定的数据对数据进行处理 use xscj;select * ,cj*1.5 as'折算成150分的成绩'from cj;求平均分创建一个新的字段 模糊查询通配符 :% :代表0个或多个字符 _ :1个字符查找中间字符..._数据库笔记查