ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Python串口通信避坑指南:树莓派与STM32 RT1064的数据交互实战

Python串口通信避坑指南:树莓派与STM32 RT1064的数据交互实战 串口通信避坑指南树莓派与STM32 的数据交互实战近些日子有个智能小车方面的项目, 这里需要将树莓派跟那种STM32利用串口展开交流。原本以为这不过是轻松搞定的连线, 以及简简单单书写好几行代码的事儿, 然而实际遭遇的麻烦远比设想的多好多。先是树莓派的串口怎么都没办法开启, 接着又是STM32接收数据出现乱码的状况, 而后还有两边通信协议相互不匹配的问题, 差不多把所有可能碰到的陷阱问题整个体验一番了。这篇章体内容就是专注去梳理整合这些遭遇麻烦的经历以及对应的解决办法, 期望能够给予那些正忙于尝试树莓派跟嵌入式设备进行通信事宜的友人们提供一定程度的助力帮助。串口通信看上去好像很古老, 然而在嵌入式跟单板计算机共同协作工作的情景当中, 它依旧是最为直接、最为可靠的通信方式当中的一种。不存在繁杂的网络协议栈, 不存在驱动兼容性方面的问题, 仅仅将几根线连接在一起数据便能够开始流动起来。可是, 这种所谓的“简单”背后隐藏着相当多的细节, 像电平匹配、波特率校准、数据帧解析、流控制等, 只要任何一个环节出现问题, 通信就会遭遇失败。尤其是在你将具备完整Linux系统运行环境的树莓派与资源存在限制情形的STM32单片机放置到一起的时候, 这两者之间的编程模型乃是不同的, 其系统时序情形亦不一样, 再者调试手段方面的差异着实巨大, 如此一来便更加要求有一套清晰的实践予以实施办法来能够规避风险了。本文会从实际项目着手, 不但会告知你怎样使树莓派与STM32成功实现通信, 甚至还会深入探究那些易被忽视的细节: 一、树莓派的/dev/为何有时会“不见”? 二、STM32中断接收数据为何会出现丢包情况? 三、怎样设计一个既简单又稳健的通信协议去处理粘包及错误? 我们会把作为树莓派端的主要工具, 联合具体的代码示例以及调试技巧, 使你在动手进行实践时避开那些令我熬夜调试的“大坑”。1. 环境准备与硬件连接从混乱到有序在着手写代码起始之时, 准确无误的硬件连接以及软件环境乃是成功得以实现的根基所在。要是在这一极为关键紧要的步骤当中有所疏忽大意, 那么后续开展的所有调试工作极有可能是在错误的导向路径之上无谓地损耗时间, 白费精力, 徒劳无功。1.1 硬件连线不仅仅是TX接RX在树莓派以4B作为示例的GPIO各个引脚当中 的 GPIO的 以4B为例 物理引脚8/TXD以及 还有物理这个引脚10/RXD便是 是默认的 属于那种硬件串口比如说UART的引脚。到了STM32开发板以常见的逐飛科技核心板当作例子这里 其串口引脚就得 需要去查看原理图 一般来说通常都是 某一个USART里面的TX和RX引脚 就像比如说和 这样。注意, 最基础的连接原则乃是交叉连接, 即树莓派的TXD要去接STM32的RXD, 树莓派的RXD则须接STM32的TXD。除此之外, 一定要连接两者的GND, 也就是地线, 以此为信号提供共同的参考电平, 而这可是很多初学者容易忽略进而导致通信不稳定的关键所在。然而, 仅仅把这三根线连接起来, 也就是TXD, RXD, GND, 这或许还不行。要是你的通信距离在较长的范围, 也就是超过1米, 或者所处环境干扰比较大这样的情况下, 那就得考虑去添加电平转换了。树莓派的GPIO是3.3V电平, 而好多STM32开发板尽管同样是3.3V, 可是有些模块或者转换芯片有可能是5V。直接将3.3V和5V设备连接起来, 就有可能会损坏树莓派。稳妥的举措是用到一个3.3V/5V双向电平转换模块, 比如等等, 或者去确认你的STM32板载IO电平同样是3.3V。一个清晰的连接对照表能帮你快速排查硬件问题设备端信号线连接目标引脚说明电压树莓派 4BTXD ()STM32 RXD物理引脚 83.3V树莓派 4BRXD ()STM32 TXD物理引脚 103.3V树莓派 4BGNDSTM32 GND物理引脚 6 (或其他GND)0VSTM32TXD (如 PA9)树莓派 RXD3.3VSTM32RXD (如 PA10)树莓派 TXD3.3V1.2 树莓派串口配置解开系统“占用锁”树莓派原本默认的那个硬件串口, 也就是/dev/的那个, 被分配给了蓝牙模块, 与此同时, 另一个迷你串口, 即/dev/ttyS0, 被分配给了GPIO引脚。为了能够获得稳定的、高性能的通信, 我们需要进行交换。把它们交换一下, 并且将硬件串口释放出来。起先, 借助SSH要么直接连接终端至树莓派, 运用raspi-工具予以配置。sudo raspi-config在界面中依次选择当被问到“Would you like a login shell to be over?”的时候, 要选择No, 这一点是很重要的哦, 不然的话串口就会被登录终端给占用啦。当被问到“Would you like the port to be?”的时候, 要选择Yes。接下来需要编辑引导配置文件确保硬件UART被正确启用sudo nano /boot/config.txt在文件末尾添加或修改以下两行enable_uart1 dtoverlaydisable-bt让第一行去强制性地启用UART, 将第二行用于禁用蓝牙从而去释放硬件串口, 进行保存并且退出CtrlX, 接着是Y, 随后回车, 重新启动一下树莓派来令更改产生效果。将其重新启动之后, 对串口设备展开验证。去执行 ls -l /dev/* 这个操作, 你理应能够看到类似于以下这般的输出结果:/dev/serial0 - ttyAMA0 /dev/serial1 - ttyS0这意味着, /dev/区域也即我们这些GPIO引脚所对应的串口, 此刻已然指向了硬件串口, 你能够借助这个终端工具来开展快速测试。sudo apt-get install minicom -y sudo minicom -b 115200 -o -D /dev/ttyAMA0要是呈现出界面并且不存在错误, 那就表明串口设备已然就绪。按下CtrlA, 接着按下X从而退出。1.3 环境与库安装树莓派通常预装了。我们使用pip来安装功能强大的库sudo pip3 install pyserial在完成安装之后, 能够去撰写一个最为简单的测试脚本.py, 以此来检验库是否工作处于正常状态:import serial try: # 尝试打开串口不进行实际通信 ser serial.Serial(/dev/ttyAMA0, 115200, timeout1) print(f串口 {ser.port} 打开成功配置为{ser}) ser.close() print(串口已关闭。) except serial.SerialException as e: print(f打开串口失败{e})执行.py, 要是瞅见成功开启的讯息, 那就表明串口环境已准备妥当。2. 树莓派端串口编程核心技巧掌握了基础环境我们来深入的库。它虽然接口简单但
返回列表