#include "stdlib.h" #include "utils.h" #include "fram.h" #include "ModbusS.h" #include "ads1220.h" // #include "SEGGER_RTT.h" #include "ModbusM.h" extern void modbus_master_poll(int n); extern int modbus_master_on_revice(int ch, uint8_t *rxbuf, int length); extern uint8_t uart1_txbuf[]; extern uint8_t uart1_rxbuf[]; extern uint8_t uart2_txbuf[]; extern uint8_t uart2_rxbuf[]; extern int uart1_rx_start(void); extern int uart1_rx_check(void); extern int uart1_tx_start(uint8_t *data, int length); extern int uart2_rx_start(void); extern int uart2_rx_check(void); extern int uart2_tx_start(uint8_t *data, int length); void RS485_init(); void print_init(); extern uint8_t led_toggle_count; void comm_poll(void) { static uint32_t modbus_master_tick = 0; static uint32_t tick_100ms = 0; static int uart1_timeout = 0; static int uart2_timeout = 0; int rxlen,txlen; // if((rxlen = uart1_rx_check()) > 0){ // txlen = ModbusSlaveProcess(uart1_txbuf,uart1_rxbuf,rxlen,1); // if(txlen > 0) // { // HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin); // uart1_tx_start(uart1_txbuf,txlen); // } // else{ // uart1_rx_start(); // } // } if((rxlen = uart2_rx_check()) > 0){ txlen = ModbusSlaveProcess(uart2_txbuf,uart2_rxbuf,rxlen,1); if(txlen > 0) { uart2_tx_start(uart2_txbuf,txlen); } else{ uart2_rx_start(); } led_toggle_count = 0; uart1_timeout = 0; } if(TickDiff(tick_100ms) > 100) { tick_100ms = xTaskGetTickCount(); if(++uart1_timeout > 100){ uart1_timeout = 0; // HAL_UART_MspDeInit(&huart2); // MX_USART2_UART_Init(); uart2_rx_start(); } if(++uart2_timeout > 1000){ uart2_timeout = 0; // HAL_UART_MspDeInit(&huart1); // MX_USART1_UART_Init(); } } if(TickDiff(modbus_master_tick) > 10) { modbus_master_tick = xTaskGetTickCount(); modbus_master_poll(0); } if((rxlen = uart1_rx_check()) > 0){ // 做一个uart1_rx_check 读串口 modbus_master_on_revice(0,uart1_rxbuf,rxlen); uart2_timeout = 0; } } void comm_init(void) { // MX_USART1_UART_Init(); // MX_USART2_UART_Init(); RS485_init(); print_init(); ModbusM_init(); uart2_rx_start(); }