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

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

一、硬件架构设计

1. 硬件连接示意图

STM32(F103C8T6)        MAX485芯片          LabVIEW PC
-    -      
USART1_TX → DI       → RO (MAX485)
USART1_RX ← RO       → DI (MAX485)
DE/RE → GPIOA.8      → DE/RE (控制)
GND → GND
3.3V → VCC

2. 关键元器件选型

元件 型号 作用
MCU STM32F103C8T6 主控芯片
RS485收发器 MAX485 电平转换
终端电阻 120Ω 抑制信号反射

二、STM32固件开发

1. USART初始化代码

// USART1配置 (9600bps, 8N1)
void USART1_Init(void) {GPIO_InitTypeDef GPIO_InitStruct;USART_InitTypeDef USART_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);// GPIO配置GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;  // TXGPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; // RXGPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStruct);// USART配置USART_InitStruct.USART_BaudRate = 9600;USART_InitStruct.USART_WordLength = USART_WordLength_8b;USART_InitStruct.USART_StopBits = USART_StopBits_1;USART_InitStruct.USART_Parity = USART_Parity_No;USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART1, &USART_InitStruct);// 使能接收中断USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);USART_Cmd(USART1, ENABLE);
}// RS485控制引脚配置
#define RS485_DE_PIN  GPIO_Pin_8
#define RS485_DE_PORT GPIOAvoid RS485_SetTxMode() {GPIO_SetBits(RS485_DE_PORT, RS485_DE_PIN);
}void RS485_SetRxMode() {GPIO_ResetBits(RS485_DE_PORT, RS485_DE_PIN);
}

2. 数据帧结构定义

#define FRAME_HEADER  0xAA
#define FRAME_TAIL    0x55typedef struct {uint8_t header;    // 帧头uint8_t addr;      // 设备地址uint8_t cmd;       // 命令码uint16_t data_len; // 数据长度uint8_t *payload;  // 数据负载uint8_t checksum;  // 校验和uint8_t tail;      // 帧尾
} RS485_Frame;

3. 数据收发实现

