I am using nrf_drv_uart library.
UART communication is set in non-blocing mode, and transfer od data is relised with nrf_drv_uart_rx and nrf_drv_uart_tx functions.
I am using: uint8_t[100] rx_buffer = {0}; for data reception. But, problem is that nrf_drv_uart_rx function returns error: NRF_ERROR_NO_MEM even if rx_buffer is mostly free.
I thouth that i dont need to think of peripheral UART buffer (hardware UART buffer of 6 bytes) when using UART driver library.
And i can not find any documentation how and way to handle this error event, can anyone confirm this and perhaps gives some advice.
Thanks in advance.
//Handler void uart_co2_bsl_handler(nrf_drv_uart_event_t * p_event, void * p_context) { switch(p_event->type) { case NRF_DRV_UART_EVT_TX_DONE: flag_co2_tx_done = 1; break; case NRF_DRV_UART_EVT_RX_DONE: flag_co2_rx_done = 1; break; case NRF_DRV_UART_EVT_ERROR: if(p_event->data.error.error_mask == NRF_ERROR_DATA_SIZE) { NRF_UART0->ERRORSRC = CLEAR_REGISTAR; } else if(p_event->data.error.error_mask == NRF_ERROR_INVALID_DATA) { NRF_UART0->ERRORSRC = CLEAR_REGISTAR; } else if(p_event->data.error.error_mask == NRF_ERROR_TIMEOUT) { nrf_uart_event_clear(NRF_UART0, NRF_UART_EVENT_RXTO); } else if(p_event->data.error.error_mask == NRF_ERROR_SVC_HANDLER_MISSING) { nrf_uart_event_clear(NRF_UART0, NRF_UART_EVENT_ERROR); } else if(p_event->data.error.error_mask == NRF_ERROR_NO_MEM) { nrf_uart_event_clear(NRF_UART0, NRF_UART_EVENT_ERROR); } else { APP_ERROR_HANDLER(p_event->data.error.error_mask); } break; default: break; } } //Init. void uart_co2_bsl_config(void) { nrf_drv_uart_config_t config; config.pselrxd = UART_RX; config.pseltxd = UART_TX; config.pselrts = RTS_PIN_NUMBER; config.pselcts = CTS_PIN_NUMBER; config.baudrate = NRF_UART_BAUDRATE_115200 config.hwfc = NRF_UART_HWFC_DISABLED; config.parity = NRF_UART_PARITY_EXCLUDED; config.interrupt_priority = APP_IRQ_PRIORITY_LOWEST; config.p_context = NULL; APP_ERROR_CHECK(nrf_drv_uart_init(&config, uart_handler)); }