console_uart.c
La consola serie va por el UART conectado al depurador de la MDK: printf ligero, eco de los caracteres recibidos, contador de tick. La primera herramienta de depuración de cualquier proyecto nRF, sin sonda JTAG.
Hardware
Una placa nRF52840-MDK (Nordic nRF52840, Cortex-M4F @ 64 MHz, 1 MB flash / 256 KB RAM, BLE 5 + 802.15.4) con depurador integrado, programada en C con nRF5 SDK v17 y SoftDevice S140. nRF52840-MDK conectada al PC por su USB (el depurador expone un puerto serie).
Cableado
Sin cableado si se mantienen los pines del depurador; si no, TX/RX cruzados a un adaptador USB-serie de 3,3 V.
Funcionamiento
app_uart inicializa el UART (pines y velocidad configurables), print formatea en la pila y envía byte a byte; app_uart_get drena el FIFO de recepción.
Ejecución
Abre el ejemplo equivalente del nRF5 SDK v17 (objetivo custom_board), pega este código en main.c, compila con Segger Embedded Studio o el Makefile de gcc y programa por el depurador integrado.
Variantes
Cambiar a UARTE + EasyDMA para caudal real, o redirigir printf mediante _write (newlib) para un printf estándar.
console_uart.c
// nRF52840-MDK : console UART via le debugger intégré (puce J-Link/CP210x).
// Broches SDK par défaut (custom_board) : TX P0.06 / RX P0.08 — adapter si besoin.
#include <stdio.h>
#include <stdarg.h>
#include "nrf_drv_uart.h"
#include "app_uart.h"
static void uart_init(void) {
nrf_drv_uart_config_t cfg = NRF_DRV_UART_DEFAULT_CONFIG;
cfg.pseltxd = 6; // TX : vérifier le schéma de la carte
cfg.pselrxd = 8; // RX
cfg.baudrate = NRF_UART_BAUDRATE_115200;
app_uart_init(&cfg);
}
static void print(const char *fmt, ...) {
char buf[128];
va_list ap; va_start(ap, fmt);
int n = vsnprintf(buf, sizeof buf, fmt, ap);
va_end(ap);
for (int i = 0; i < n; i++) app_uart_putc(buf[i]);
}
int main(void) {
uart_init();
print("\nnRF52840-MDK — console OK\n");
uint32_t n = 0;
for (;;) {
uint8_t octet;
while (app_uart_get(&octet) == NRF_SUCCESS) { // écho RX
app_uart_putc(octet);
print("[recu 0x%02X]\n", octet);
}
if (++n % 500000 == 0) print("tick %u\n", n / 500000);
}
}