Files
DTU-LCD/Drivers/BSP/RS485/rs485.h

71 lines
2.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/******************************************************************************
* @file rs485.h
* @brief RS485 串口通信驱动头文件
* @details 本文件声明 RS485 通信相关接口与数据结构,支持 DMA 接收与中断接收两种模式。
* 使用 USART2收发切换通过 DE 引脚PA1控制。
* @author 阜阳师范大学物电学院
* @version V0.01
* @date 2026.1.24
* @note USARTUSART2
* TXPA2RXPA3DEPA1
* 波特率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__ */