UARTE in NRF52840

Hi I am using UARTE on NRF52840.

static void uart_callback(nrfx_uarte_event_t const *p_event, void *p_context)
{
    uint32_t err_code;
    switch (p_event->type)
    {
    case NRFX_UARTE_EVT_TX_DONE:
        LREP_INFO(__func__, "UART TX complete");
        break;

    case NRFX_UARTE_EVT_RX_DONE:
    {
        LREP_INFO(__func__, "UART RX complete -> data %d", p_event->data.rxtx.p_data[0]);
        LREP_INFO(__func__, "--> Bytes transfered: %u", p_event->data.error.rxtx.bytes);
        err_code = nrfx_uarte_rx(&uart_instance, uart_rx_buffer, 1);
        if (err_code == NRFX_SUCCESS)
        {
            // LREP(__func__, "Init UART rx success");
        }
        else
            LREP_ERROR(__func__, "Init UART rx error %d", err_code);
        break;
    }

    case NRFX_UARTE_EVT_ERROR:
    {
        LREP_ERROR(__func__, "NRFX_UARTE_EVT_ERROR : 0x%4x", p_event->data.error.error_mask);
        break;
    }
    }
}

void app_uart_init(void)
{
    nrfx_uarte_config_t config = NRFX_UARTE_DEFAULT_CONFIG(UART_TX_PIN, UART_RX_PIN);
    // config.p_context = &uart_instance;
    int err_code = nrfx_uarte_init(&uart_instance, &config, uart_callback);
#if defined(__ZEPHYR__)
    IRQ_DIRECT_CONNECT(NRFX_IRQ_NUMBER_GET(NRF_UARTE_INST_GET(UART_INSTANCE_ID)), IRQ_PRIO_LOWEST,
                       NRFX_UARTE_INST_HANDLER_GET(UART_INSTANCE_ID), 1);
#endif
    if (err_code == NRFX_SUCCESS)
    {
        LREP(__func__, "Init UART success");
    }
    else
        LREP_ERROR(__func__, "Init UART error %d", err_code);
    err_code = nrfx_uarte_rx(&uart_instance, uart_rx_buffer, 1);
    if (err_code == NRFX_SUCCESS)
    {
        // LREP(__func__, "Init UART rx success");
    }
    else
        LREP_ERROR(__func__, "Init UART rx error %d", err_code);
}
void app_uart_send_data(uint8_t *data, uint16_t len)
{
    if (len + 5 > COMM_BUFF_SIZE)
    {
        LREP_ERROR(__func__, "Tx buffer over sized, dataLen %d", len);
        return;
    }
    memset(ComTx.buff, 0, COMM_BUFF_SIZE);
    ComTx.buff[0] = ComTx.buff[1] = COMM_UART_SOF;
    set_u16(ComTx.buff + 2, len);
    memcpy(ComTx.buff + 4, data, len);
    ComTx.buff[4 + len] = app_uart_comm_checksum(data, len);
    ComTx.len = len + 5;
    int err;
    for (int i = 0; i < ComTx.len; i++)
    {
        printk("data :%d \n", ComTx.buff[i]);
    }
    err = nrfx_uarte_tx(&uart_instance, ComTx.buff, ComTx.len);
    if (err == NRFX_SUCCESS)
    {
        LREP(__func__, "UART send success");
    }
    else
        LREP_ERROR(__func__, "UART send error %d", err);
    while (nrfx_uarte_tx_in_progress(&uart_instance))
    {
    }
}
I have no problem sending. But when I get the value it only gets 7 bytes, bigger bytes I can't receive. May I ask why not.
Examples: When i send form my computer "123456789" data, i only receive "1234567".
Related