STM32HAL库 -- RS485 开发板通信(速记版)

在本章中, 我们将使用 STM32F429的串口 2 来实现两块开发板之间的 485 通信(半双工)。

RS485 简介

485(一般称作 RS485/EIA-485)隶属于 OSI 模型物理层,是串行通讯的一种。电气特性规定为 2 线,半双工,多点通信的类型。它的电气特性和 RS-232 大不一样。用缆线两端的电压差值来表示传递信号。RS485 仅规定了接受端和发送端的电气特性。它没有规定或推荐任何数据协议

485 推荐的一主多从连接方式如图 40.1.1 所示:

TP8485E/SP3485 可作为 RS485 的收发器,该芯片支持 3.3V~5.5V 供电,最大传输速度可达 250Kbps,支持多达 256 个节点(单位负载为 1/8 的条件下),并且支持输出短路保护。

从上图可以看出:开发板的串口 2 通过 P7 端口设置,连接到 TP8485。注意:RS485_RE 信号,是连接在 PCF8574T 的 P6 脚上的,并没有直接连接到 MCU,需要通过 IIC 总线控制PCF8574T,从而实现对 RS485_RE 的控制。RS485_RE 控制 TP8485 的收发,当 RS485_RE=0 的时候,为接收模式;当 RS485_RE=1 的时候,为发送模式。

另外,PA2,PA3 和 ETH_MDIO 和 PWM_DAC 有共用 IO,所以在使用的时候需要分时复

用,不能同时使用。

图中的 R43 和 R44 是两个偏置电阻,用来保证总线空闲时,A、B 之间的电压差都会大于200mV(逻辑 1)。从而避免因总线空闲时因 A、B 压差不稳定,可能出现的乱码。

最后,我们用 2 根导线将两个开发板 RS485 端子的 A 和 A,B 和 B 连接起来。

RS485 的 HAL 库驱动

由于 485 实际上是串口通讯,我们参照串口实验一节使用类似的 HAL 库驱动即可。

RS485 配置步骤

1)使能串口和 GPIO 口时钟

本实验用到 USART2 串口,使用 PA2 和 PA3 作为串口的 TX 和 RX 脚,因此需要先使能 USART2 和 GPIOA 时钟。

  1. 串口参数初始化(波特率、字长、奇偶校验等)

串口初始化函数 HAL_UART_Init 完成对串口参数初始化。

3)GPIO 模式设置(速度,上下拉,复用功能等)

4)开启串口相关中断,配置串口中断优先级。

使用 HAL_UART_Receive_IT 函数开启串口中断接收,并设置接收 buffer 及其长度。通过 HAL_NVIC_EnableIRQ 函数使能串口中断,通过 HAL_NVIC_SetPriority 函数设置中断优先级。

5)编写中断服务函数

串口 2中断服务函数为:USART2_IRQHandler。

6)串口数据接收和发送

通过读写 USART_DR 寄存器,完成串口数据的接收和发送,HAL 库也给我们提供了:HAL_UART_Receive 和 HAL_UART_Transmit 两个函数用于串口数据的接收和发送。

相关推荐
小蜗牛慢慢爬行13 分钟前
有关异步场景的 10 大 Spring Boot 面试问题
java·开发语言·网络·spring boot·后端·spring·面试
MARIN_shen18 分钟前
Marin说PCB之POC电路layout设计仿真案例---06
网络·单片机·嵌入式硬件·硬件工程·pcb工艺
Asa31935 分钟前
STM32-按键扫描配置
stm32·单片机·嵌入式硬件
南城花随雪。1 小时前
单片机:实现驱动超声波(附带源码)
单片机·嵌入式硬件
嵌入式科普1 小时前
十三、从0开始卷出一个新项目之瑞萨RZN2L串口DMA接收不定长
c语言·stm32·瑞萨·e2studio·rzn2l
m0_748240021 小时前
Chromium 中chrome.webRequest扩展接口定义c++
网络·c++·chrome
終不似少年遊*1 小时前
华为云计算HCIE笔记05
网络·华为云·云计算·学习笔记·hcie·认证·hcs
蜜獾云1 小时前
docker 安装雷池WAF防火墙 守护Web服务器
linux·运维·服务器·网络·网络安全·docker·容器
小林熬夜学编程2 小时前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http
Hacker_Fuchen3 小时前
天融信网络架构安全实践
网络·安全·架构