dede旅游网站源码,网站设计如何自学,大连德泰建设,最新新闻事件报道STM32 两个单片机之间的通信
原创 HS 平凡灵感码头 2025年03月04日 11:25 广东 以上我们就是有A B两个板子来进行通信#xff0c;A板将接收按键的键值#xff0c;然后发送给B板#xff0c;B板接收键值#xff0c;然后判断键值控制LED翻转#xff0c;然后把键值按字符形式…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(data48); break; case 2: LED2_OVERTURN ; send_Uart(data48); break; case 3: LED3_OVERTURN ; send_Uart(data48); break; case 4: LED4_OVERTURN ; send_Uart(data48); 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(data48); break;
LED1_OVERTURN 是翻转 LED1 状态的宏send_Uart(data48) 将接收到的数字转为 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 → 1data 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 用于多任务通信管理。