1. RS485通信基础与STM32F1硬件设计
在工业控制、楼宇自动化等场景中,RS485因其差分传输、抗干扰能力强、支持多点通信等特点成为首选。与常见的RS232不同,RS485采用平衡传输方式,通过A/B两线间的电压差表示逻辑状态,理论传输距离可达1200米(速率低于100kbps时)。
STM32F1系列MCU内置多个USART外设,通过简单的外围电路即可实现RS485通信。典型电路包含三个关键部分:
- 电平转换芯片:如MAX485、SP3485等,负责TTL与RS485电平转换
- 使能控制电路:通过GPIO控制收发器方向(发送模式拉高DE/RE,接收模式拉低)
- 终端匹配电阻:在总线两端并联120Ω电阻,抑制信号反射
关键提示:RS485总线必须采用手拉手拓扑,避免星型连接。A/B线间建议预留600Ω的失效保护偏置电阻,确保总线空闲时处于确定状态。
2. 标准库环境搭建与USART2配置
使用STM32标准外设库开发时,需先建立基础工程框架。以Keil MDK为例:
- 创建新工程,选择对应STM32F1型号
- 添加标准库文件(stm32f10x_usart.c等)
- 配置系统时钟(通常选择72MHz主频)
USART2初始化关键代码如下:
c复制void USART2_Config(void) {
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
// 使能时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
// 配置TX(PA2)为复用推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MH
