71 lines
2.6 KiB
C
71 lines
2.6 KiB
C
/******************************************************************************
|
||
* @file rs485.h
|
||
* @brief RS485 串口通信驱动头文件
|
||
* @details 本文件声明 RS485 通信相关接口与数据结构,支持 DMA 接收与中断接收两种模式。
|
||
* 使用 USART2,收发切换通过 DE 引脚(PA1)控制。
|
||
* @author 阜阳师范大学物电学院
|
||
* @version V0.01
|
||
* @date 2026.1.24
|
||
* @note USART:USART2
|
||
* TX:PA2,RX:PA3,DE:PA1
|
||
* 波特率:700000
|
||
******************************************************************************/
|
||
|
||
#ifndef __RS485_H__
|
||
#define __RS485_H__
|
||
|
||
#include "./SYSTEM/sys/sys.h"
|
||
#include "./SYSTEM/delay/delay.h"
|
||
|
||
/* ============================================================================
|
||
* 宏定义
|
||
* ============================================================================ */
|
||
#define UART_RX_LEN (3208) /**< 接收缓冲区长度(字节),与 Modbus 数据帧长度一致 */
|
||
#define UART_TX_LEN (8) /**< 发送缓冲区长度(字节) */
|
||
|
||
/* ============================================================================
|
||
* 数据结构定义
|
||
* ============================================================================ */
|
||
|
||
/**
|
||
* @brief RS485 收发寄存器结构体
|
||
* @note 用于存放一帧接收数据及发送缓存,与 Modbus 处理模块配合使用
|
||
*/
|
||
typedef struct
|
||
{
|
||
volatile FlagStatus NewMessageFlag; /**< 新消息标志:一帧数据接收完成时置位 */
|
||
volatile uint8_t DR[UART_RX_LEN]; /**< 接收缓存 */
|
||
volatile uint8_t TDR[UART_TX_LEN]; /**< 发送缓存 */
|
||
} RS485_REGISTER_TYPE;
|
||
|
||
extern RS485_REGISTER_TYPE RS485REG; /**< 全局 RS485 收发寄存器 */
|
||
|
||
/* ============================================================================
|
||
* 函数声明
|
||
* ============================================================================ */
|
||
|
||
/**
|
||
* @brief RS485 初始化(DMA 接收模式)
|
||
* @note 配置 GPIO、UART、DMA,启动 ReceiveToIdle DMA 接收。为主工作模式。
|
||
* @retval 无
|
||
*/
|
||
void RS485_DMA_init(void);
|
||
|
||
/**
|
||
* @brief RS485 初始化(中断接收模式)
|
||
* @note 配置 GPIO、UART,使能 RXNE 中断接收。用于异常恢复或短帧接收。
|
||
* @retval 无
|
||
*/
|
||
void RS485_init(void);
|
||
|
||
/**
|
||
* @brief RS485 发送数据
|
||
* @param ptr 待发送数据指针
|
||
* @param len 待发送字节数
|
||
* @note 先切换为发送(DE 高),发送完成后切回接收(DE 低)。使用阻塞方式发送。
|
||
* @retval 无
|
||
*/
|
||
void RS485_SendBuff(uint8_t *ptr, uint32_t len);
|
||
|
||
#endif /* __RS485_H__ */
|