RTU测试
void uart_tx_complete_handler()
{
}
#define UART_RECV_BUF_SIZE (64)
uint8_t g_uart_recv_buf[UART_RECV_BUF_SIZE] = {0};
uint8_t g_recv_index = 0;
void uart_rx_ready_handler(uint8_t ch)
{
static int tick_pre = 0;
static int tick_cur = 0;
tick_cur = GetCurTick();
/* 如果超时,则清空队列,重新开始
if (tick_cur - tick_pre > 10)
{
memset(g_uart_recv_buf, 0, UART_RECV_BUF_SIZE);
g_recv_index = 0;
}
/* 接收缓冲区填充
if (g_recv_index < UART_RECV_BUF_SIZE)
{
g_uart_recv_buf[g_recv_index] = ch;
g_recv_index++;
}
/* 解析数据 */
/* 地址, 功能码, 寄存器地址,寄存器值,CRC16 */
return ;
}
void ParseData()
{
Cmd.addr = g_uart_recv_buf[0];
Cmd.func_code = g_uart_recv_buf[1];
Cmd.reg = (g_uart_recv_buf[2] << 8) | (g_uart_recv_buf[3] << 0);
Cmd.reg_value = (g_uart_recv_buf[4] << 8) | (g_uart_recv_buf[5] << 0);
Cmd.crc16 = (g_uart_recv_buf[6] << 8) | (g_uart_recv_buf[7] << 0);
if (chck_crc16(g_uart_recv_buf ,8 ) == 0)
{
//Execute Function
//Generate Response Data
}
}