基于STM32与RS485总线的串口通信

作者:listhi520日期:2025/11/14

一、硬件架构设计

1. 硬件连接示意图
1STM32(F103C8T6)        MAX485芯片          LabVIEW PC
2-    -      
3USART1_TX → DI       → RO (MAX485)
4USART1_RX ← RO       → DI (MAX485)
5DE/RE → GPIOA.8      → DE/RE (控制)
6GND → GND
73.3V → VCC
8
2. 关键元器件选型
元件型号作用
MCUSTM32F103C8T6主控芯片
RS485收发器MAX485电平转换
终端电阻120Ω抑制信号反射

二、STM32固件开发

1. USART初始化代码
1// USART1配置 (9600bps, 8N1)
2void USART1_Init(void) {
3    GPIO_InitTypeDef GPIO_InitStruct;
4    USART_InitTypeDef USART_InitStruct;
5
6    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
7    
8    // GPIO配置
9    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;  // TX
10    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
11    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
12    GPIO_Init(GPIOA, &GPIO_InitStruct);
13
14    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; // RX
15    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
16    GPIO_Init(GPIOA, &GPIO_InitStruct);
17
18    // USART配置
19    USART_InitStruct.USART_BaudRate = 9600;
20    USART_InitStruct.USART_WordLength = USART_WordLength_8b;
21    USART_InitStruct.USART_StopBits = USART_StopBits_1;
22    USART_InitStruct.USART_Parity = USART_Parity_No;
23    USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
24    USART_Init(USART1, &USART_InitStruct);
25    
26    // 使能接收中断
27    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
28    USART_Cmd(USART1, ENABLE);
29}
30
31// RS485控制引脚配置
32#define RS485_DE_PIN  GPIO_Pin_8
33#define RS485_DE_PORT GPIOA
34
35void RS485_SetTxMode() {
36    GPIO_SetBits(RS485_DE_PORT, RS485_DE_PIN);
37}
38
39void RS485_SetRxMode() {
40    GPIO_ResetBits(RS485_DE_PORT, RS485_DE_PIN);
41}
42
2. 数据帧结构定义
1#define FRAME_HEADER  0xAA
2#define FRAME_TAIL    0x55
3
4typedef struct {
5    uint8_t header;    // 帧头
6    uint8_t addr;      // 设备地址
7    uint8_t cmd;       // 命令码
8    uint16_t data_len; // 数据长度
9    uint8_t *payload;  // 数据负载
10    uint8_t checksum;  // 校验和
11    uint8_t tail;      // 帧尾
12} RS485_Frame;
13
3. 数据收发实现
1// 发送数据函数
2void RS485_SendData(uint8_t *data, uint16_t len) {
3    RS485_SetTxMode();
4    HAL_UART_Transmit(&huart1, data, len, 1000);
5    RS485_SetRxMode();
6}
7
8// 中断接收处理
9void USART1_IRQHandler(void) {
10    if (USART_GetITStatus(USART1, USART_IT_RXNE)) {
11        uint8_t byte = USART_ReceiveData(USART1);
12        // 实现环形缓冲区存储
13        ring_buffer_write(&rx_buf, byte);
14    }
15}
16

三、LabVIEW上位机开发

1. VISA串口配置
1[VISA Configure Serial Port]
2Resource Name: COM3
3Baud Rate: 9600
4Data Bits: 8
5Stop Bits: 1
6Parity: None
7Flow Control: None
8Termination Character: 0xA
9
2. 数据解析流程图
1[While Loop]
23├─[VISA Read][Bytes at Port][Case Structure]
4│   │
5│   └─[Data Parsing]
6│       ├─[Check Header]0xAA?
7│       ├─[Extract Address][Compare Address]
8│       ├─[CRC Check][Compare Checksum]
9│       └─[Data Processing]
1011└─[VISA Write][Response Frame]
12
3. 关键VI模块
  1. 串口初始化VI:配置串口参数
  2. 数据发送VI:构建标准数据帧
  3. 数据解析VI:提取有效载荷
  4. 状态监控VI:显示通信状态

四、通信协议设计

