主题 | 内容 | 教学目的/扩展视频 |
---|---|---|
RS232串口 | 电路原理,跳线设置,驱动程序。与超级终端通信。 | 了解电路原理和RS232协议。 |
师从洋桃电子,杜洋老师
📑文章目录
-
- 一、RS232通信系统架构
- 二、RS232核心原理与硬件设计
-
- [2.1 电气特性对比](#2.1 电气特性对比)
- [2.2 典型电路设计](#2.2 典型电路设计)
- 三、USART3驱动代码解析
-
- [3.1 关键初始化代码(usart.c)](#3.1 关键初始化代码(usart.c))
- [3.2 数据收发实现](#3.2 数据收发实现)
- 四、通信测试方法
-
- [4.1 自发自收测试](#4.1 自发自收测试)
- [4.2 外设连接测试](#4.2 外设连接测试)
- 五、DB9接口标准线序
-
- [5.1 引脚定义(DTE设备)](#5.1 引脚定义(DTE设备))
- [5.2 线缆类型选择](#5.2 线缆类型选择)
- [六、进阶应用:Modbus RTU实现](#六、进阶应用:Modbus RTU实现)
-
- [6.1 协议帧格式](#6.1 协议帧格式)
- [6.2 校验算法实现](#6.2 校验算法实现)
- 七、常见问题排查
- 八、相关资源
- 总结
(图1:开发板与RS232通讯连接示意图)
(图2:RS232通讯测试示意图)
一、RS232通信系统架构
plaintext
+------------------+ +------------------+ +------------------+
| STM32控制器 | | 电平转换芯片 | | RS232设备 |
| (USART3 PB10/11) |<----->| (SP3232/Max3232) |<----->| (DB9/DB25接口) |
+------------------+ +------------------+ +------------------+
↑
+------------------+
| 触摸按键输入 |
| (矩阵/电容式按键) |
+------------------+
二、RS232核心原理与硬件设计
2.1 电气特性对比
参数 | TTL电平 | RS232电平 |
---|---|---|
逻辑0 | 0V | +3V ~ +15V |
逻辑1 | 3.3V/5V | -3V ~ -15V |
传输距离 | <1m | 可达15m |
抗干扰能力 | 弱 | 强 |
2.2 典型电路设计
plaintext
STM32
│
├──PB10(TX)──► SP3232_TXIN ────► DB9_TX
│
├──PB11(RX)◄──SP3232_RXOUT ◄─── DB9_RX
│
└──GND─────────SP3232_GND ────── DB9_GND
三、USART3驱动代码解析
3.1 关键初始化代码(usart.c)
c
void USART3_Init(u32 BaudRate){
// GPIO配置
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
// TX(PB10) 推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// RX(PB11) 浮空输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// USART参数配置
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = BaudRate;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_Init(USART3, &USART_InitStructure);
USART_Cmd(USART3, ENABLE);
}
配置要点:
- 波特率匹配:115200bps
- 数据格式:8位数据位、无校验、1停止位
- GPIO模式:TX推挽输出,RX浮空输入
3.2 数据收发实现
主程序 USART3 SP3232 DB9 USART3_printf('A') 发送TTL电平 转换为RS232电平 接收RS232信号 转换回TTL电平 USART_ReceiveData() 主程序 USART3 SP3232 DB9
四、通信测试方法
4.1 自发自收测试
c
// 内部短接测试
void SelfTest(void){
USART3_printf("Test String\r\n");
if(USART_GetFlagStatus(USART3, USART_FLAG_RXNE)){
u8 data = USART_ReceiveData(USART3);
OLED_Display(data); // 显示接收数据
}
}
操作步骤:
- 将PB10(TX)与PB11(RX)短接
- 发送测试数据
- 验证接收数据一致性
4.2 外设连接测试
测试设备 | 接线方式 | 预期结果 |
---|---|---|
PC串口 | 直连线 | 双向通信正常 |
工业PLC | 交叉线 | 协议交互成功 |
条码扫描枪 | 适配器转换 | 数据实时接收 |
五、DB9接口标准线序
5.1 引脚定义(DTE设备)
引脚 | 信号 | 说明 |
---|---|---|
1 | CD | 载波检测 |
2 | RXD | 接收数据 |
3 | TXD | 发送数据 |
4 | DTR | 数据终端就绪 |
5 | GND | 信号地 |
6 | DSR | 数据设备就绪 |
7 | RTS | 请求发送 |
8 | CTS | 清除发送 |
9 | RI | 振铃指示 |
5.2 线缆类型选择
线缆名称 | 实际连接方式 | 适用场景 |
---|---|---|
交叉线 | TXD↔RXD, RXD↔TXD, GND↔GND | DTE↔DTE (如PC↔STM32) |
直连线 | TXD↔RXD, RXD↔TXD, GND↔GND | DTE↔DCE (如PC↔Modem) |
(图3:RS232接口不同连接方式示意图)
关键规则 :
无论线缆类型如何命名,必须确保 发送端(TXD)与接收端(RXD)交叉连接,即:
- 设备A的TXD ➔ 设备B的RXD
- 设备A的RXD ➔ 设备B的TXD
- GND直连
六、进阶应用:Modbus RTU实现
6.1 协议帧格式
c
// Modbus RTU帧示例
uint8_t modbusFrame[] = {
0x01, // 设备地址
0x03, // 功能码(读保持寄存器)
0x00, 0x01, // 起始地址
0x00, 0x02, // 寄存器数量
0xCRC_H, 0xCRC_L // CRC校验
};
6.2 校验算法实现
c
uint16_t CRC16(uint8_t *buf, int len){
uint16_t crc = 0xFFFF;
for(int pos=0; pos<len; pos++){
crc ^= (uint16_t)buf[pos];
for(int i=8; i!=0; i--){
if(crc & 0x0001){
crc >>= 1;
crc ^= 0xA001;
}else{
crc >>= 1;
}
}
}
return crc;
}
七、常见问题排查
故障现象 | 检测点 | 解决方案 |
---|---|---|
无数据收发 | SP3232供电电压 | 确保VCC在3.0-5.5V范围 |
数据乱码 | 波特率设置 | 校验双方波特率一致性 |
偶发丢包 | 接地不良 | 加强GND连接 |
传输距离短 | 线缆质量 | 使用屏蔽双绞线 |
八、相关资源
1\] [洋桃电子B站课程-STM32入门100步](http://www.doyoung.net/) \[2\] [STM32F103xx官方数据手册](https://item.szlcsc.com/datasheet/STM32F103C8T6/9243.html?spm=sc.gb.xds.a&lcsc_vid=QVgNUFNfRVFcVVJfQ1VWVFEHQ1RYBgcDFFgIAVIHQVQxVlNSR1FYUFZUT1FaXjsOAxUeFF5JWBYZEEoVDQ0NFAdIFA4DSA%3D%3D) \[3\] [STM32F103X8-B数据手册(中文)](https://pan.baidu.com/s/1Sst3ViMD2NsVCGrL7tS7Mw?pwd=w48k) \[4\] [STM32F103固件函数库用户手册(中文)](https://pan.baidu.com/s/1YOrsuYdEYKuwpmFLE1vPUA?pwd=ix56) \[5\] [SP3232数据手册(英文)](https://pan.baidu.com/s/1OV4eW6QGbgC7RLylosWhcA?pwd=rxs5) \[6\] [RS232通信测试程序](https://pan.baidu.com/s/1Ysddd2DVjjf8HkeqzZhukA?pwd=hhsp) *** ** * ** *** ### 总结 本文实现了基于STM32的RS232通信系统,关键技术点包括: 1. **电平转换**:SP3232实现TTL与RS232电平转换 2. **驱动配置**:USART3的GPIO与参数设置 3. **数据收发**:查询方式实现可靠通信 4. **协议扩展**:Modbus RTU工业协议集成 开发建议: * 长距离传输时增加终端电阻(120Ω) * 使用示波器验证信号质量 * 关键数据添加校验机制 通过本文的驱动框架,开发者可快速构建工业控制、仪器仪表等领域的串口通信系统,实现设备间可靠的数据交互。 *** ** * ** *** 💬 技术讨论(请在评论区留言\~) *** ** * ** *** > **📌 下期预告** :下一期将探讨RS485总线,欢迎持续关注! > > [点击查阅🔍往期【STM32专栏】文章](https://blog.csdn.net/liwangsb2/category_12899382.html) > > **版权声明** :本文采用\[CC BY-NC-SA 4.0\]协议,转载请注明来源 > **实测开发版** :洋桃1号开发版(基于STM32F103C8T6) > **更新日志**: > > * v1.0 初始版本(2025-03-09)