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".