IT评测·应用市场-qidao123.com
标题:
STM32 两个单片机之间的通讯
[打印本页]
作者:
种地
时间:
2025-3-8 19:12
标题:
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 通讯,可以进一步学习:
I²C、SPI 通讯
:用于 LCD 显示、传感器读取等。
RS485、CAN 通讯
:用于工业总线、多装备通讯。
无线通讯(BLE、Wi-Fi、LoRa)
:用于物联网应用。
嵌入式操作体系(RTOS)
:用于多任务通讯管理。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4