场景描述:
公司一个项目,需要使用nrf52832 的串口和esp8266的串口对接,但是,esp8266在复位后,会以74880的波特率,打印一大串模块版本信息,然后,其波特率切换到115200工作,nrf52832 在以115200的波特率下工作,如果接收到74880波特率发送过来的信息,就会报致命错误,然后,自动重启,通过LOG打印出来如下:

问题:
由于esp8266是使用乐鑫官方的通用AT固件,项目的功能代码在nrf52832中实现,nrf52832有可能在运行期间去复位esp8266,但是,不能让nrf52832 重启(没有办法关闭esp8266复位后打印版本信息)。问题:如果让nrf52832 在设置115200波特率的情况下,接收其他波特率的数据,其能不重启,串口应该如何初始化?
PS:我把nfr52832设置成115200的波特率,在电脑串口调试助手中,使用74880的波特率,向其发送一包数据,其也会重启。我的nrf52832串口部分初始化代码如下:
void uart_init(void)
{
uint32_t err_code;
app_uart_comm_params_t const comm_params =
{
.rx_pin_no = RX_PIN_NUMBER,
.tx_pin_no = TX_PIN_NUMBER,
.rts_pin_no = NRF_UART_PSEL_DISCONNECTED,
.cts_pin_no = NRF_UART_PSEL_DISCONNECTED,
//.rts_pin_no = RTS_PIN_NUMBER,
//.cts_pin_no = CTS_PIN_NUMBER,
.flow_control = APP_UART_FLOW_CONTROL_DISABLED,
.use_parity = false,
.baud_rate = NRF_UART_BAUDRATE_115200
};
APP_UART_FIFO_INIT(&comm_params,
UART_RX_BUF_SIZE, //#define UART_RX_BUF_SIZE 1024
UART_TX_BUF_SIZE, //#define UART_TX_BUF_SIZE 1024
uart_event_handle, //串口接收中断中,仅仅用app_uart_get() 把缓冲区字节读取出来,不做任何处理,return出去。
//APP_IRQ_PRIORITY_LOWEST,
//APP_IRQ_PRIORITY_MID,
APP_IRQ_PRIORITY_HIGHEST, //串口的中断优先级应该最高
err_code);
APP_ERROR_CHECK(err_code);
}