STM32 两个单片机之间的通信
STM32 两个单片机之间的通信
原创 HS 平凡灵感码头 2025年03月04日 11:25 广东

以上我们就是有A B两个板子来进行通信,A板将接收按键的键值,然后发送给B板,B板接收键值,然后判断键值控制LED翻转,然后把键值按字符形式发送给PC
主函数展示
#define SENDAint main(){init(115200);init_Usart2(115200);Key_Init();led_init();u8 key;u8 data;while(1){#ifdef SENDA //发送版key = key_an();if(key != 0xff) send_Uart2(key);#else //接收板data = rece_Uart2();switch(data){case 1: LED1_OVERTURN ; send_Uart(data+48); break;case 2: LED2_OVERTURN ; send_Uart(data+48); break;case 3: LED3_OVERTURN ; send_Uart(data+48); break;case 4: LED4_OVERTURN ; send_Uart(data+48); break;}#endif}return 0;}
关键代码解释
条件编译
ifdef SENDA// 发送端代码#else// 接收端代码#endif
通过是否定义 SENDA 宏,编译不同的代码段,实现同一份代码适配发送/接收两种硬件。就是先把A板发送端的代码烧录进去,接着我们把定义的#define SENDA注释掉,就可以把接受端的代码烧录进去,接着就连接两个板子的PA2和PA3。就可以完成通信了。
按键检测:
= key_an(); // 获取键值,0xff 表示无按键if (key != 0xff) send_Uart2(key); // 发送有效键值
发送端通过 key_an() 扫描按键,检测到按键后通过 UART2 发送键值。
LED 控制:
case 1: LED1_OVERTURN; send_Uart(data+48); break;
LED1_OVERTURN 是翻转 LED1 状态的宏,send_Uart(data+48) 将接收到的数字转为 ASCII 字符(如 1 → '1')通过主串口(如 UART1)发送,可能用于调试输出。
1. 单片机通信的关键技术
(1) 硬件接口
单片机之间的通信依赖于 物理层接口,常见的硬件接口包括:
- UART(串口通信)
:常用于点对点通信,简单易用,如 PA2(TX) ↔ PA3(RX)。
- I²C(两线通信)
:适合多个设备通信,比如传感器数据采集。
- SPI(高速通信)
:常用于高速数据传输,如屏幕驱动、SD 卡等。
- CAN(车载总线)
:用于汽车、工业控制,抗干扰能力强。
- RS485(长距离通信)
:适合多机通信,抗干扰能力强。
本次实验采用 UART(串口通信),是一种最基础、最常用的通信方式。
(2) 通信协议
通信协议 规定了数据的格式、传输顺序、错误校验等。常见的协议包括:
- 自定义协议
:简单易用,比如本实验中直接传输 按键键值。
- 标准协议
:
- Modbus(工业控制协议)
- MQTT(物联网协议)
- Zigbee(无线通信协议)
在本实验中,我们使用的是 简单的自定义协议:
-
发送端(A 板):按键值 → 通过 UART 发送
-
接收端(B 板):解析键值 → 控制 LED 并反馈给 PC
(3) 数据格式与编码
- ASCII 编码
:如
1 → '1'(data + 48)。 - 二进制数据
:直接传输数值,如
0x01, 0x02。 - 帧格式
:
- 帧头
(表示数据起始)
- 数据
(按键值)
- 校验
(确保数据正确性)
- 帧头
在本实验中:
-
直接使用 单字节数据 传输 按键值,简单高效。
(4) 波特率、数据格式
- 波特率(Baud rate)
:决定数据传输速率,本实验使用
115200。 - 数据格式
:
- 数据位
:8 位
- 停止位
:1 位
- 校验位
:无校验(更简单)
- 数据位
不同设备通信时,波特率、数据格式必须匹配,否则可能发生数据丢失或乱码。
(5) 数据检测与错误处理
- 数据帧校验(Checksum)
:可以防止数据传输错误。
- 超时机制
:如果长时间未收到数据,需要重新发送。
- 去抖动处理
:防止按键抖动导致误触发。
在本实验中,简单处理:
- 接收数据后判断是否为有效按键值
(
1~4)。 - 发送 ASCII 数据给 PC,方便调试
。
2. 学习重点
(1) 串口通信(UART)
-
熟练掌握 UART 初始化、发送、接收。
-
掌握 串口调试助手 的使用。
-
理解 波特率、数据格式、校验方式。
(2) 按键扫描
-
理解 按键去抖动 方法(延时法、状态机法)。
-
能够 检测按键状态 并发送数据。
(3) LED 控制
-
掌握 GPIO 端口控制。
-
学习 LED 翻转(OVERTURN)实现。
(4) 代码优化
-
掌握 条件编译(#ifdef),便于在 发送端/接收端 之间切换。
-
学习 如何设计通信协议(如加帧头、校验)。
(5) 调试技巧
- 串口调试助手
:用于观察数据是否正确。
- printf 调试
:在 PC 端输出接收数据,便于分析问题。
- 逻辑分析仪
:用于检查信号是否正确(高级调试)。
3. 进阶学习方向
如果掌握了基本的 UART 通信,可以进一步学习:
- I²C、SPI 通信
:用于 LCD 显示、传感器读取等。
- RS485、CAN 通信
:用于工业总线、多设备通信。
- 无线通信(BLE、Wi-Fi、LoRa)
:用于物联网应用。
- 嵌入式操作系统(RTOS)
:用于多任务通信管理。
相关文章:
STM32 两个单片机之间的通信
STM32 两个单片机之间的通信 原创 HS 平凡灵感码头 2025年03月04日 11:25 广东 以上我们就是有A B两个板子来进行通信,A板将接收按键的键值,然后发送给B板,B板接收键值,然后判断键值控制LED翻转,然后把键值按字符形式…...
Linux 下使用traceroute来进行网络诊断分析
简介 traceroute 命令是一种网络诊断工具,用于跟踪数据包从系统到目标服务器的路径。它有助于识别网络延迟和路由问题。 安装 Debian/Ubuntu sudo apt install traceroute -yRHEL/CentOS sudo yum install traceroute -yFedora sudo dnf install traceroute -…...
基于vue框架的游戏商城系统cq070(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
系统程序文件列表 项目功能:用户,分类,商品信息,游戏高手,游戏代练 开题报告内容 基于Vue框架的游戏商城系统开题报告 一、研究背景与意义 随着互联网技术的飞速发展和游戏产业的蓬勃兴起,游戏商城作为游戏产业链中的重要一环,迎来了前所…...
SpringBoot接入DeepSeek(硅基流动版)+ 前端页面调试(WebSocket连接模式)
文章目录 前言正文一、项目环境二、项目代码2.1 pom.xml2.2 DeepSeekController.java2.3 启动类2.4 logback-spring.xml2.5 application.yaml2.6 WebsocketConfig.java2.7 AiChatWebSocketHandler.java2.8 SaveChatSessionParamRequest.java2.9 index.html 三、页面调试3.1 主页…...
idea实现热部署
1.在pom.xml文件添加依赖 java <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency> 更新可见配置成功: 2.在appli…...
记一次误禁用USB导致键盘鼠标失灵的修复过程
背景说明 在电脑上插入了一个USB hub,然后弹窗提示:“集线器端口上出现电涌”,点开让选择“重置”或者“关闭”,不小心点了关闭,结果这个usb口就被关了,再插任何东西都没反应,找了很多办法都恢…...
0x03 http协议和分层架构
HTTP协议 简介 Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则 http协议基于TCP协议:面向连接,安全基于请求-响应模型:一次请求对应一次响应HTTP协议是无状态的协议ÿ…...
【leetcode hot 100 189】轮转数组
错误解法一:申请一个数组,第i个数放在新数组的ik或ik-nums.length上 class Solution {public void rotate(int[] nums, int k) {int[] resultsnew int[nums.length];for(int i0; i<nums.length; i){if(ik<nums.length){results[ik] nums[i];}els…...
医药行业哪些招聘管理系统有AI功能?
随着医药行业竞争加剧,企业对高端研发、临床、市场人才的需求日益迫切。传统招聘模式因效率低、成本高、匹配度不足等问题,已难以满足行业需求。2025年,以AI为核心的招聘管理系统成为解决痛点的关键工具。 一、医药行业招聘的痛点与AI解决方案…...
.net8 使用 license 证书授权案例解析
创建 webapi 项目 使用 .NET CLI 创建一个 ASP.NET Core Web API 应用,并添加指定的 NuGet 包,可以按照以下步骤操作: 创建 ASP.NET Core Web API 项目: dotnet new webapi -n WebAppLicense cd WebAppLicense添加 Standard.Li…...
golang的io
https://www.bilibili.com/video/BV1gx4y1r7xb 1. 原生io包 io包是Go语言标准库中底层的I/O接口层,定义了通用的读写规则和错误处理逻辑。每次读写都是直接调用底层系统 I/O,每次读取1字节,系统调用次数多。适用于小数据量、实时性要求高。i…...
全向广播扬声器在油气田中的关键应用 全方位守护安全
油气田作为高风险作业场所,安全生产始终是重中之重。在紧急情况下,如何快速、有效地传达信息,确保人员安全撤离,是油气田安全管理的关键环节。全向广播扬声器凭借其全方位覆盖、高音质输出和强大的环境适应性,成为油气…...
76.读取计时器运行时间 C#例子 WPF例子
TimerManager:一个增强的定时器类,带时间管理功能 在使用定时器时,我们常常需要知道定时器的运行状态,比如它已经运行了多久,或者还剩下多少时间。然而,.NET 的 System.Timers.Timer 类本身并没有直接提供…...
嵌入式开发:傅里叶变换(5):基于STM32,实现CMSIS中的DSP库
目录 步骤 1:准备工作 步骤 2:创建 Keil 项目,并配置工程 步骤 3:在MDK工程上添加 CMSIS-DSP 库 步骤 5:编写代码 步骤 6:配置时钟和优化 步骤 7:调试与验证 步骤 8:优化和调…...
探秘基带算法:从原理到5G时代的通信变革【六】CRC 校验
文章目录 2.5 CRC 校验2.5.1 前言2.5.2 CRC算法简介2.5.3 CRC计算的详细过程2.5.4 CRC校验的两种方法详解**分离比较法****整体运算法****不同位出错与余数的关系****总结** 2.5.5 CRC计算的C实现及工具介绍**C实现CRC计算****CRC计算工具推荐** **2.5.6 总结:CRC校…...
MySQL——DQL、多表设计
目录 一、DQL 1.基本查询 2.条件查询 3.分组查询 4.排序查询 5.分页查询 二、多表设计 1.一对多 2.一对一 3.多对多 一、DQL 1.基本查询 注意: *号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率) 2.条件查询…...
XML 编辑器:全面指南与最佳实践
XML 编辑器:全面指南与最佳实践 引言 XML(可扩展标记语言)编辑器是处理XML文件的关键工具,对于开发人员、系统管理员以及任何需要处理XML数据的人来说至关重要。本文将全面介绍XML编辑器的概念、功能、选择标准以及最佳实践,旨在帮助读者了解如何选择和使用合适的XML编辑…...
【USRP】NVIDIA Sionna:用于 6G 物理层研究的开源库
目录 Sionna:用于 6G 物理层研究的开源库主要特点实现6G研究的民主化支持 5G、6G 等模块化、可扩展、可伸缩快速启动您的研究 好处原生人工智能支持综合研究平台开放生态系统 安装笔记使用 pip 安装基于Docker的安装从源代码安装“你好世界!”探索锡奥纳…...
DeepSeek开源周Day6:DeepSeek V3、R1 推理系统深度解析,技术突破与行业启示
DeepSeek 在开源周第六天再次发文,中文原文、官方号在知乎 DeepSeek - 知乎DeepSeek-V3 / R1 推理系统概览 - 知乎deepseek-ai/open-infra-index: Production-tested AI infrastructure tools for efficient AGI development and community-driven innovation 引言 …...
intra-mart实现logicDesigner与forma联动
一、前言 有一个需求,想实现从页面上传一个excel文件,点击提交,就转发给forma模块,然后用户在forma模块里,确认下自动填写的信息是否正确,正确的话就点击保存,存入数据库;不正确的话…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
命令行关闭Windows防火墙
命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)方法二:CMD命令…...
SQL进阶之旅 Day 22:批处理与游标优化
【SQL进阶之旅 Day 22】批处理与游标优化 文章简述(300字左右) 在数据库开发中,面对大量数据的处理任务时,单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”,深入探讨如何通过批量操作和游标技术提…...