// 发送数据函数
void RS485_SendData(uint8_t *data, uint16_t len) {RS485_SetTxMode();HAL_UART_Transmit(&huart1, data, len, 1000);RS485_SetRxMode();
}// 中断接收处理
void USART1_IRQHandler(void) {if (USART_GetITStatus(USART1, USART_IT_RXNE)) {uint8_t byte = USART_ReceiveData(USART1);// 实现环形缓冲区存储ring_buffer_write(&rx_buf, byte);}
}

三、LabVIEW上位机开发

1. VISA串口配置

[VISA Configure Serial Port]
Resource Name: COM3
Baud Rate: 9600
Data Bits: 8
Stop Bits: 1
Parity: None
Flow Control: None
Termination Character: 0xA

2. 数据解析流程图

[While Loop]
│
├─[VISA Read] → [Bytes at Port] → [Case Structure]
│   │
│   └─[Data Parsing]
│       ├─[Check Header] → 0xAA?
│       ├─[Extract Address] → [Compare Address]
│       ├─[CRC Check] → [Compare Checksum]
│       └─[Data Processing]
│
└─[VISA Write] → [Response Frame]

3. 关键VI模块

  1. 串口初始化VI:配置串口参数
  2. 数据发送VI:构建标准数据帧
  3. 数据解析VI:提取有效载荷
  4. 状态监控VI:显示通信状态

四、通信协议设计

1. 自定义协议规范

字段 长度 描述
Header 1字节 固定为0xAA
Addr 1字节 设备地址(0x01-0xFE)
Cmd 1字节 命令码(如0x10=读取数据)
DataLen 2字节 数据长度(大端格式)
Payload N字节 有效数据
Checksum 1字节 前6字节累加和取低8位
Tail 1字节 固定为0x55

2. CRC校验实现

uint8_t CalculateCRC(uint8_t *data, uint16_t len) {uint8_t crc = 0;for(uint16_t i=0; i<len; i++) {crc ^= data[i];for(uint8_t j=0; j<8; j++) {crc = (crc & 0x80) ? (crc << 1) ^ 0x31 : crc << 1;}}return crc;
}

五、完整通信流程

  1. 初始化阶段 STM32配置USART和GPIO LabVIEW打开串口连接

  2. 数据发送流程

    LabVIEW → 构建帧 → 发送帧 → 等待ACK → 处理响应
    
  3. 数据接收流程

    STM32 → 接收数据 → 校验完整性 → 触发中断 → 存入缓冲区
    

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

六、工程文件结构

STM32_RS485_Project/
├── Src/
│   ├── main.c
│   ├── usart_driver.c
│   └── crc.c
├── Inc/
│   ├── usart_driver.h
│   └── crc.h
├── LabVIEW/
│   ├── Serial_Comm.vi
│   └── Data_Parser.vi
└── Hardware/├── schematic.pdf└── gerber_files/

七、扩展功能实现

  1. Modbus协议封装

    void Modbus_SendRequest(uint16_t addr, uint8_t func, uint16_t reg) {uint8_t frame[8] = {0xAA, addr, func, 0x00, 0x02, 0x00, reg, 0x00};frame[6] = CalculateCRC(frame, 6);RS485_SendData(frame, 8);
    }
    
  2. 多设备轮询

    [For Loop]
    │
    ├─[Set Address] → 0x01 → 0x02 → 0x03
    ├─[Send Query] → [Read Data]
    └─[Store Results]
    
http://www.rkmt.cn/news/24975.html

相关文章:

  • Impulse Noise(图像脉冲噪音)的抑制和处理方法(提取自《现代图像处理算法教程》一书并做解释)。
  • 2025 年最新推荐净化工程公司排行榜:聚焦车间 / 实验室 / 无尘车间 / 手术室 / 医院 / 厂房 / 空气 / 医药场景,精选实力企业助力精准选择
  • 专栏导航:《数据中心网络与异构计算:从瓶颈突破到架构革命》 - 实践
  • 2025年10月长白山旅游度假酒店推荐:五家热选对比排行与实用评测
  • 2025 酒店家具厂家最新推荐榜:北木斋领衔五大新锐品牌,品质与创新双优之选全解析
  • 深入解析:c++的STL:string类与string类的手动基础实现
  • AI生成代码系列:开源代码片段检测的有效方法
  • 2025年10月豆包关键词排名优化服务推荐排行榜:十大服务商深度对比与评测指南
  • 【tinyusb】首次使用
  • 2025 年西安标志标识厂家最新推荐排行榜:聚焦西北优质服务商,精选实力企业助您精准选型
  • 2025 年国内电容厂家最新推荐排行榜:聚焦固态 / 高压 / 安规等多品类,精选优质厂商助力采购选型
  • 2025年最强ChatGPT客户端TOP5!Windows/Mac通用AI神器推荐
  • 一文看懂zk-STARK协议
  • 第五届计算机图形学、人工智能与数据处理国际学术会议
  • 利用arm板chroot修改其上位机的文件系统
  • 砖形图量化策略需求文档
  • 2025 年面霜厂家最新推荐榜单:优质企业专利技术与一站式服务全景解析及选型指南抗衰霜/润唇霜/植物萃取面霜/抗老霜/保湿霜/修复霜厂家推荐
  • 你们的SpringBoot项目使用Mybatis还是Spring Data JPA?
  • 2025年10月豆包排名优化服务排行榜评测:十家优质服务商综合对比分析报告
  • 2025年10月豆包排名优化服务推荐排行榜:十大服务商对比评测与选择指南
  • 为WPF应用增加项目图标
  • 基于STM32单片机的ECG心电滤波算法
  • Java 网络编程详解
  • 【URP】Unity中Mipmap Streaming原理与实现
  • 2025 年铝门窗厂家推荐排行榜,系统 / 智能 / 断桥 / 窄边 / 定制 / 全景 / 阳光房 / 隐框 / 隔声 / 防火铝门窗公司推荐
  • 2025 年干细胞服务机构最新推荐排行榜:聚焦三体系认证与专利技术,精选优质机构供选择
  • 2025 最新隔音棉生产厂家口碑推荐榜:甄选家装公装专用材质,含西南 / 昆明阻尼片 / 吊顶 / 止震板品牌最新推荐
  • 2025 灭老鼠公司最新推荐榜:欧盟认证技术加持,环保服务双优品牌权威甄选指南
  • KingbaseES V8R6清理冗余历史rman备份
  • 上周热点回顾(10.13