当前位置: 首页 > news >正文

STM32 两个单片机之间的通信

STM32 两个单片机之间的通信

原创 HS 平凡灵感码头 2025年03月04日 11:25 广东

图片

以上我们就是有A B两个板子来进行通信,A板将接收按键的键值,然后发送给B板,B板接收键值,然后判断键值控制LED翻转,然后把键值按字符形式发送给PC

主函数展示

#define SENDA
int 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 通信,可以进一步学习:

  1. I²C、SPI 通信

    :用于 LCD 显示、传感器读取等。

  2. RS485、CAN 通信

    :用于工业总线、多设备通信。

  3. 无线通信(BLE、Wi-Fi、LoRa)

    :用于物联网应用。

  4. 嵌入式操作系统(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> 更新可见配置成功&#xff1a; 2.在appli…...

记一次误禁用USB导致键盘鼠标失灵的修复过程

背景说明 在电脑上插入了一个USB hub&#xff0c;然后弹窗提示&#xff1a;“集线器端口上出现电涌”&#xff0c;点开让选择“重置”或者“关闭”&#xff0c;不小心点了关闭&#xff0c;结果这个usb口就被关了&#xff0c;再插任何东西都没反应&#xff0c;找了很多办法都恢…...

0x03 http协议和分层架构

HTTP协议 简介 Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 http协议基于TCP协议&#xff1a;面向连接&#xff0c;安全基于请求-响应模型&#xff1a;一次请求对应一次响应HTTP协议是无状态的协议&#xff…...

【leetcode hot 100 189】轮转数组

错误解法一&#xff1a;申请一个数组&#xff0c;第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功能?

随着医药行业竞争加剧&#xff0c;企业对高端研发、临床、市场人才的需求日益迫切。传统招聘模式因效率低、成本高、匹配度不足等问题&#xff0c;已难以满足行业需求。2025年&#xff0c;以AI为核心的招聘管理系统成为解决痛点的关键工具。 一、医药行业招聘的痛点与AI解决方案…...

.net8 使用 license 证书授权案例解析

创建 webapi 项目 使用 .NET CLI 创建一个 ASP.NET Core Web API 应用&#xff0c;并添加指定的 NuGet 包&#xff0c;可以按照以下步骤操作&#xff1a; 创建 ASP.NET Core Web API 项目&#xff1a; dotnet new webapi -n WebAppLicense cd WebAppLicense添加 Standard.Li…...

golang的io

https://www.bilibili.com/video/BV1gx4y1r7xb 1. 原生io包 io包是Go语言标准库中底层的I/O接口层&#xff0c;定义了通用的读写规则和错误处理逻辑。每次读写都是直接调用底层系统 I/O&#xff0c;每次读取1字节&#xff0c;系统调用次数多。适用于小数据量、实时性要求高。i…...

全向广播扬声器在油气田中的关键应用 全方位守护安全

油气田作为高风险作业场所&#xff0c;安全生产始终是重中之重。在紧急情况下&#xff0c;如何快速、有效地传达信息&#xff0c;确保人员安全撤离&#xff0c;是油气田安全管理的关键环节。全向广播扬声器凭借其全方位覆盖、高音质输出和强大的环境适应性&#xff0c;成为油气…...

76.读取计时器运行时间 C#例子 WPF例子

TimerManager&#xff1a;一个增强的定时器类&#xff0c;带时间管理功能 在使用定时器时&#xff0c;我们常常需要知道定时器的运行状态&#xff0c;比如它已经运行了多久&#xff0c;或者还剩下多少时间。然而&#xff0c;.NET 的 System.Timers.Timer 类本身并没有直接提供…...

嵌入式开发:傅里叶变换(5):基于STM32,实现CMSIS中的DSP库

目录 步骤 1&#xff1a;准备工作 步骤 2&#xff1a;创建 Keil 项目&#xff0c;并配置工程 步骤 3&#xff1a;在MDK工程上添加 CMSIS-DSP 库 步骤 5&#xff1a;编写代码 步骤 6&#xff1a;配置时钟和优化 步骤 7&#xff1a;调试与验证 步骤 8&#xff1a;优化和调…...

探秘基带算法:从原理到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 总结&#xff1a;CRC校…...

MySQL——DQL、多表设计

目录 一、DQL 1.基本查询 2.条件查询 3.分组查询 4.排序查询 5.分页查询 二、多表设计 1.一对多 2.一对一 3.多对多 一、DQL 1.基本查询 注意&#xff1a; *号代表查询所有字段&#xff0c;在实际开发中尽量少用&#xff08;不直观、影响效率&#xff09; 2.条件查询…...

XML 编辑器:全面指南与最佳实践

XML 编辑器:全面指南与最佳实践 引言 XML(可扩展标记语言)编辑器是处理XML文件的关键工具,对于开发人员、系统管理员以及任何需要处理XML数据的人来说至关重要。本文将全面介绍XML编辑器的概念、功能、选择标准以及最佳实践,旨在帮助读者了解如何选择和使用合适的XML编辑…...

【USRP】NVIDIA Sionna:用于 6G 物理层研究的开源库

目录 Sionna&#xff1a;用于 6G 物理层研究的开源库主要特点实现6G研究的民主化支持 5G、6G 等模块化、可扩展、可伸缩快速启动您的研究 好处原生人工智能支持综合研究平台开放生态系统 安装笔记使用 pip 安装基于Docker的安装从源代码安装“你好世界&#xff01;”探索锡奥纳…...

DeepSeek开源周Day6:DeepSeek V3、R1 推理系统深度解析,技术突破与行业启示

DeepSeek 在开源周第六天再次发文&#xff0c;中文原文、官方号在知乎 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联动

一、前言 有一个需求&#xff0c;想实现从页面上传一个excel文件&#xff0c;点击提交&#xff0c;就转发给forma模块&#xff0c;然后用户在forma模块里&#xff0c;确认下自动填写的信息是否正确&#xff0c;正确的话就点击保存&#xff0c;存入数据库&#xff1b;不正确的话…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...

DAY 45 超大力王爱学Python

来自超大力王的友情提示&#xff1a;在用tensordoard的时候一定一定要用绝对位置&#xff0c;例如&#xff1a;tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾&#xff1a; tensorboard的发展历史和原理tens…...

2.2.2 ASPICE的需求分析

ASPICE的需求分析是汽车软件开发过程中至关重要的一环&#xff0c;它涉及到对需求进行详细分析、验证和确认&#xff0c;以确保软件产品能够满足客户和用户的需求。在ASPICE中&#xff0c;需求分析的关键步骤包括&#xff1a; 需求细化&#xff1a;将从需求收集阶段获得的高层需…...