1. 自定义协议规范
字段长度描述
Header1字节固定为0xAA
Addr1字节设备地址(0x01-0xFE)
Cmd1字节命令码(如0x10=读取数据)
DataLen2字节数据长度(大端格式)
PayloadN字节有效数据
Checksum1字节前6字节累加和取低8位
Tail1字节固定为0x55
2. CRC校验实现
1uint8_t CalculateCRC(uint8_t *data, uint16_t len) {
2    uint8_t crc = 0;
3    for(uint16_t i=0; i<len; i++) {
4        crc ^= data[i];
5        for(uint8_t j=0; j<8; j++) {
6            crc = (crc & 0x80) ? (crc << 1) ^ 0x31 : crc << 1;
7        }
8    }
9    return crc;
10}
11

五、完整通信流程

  1. 初始化阶段 STM32配置USART和GPIO LabVIEW打开串口连接
  2. 数据发送流程
1LabVIEW → 构建帧 → 发送帧 → 等待ACK → 处理响应  
  1. 数据接收流程
1STM32 → 接收数据 → 校验完整性 → 触发中断 → 存入缓冲区  

参考代码 STM32+RS485串口通信,上位机是labview www.youwenfan.com/contentcsl/70326.html

六、工程文件结构

1STM32_RS485_Project/
2├── Src/
3│   ├── main.c
4│   ├── usart_driver.c
5│   └── crc.c
6├── Inc/
7│   ├── usart_driver.h
8│   └── crc.h
9├── LabVIEW/
10│   ├── Serial_Comm.vi
11│   └── Data_Parser.vi
12└── Hardware/
13    ├── schematic.pdf
14    └── gerber_files/
15

七、扩展功能实现

  1. Modbus协议封装
1void Modbus_SendRequest(uint16_t addr, uint8_t func, uint16_t reg) {  
2    uint8_t frame[8] = {0xAA, addr, func, 0x00, 0x02, 0x00, reg, 0x00};  
3    frame[6] = CalculateCRC(frame, 6);  
4    RS485_SendData(frame, 8);  
5}  
  1. 多设备轮询
1[For Loop]  
23├─[Set Address]0x010x020x03  
4├─[Send Query][Read Data]  
5└─[Store Results]  

基于STM32与RS485总线的串口通信》 是转载文章,点击查看原文


相关推荐


电脑硬盘数据恢复原理及核心技术解析
电脑小白技术2025/11/13

数据恢复技术的核心在于理解文件删除的底层逻辑。当文件被删除时,操作系统并未立即清除数据,而是将文件占用的空间标记为可覆盖。这意味着,只要这些空间未被新数据覆盖,文件就有机会被恢复。数据恢复技术通过扫描硬盘,寻找这些被标记为可覆盖但尚未被覆盖的数据块,从而实现文件的恢复。 在实际应用中,数据恢复技术已成功帮助无数人找回误删的重要文件。无论是个人用户还是企业,数据恢复技术都发挥着不可替代的作用。通过本文,我们将深入探讨数据恢复技术的原理、方法及其应用案例,带您了解这一神秘而实用的技术。 硬盘


AR眼镜基于上下文智能识别:电力运维高效规范操作应用方案|阿法龙XR云平台
北京阿法龙科技有限公司2025/11/12

传统电力运维依赖人工经验判断设备状态、查阅纸质、移动端手册,存在操作效率低、信息不对称、误操作风险高等痛点。随着AR技术与AI算法的融合升级,AR 眼镜已从被动显示提示向主动智能识别演进。依托AI图像识别、上下文语义理解技术,实现开关、仪表、设备状态的自动识别与精准交互,辅助运维人员规范操作流程、提升巡检效率,降低人为失误导致的安全风险。 AR终端采用轻量化AR眼镜,集成高清摄像头、麦克风,支持双手解放操作。本方案的算法核心包含设备识别模型(训练开关、仪表、互感器等电力设备特征库)、状态解析模


快速定位bug,编写测试用例
程序员小远2025/11/10

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快    作为一名测试人员如果连常见的系统问题都不知道如何分析,频繁将前端人员问题指派给后端人员,后端人员问题指派给前端人员,那么在团队里你在开发中的地位显而易见 ,口碑、升值、加薪那应该是你遥不可及的梦。 但是作为测试人员来说,尽管你不能深入的去分析问题,但是你能发现系统存在的问题,这点也是值得肯定的,所以继续加油! 所以今天给大家分享的主题是:"怎么快速定位bug" 一、定位问题的重要性 很多测试人员可能会说,我


