IT评测·应用市场-qidao123.com

标题: STM32 两个单片机之间的通讯 [打印本页]

作者: 种地    时间: 2025-3-8 19:12
标题: STM32 两个单片机之间的通讯
STM32 两个单片机之间的通讯

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





以上我们就是有A B两个板子来进行通讯,A板将吸收按键的键值,然后发送给B板,B板吸收键值,然后判定键值控制LED翻转,然后把键值按字符情势发送给PC

主函数展示
  
  1. #define SENDA
复制代码
  1. int main()
复制代码
  1. {
复制代码
  1. init(115200);
复制代码
  1. init_Usart2(115200);
复制代码
  1. Key_Init();
复制代码
  1. led_init();
复制代码
  1. u8 key;
复制代码
  1. u8 data;
复制代码
  1. while(1)
复制代码
  1. {
复制代码
  1. #ifdef SENDA    //发送版
复制代码
  1. key = key_an();
复制代码
  1. if(key != 0xff) send_Uart2(key);
复制代码
  1. #else //接收板
复制代码
  1. data = rece_Uart2();
复制代码
  1. switch(data)
复制代码
  1. {
复制代码
  1. case 1: LED1_OVERTURN ; send_Uart(data+48); break;
复制代码
  1. case 2: LED2_OVERTURN ; send_Uart(data+48); break;
复制代码
  1. case 3: LED3_OVERTURN ; send_Uart(data+48); break;
复制代码
  1. case 4: LED4_OVERTURN ; send_Uart(data+48); break;
复制代码
  1. }
复制代码
  1. #endif
复制代码
  1. }
复制代码
  1. return 0;
复制代码
  1. }
复制代码

关键代码解释


条件编译
  1. ifdef SENDA  // 发送端代码#else  // 接收端代码#endif
复制代码
通过是否界说 SENDA 宏,编译差别的代码段,实现同一份代码适配发送/吸收两种硬件。就是先把A板发送端的代码烧录进去,接着我们把界说的#define SENDA注释掉,就可以把接受端的代码烧录进去,接着就连接两个板子的PA2和PA3。就可以完成通讯了。

按键检测
 = key_an();  // 获取键值,0xff 表示无按键if (key != 0xff) send_Uart2(key); // 发送有效键值
发送端通过 key_an() 扫描按键,检测到按键后通过 UART2 发送键值。

LED 控制

  1. case 1: LED1_OVERTURN; send_Uart(data+48); break;
复制代码
LED1_OVERTURN 是翻转 LED1 状态的宏,send_Uart(data+48) 将吸收到的数字转为 ASCII 字符(如 1 → '1')通过主串口(如 UART1)发送,可能用于调试输出。

1. 单片机通讯的关键技能

(1) 硬件接口

单片机之间的通讯依赖于 物理层接口,常见的硬件接口包括:

本次实验采用 UART(串口通讯),是一种最基础、最常用的通讯方式。

(2) 通讯协议

通讯协议 规定了数据的格式、传输顺序、错误校验等。常见的协议包括:

在本实验中,我们利用的是 简朴的自界说协议


(3) 数据格式与编码


在本实验中:


(4) 波特率、数据格式


差别装备通讯时,波特率、数据格式必须匹配,否则可能发生数据丢失或乱码。

(5) 数据检测与错误处理


在本实验中,简朴处理:


2. 学习重点

(1) 串口通讯(UART)


(2) 按键扫描


(3) LED 控制


(4) 代码优化


(5) 调试本领



3. 进阶学习方向

如果把握了基本的 UART 通讯,可以进一步学习:





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4