This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nRF52840 UART libraries

Good day all,

I am trying to build a very simple UART connection between the nrf52840 DK and my computer through a UART dongle.

First, I saw the UART example in the peripherals folder and  I tested it in the Loopback mode with no problem.

When I tried to build my own example I noticed that there are 4 different UART library flavors located in different places in the SDK:

  • components> libraries > serial > nrf_serial.h
  • components > libraries > uart > app_uart.h
  • modules > nrfx > hal > nrf_uart.h
  • modules > nrfx > drivers > nrfx_uart.h

  I selected nrf_uart.h (modules > nrfx > hal) just because it was used in the example.

 I am confused with all the different implementations of UART library

Why are there four instead of one UART library?

Which one should I use?

Furthermore, when I run my custom example, nothing is transmitted from the Tx PIn (8) of the nRF52840 DK  when I test it with the oscilloscope.

I cannot understand what I am doing wrong here. I followed the transmission steps given in the nRF52840 datasheet.

The code that I have written is given below.

#include <stdio.h>
#include <stdlib.h>
#include <nrf_gpio.h>     //The GPIO Hardware Abstraction Layer (HAL)
#include <nrf_delay.h>   //For basic delaying functions
#include <pca10056.h>    //GPIO definitions for the nRF52840-DK (aka pca10056)
#include "sdk_config.h"
#include <nrf_uart.h>   // UART library (modules > nrfx > hal)

int main(void)
{
    /* Configure pin 13 as standard output. */
    nrf_gpio_cfg_output(BSP_LED_0); //BSP_LED_0 is pin 13 in the nRF52840-DK
    nrf_gpio_cfg_output(BSP_LED_1); //BSP_LED_0 is pin 13 in the nRF52840-DK
    nrf_gpio_pin_write(BSP_LED_0,1); // switch off the LED
    nrf_gpio_pin_write(BSP_LED_1,1); // switch off the LED

    /*Initialize the UART peripheral */
    nrf_uart_baudrate_set(NRF_UART0,NRF_UART_BAUDRATE_115200);  // set the baudrate
    nrf_uart_configure(NRF_UART0, NRF_UART_PARITY_EXCLUDED, NRF_UART_HWFC_DISABLED);      // set flowcontrol and parity bit
    nrf_uart_txrx_pins_set(NRF_UART0, 6, 8);   // set the Tx and Rx pins on nrf52840 DK
    
    nrf_uart_enable(NRF_UART0);              // Enable UART
    nrf_uart_task_trigger(NRF_UART0, NRF_UART0->TASKS_STARTTX);   // Start UART Transmission 
                                                                    
    nrf_gpio_pin_write(BSP_LED_0,0);        // blink once to indicate start
    nrf_delay_ms(1000);
    nrf_gpio_pin_write(BSP_LED_0,1);
    
    
    while (true){
    
            nrf_uart_txd_set(NRF_UART0,0xAA);                                           // send data to UART 
            while(nrf_uart_event_check(NRF_UART0, NRF_UART0->EVENTS_TXDRDY) == 0){     //blink until data has been sent
                nrf_gpio_pin_write(BSP_LED_0,0);      
                nrf_delay_ms(100);
                nrf_gpio_pin_write(BSP_LED_0,1);
                nrf_delay_ms(100);
            }
    }
   
}

Thank you for your time

Parents Reply Children
No Data
Related