编写微服务api
CV_J2025/11/8

1.创建实体类模块 2.导入lombok <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency> </dependencies> 3.添加实体类 packag


使用CameraX 1.5进行高速拍摄和慢动作视频拍摄
稀有猿诉2025/11/5

本文译自「High-Speed Capture and Slow-Motion Video with CameraX 1.5」,原文链接android-developers.googleblog.com/2025/10/hig…,由Leo Huang发布于2025年10月28日。 清晰捕捉快速运动的画面是现代相机应用的关键特性。这可以通过高速拍摄来实现——即以 120 或 240 fps 等速率采集帧。这种高保真拍摄可用于两种截然不同的用途:创建高帧率视频以进行逐帧的详细分析,或生成慢动作视


MPK(Mirage Persistent Kernel)源码笔记(4)--- 转译系统
罗西的思考2025/10/31

MPK(Mirage Persistent Kernel)源码笔记(4)--- 转译系统 0x00 概要 0x01 Task和Event 1.1 可执行任务 1.2 事件 0x02 生成CUDA代码 2.1 生成代码 2.2 注册代码 2.3 获取代码 0x03 生成任务图 3.1 入口 3.2 runtime.cc主体 3.3 建立依赖关系 3.4 输出代码 0xFF 参考 0x00 概要 此处的”转译系统“包含两部分: 把计算图转换为任务图。 将 Mir


目标使用过期的TLS1.0 版协议
oneslide2025/10/29

文章目录 目标使用过期的TLS1.0 版协议详细描述解决办法启用测试办法注意事项 目标主机支持RSA密钥交换详细描述解决办法 目标使用过期的TLS1.0 版协议 详细描述 该插件连接到目标主机服务,检测到目标服务加密通信使用的SSL加密算法。 远程服务利用旧版 TLS 加密流量。 解决办法 启用 TLS 1.2 和/或 1.3 支持,禁用 TLS 1.0 支持 nginx样例配置如下: server { list


LabVIEW开发双光子成像
LabVIEW开发2025/10/26

双光子成像技术作为一种先进的光学成像手段,广泛应用于生物医学研究领域,尤其适用于活体细胞与组织的成像研究。LabVIEW软件在双光子成像系统中的应用,涵盖系统设计、数据采集、图像处理及用户界面开发等核心环节。 双光子原理 双光子成像技术基于双光子吸收效应:当两个光子近乎同时被荧光分子吸收时,可激发该分子产生荧光。该技术的核心优势在于能够实现深层组织的高分辨率成像 —— 较长波长的光在生物组织中散射程度更低,从而具备更强的组织穿透能力。 LabVIEW开发 在双光子成像系统中,La


有哪些开源项目提供即插即用的 qss 模板文件
hmoexyz2025/10/23

有哪些开源项目提供即插即用的 qss 模板文件 Qt 的 .qss(Qt Style Sheet)文件类似于 CSS,用于自定义 Qt 应用的界面样式。虽然 Qt 官方没有一个专门的 QSS 模板库,但社区中确实存在一些优秀的开源项目提供了丰富的 QSS 样式模板,可直接使用或作为参考。 以下是几个值得一看的开源项目或资源: 🎯 1. QtTheme 项目地址:https://github.com/hubenchang0515/QtTheme 简介:纯 qss 的 Qt 主题。


亚马逊云代理商:怎么快速构建高安全区块链应用?
TG_yunshuguoji2025/10/22

作为全球领先的云计算平台,亚马逊云(AWS)为区块链应用开发提供了全方位支持。它为企业提供了从需要去中心化信任的多方协作网络(Managed Blockchain)到仅需不可篡改数据记录的内部应用(QLDB)的完整解决方案谱系。如果你还没有AWS账号或上云实际使用云服务过程中有不懂的,可寻云枢国际免卡上云用云以及获得专业的技术支持和折扣。 一、AWS区块链核心优势 1. 安全性 2. 可扩展性 3. 完全托管服务,降低开发运维难度 4. 与其他AWS服务无缝集成 二、四大核心服务

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0