#ifndef __HARDWARE_H #define __HARDWARE_H #include"modbus_parse.h" /*在8N1下,一个字符=10位,波特率表示每秒传输的位数,换算成每us传输的位数要除以10^6 *所以一个字符时间 = 10/(波特率/10^6)=10^7/波特率 *(+ MODBUS_USART_BAUDRATE - 1UL)部分为整数运算向上取整 */ #if (MODBUS_USART_BAUDRATE > 19200U) /*固定等待1750us,再减去IDLE中断等待的1个字符时间*/ /*1.5个字符=750us-1个字符时间*/ #define MODBUS_IDLE_TO_T15_US \ ((750UL * MODBUS_USART_BAUDRATE - 10000000UL + MODBUS_USART_BAUDRATE - 1UL) / MODBUS_USART_BAUDRATE) /*2个字符=1000us*/ #define MODBUS_T15_TO_T35_US 1000UL /*3.5个字符=1750us-1个字符时间*/ #define MODBUS_IDLE_TO_T35_US \ ((1750UL * MODBUS_USART_BAUDRATE - 10000000UL + MODBUS_USART_BAUDRATE - 1UL) / MODBUS_USART_BAUDRATE) #else /*IDLE中断已经过了1个字符的时间,还需等待2.5个字符*/ /*1.5个字符-1个字符时间=0.5个字符时间*/ #define MODBUS_IDLE_TO_T15_US \ ((5000000UL + MODBUS_USART_BAUDRATE - 1UL) / MODBUS_USART_BAUDRATE) /*2个字符时间*/ #define MODBUS_T15_TO_T35_US \ ((20000000UL + MODBUS_USART_BAUDRATE - 1UL) / MODBUS_USART_BAUDRATE) /*3.5个字符-1个字符时间=2.5个字符时间*/ #define MODBUS_IDLE_TO_T35_US \ ((25000000UL + MODBUS_USART_BAUDRATE - 1UL) / MODBUS_USART_BAUDRATE) #endif extern uint8_t ModbusRxBuf[MODBUS_RX_BUF_SIZE]; extern uint8_t ModbusTxBuf[MODBUS_TX_BUF_SIZE]; void ModbusHardwareInit(void); #endif