cmcu为stm32h743IIt6
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

135 lines
4.2 KiB

/*
* rs485.h
*
* Change Logs:
* Date Author Notes
* 2020-06-08 qiyongzhong first version
* 2020-12-17 qiyongzhong add sample
* 2020-12-18 qiyongzhong add rs485_send_then_recv
*/
#ifndef __DRV_RS485_H__
#define __DRV_RS485_H__
#include <rtconfig.h>
#ifdef __cplusplus
extern "C"
{
#endif
//#define RS485_USING_TEST //使用测试功能
//#define RS485_USING_SAMPLE_SLAVE //使用从机示例
//#define RS485_USING_SAMPLE_MASTER //使用主机示例
//#define RS485_USING_DMA_RX //使用DMA接收
//#define RS485_USING_INT_TX //使用中断发送
//#define RS485_USING_DMA_TX //使用DMA发送
#ifndef RS485_SW_DLY_US
#define RS485_SW_DLY_US 0 //发送引脚控制切换延时
#endif
#define RS485_TX_COMP_TMO_MAX (3 * RT_TICK_PER_SECOND)//最大DMA传输完成超时
#define RS485_BYTE_TMO_MIN 2 //最小字节超时
#define RS485_BYTE_TMO_MAX 200 //最大字节超时
typedef struct rs485_inst rs485_inst_t;
/*
* @brief create rs485 instance dynamically
* @param serial - serial device name
* @param baudrate - serial baud rate
* @param parity - serial parity mode
* @param pin - mode contrle pin
* @param level - send mode level
* @retval instance handle
*/
rs485_inst_t * rs485_create(const char *serial, int baudrate, int parity, int pin, int level);
/*
* @brief destory rs485 instance created dynamically
* @param hinst - instance handle
* @retval 0 - success, other - error
*/
int rs485_destory(rs485_inst_t * hinst);
/*
* @brief config rs485 params
* @param hinst - instance handle
* @param baudrate - baudrate of communication
* @param databits - data bits, 5~8
* @param parity - parity bit, 0~2, 0 - none, 1 - odd, 2 - even
* @param stopbits - stop bits, 0~1, 0 - 1 stop bit, 1 - 2 stop bits
* @retval 0 - success, other - error
*/
int rs485_config(rs485_inst_t * hinst, int baudrate, int databits, int parity, int stopbits);
/*
* @brief set wait datas timeout for receiving
* @param hinst - instance handle
* @param tmo_ms - receive wait timeout, 0--no wait, <0--wait forever, >0--wait timeout, default = 0
* @retval 0 - success, other - error
*/
int rs485_set_recv_tmo(rs485_inst_t * hinst, int tmo_ms);
/*
* @brief set byte interval timeout for receiving
* @param hinst - instance handle
* @param tmo_ms - byte interval timeout, default is calculated from baudrate
* @retval 0 - success, other - error
*/
int rs485_set_byte_tmo(rs485_inst_t * hinst, int tmo_ms);
/*
* @brief open rs485 connect
* @param hinst - instance handle
* @retval 0 - success, other - error
*/
int rs485_connect(rs485_inst_t * hinst);
/*
* @brief close rs485 connect
* @param hinst - instance handle
* @retval 0 - success, other - error
*/
int rs485_disconn(rs485_inst_t * hinst);
/*
* @brief receive datas from rs485
* @param hinst - instance handle
* @param buf - buffer addr
* @param size - maximum length of received datas
* @retval >=0 - length of received datas, <0 - error
*/
int rs485_recv(rs485_inst_t * hinst, void *buf, int size);
/*
* @brief send datas to rs485
* @param hinst - instance handle
* @param buf - buffer addr
* @param size - length of send datas
* @retval >=0 - length of sent datas, <0 - error
*/
int rs485_send(rs485_inst_t * hinst, void *buf, int size);
/*
* @brief break rs485 receive wait
* @param hinst - instance handle
* @retval 0 - success, other - error
*/
int rs485_break_recv(rs485_inst_t * hinst);
/*
* @brief send data to rs485 and then receive response data from rs485
* @param hinst - instance handle
* @param send_buf - send buffer addr
* @param send_len - length of send datas
* @param recv_buf - recv buffer addr
* @param recv_size - maximum length of received datas
* @retval >=0 - length of received datas, <0 - error
*/
int rs485_send_then_recv(rs485_inst_t * hinst, void *send_buf, int send_len, void *recv_buf, int recv_size);
#ifdef __cplusplus
}
#endif
#endif