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

Problems with UART running ble_app_uart_c on nRF52832

Hello, I am trying to run the ble_app_uart_c example that is part of the nRF5_SDK_13.1.0_7ca7556 on a custom board with nRF52832 using IAR. Hardware seems healthy, I succeeded to run LEDs and make them blink... I am having troubles with running the UART, however:

Initialization of UART is as follows:

const app_uart_comm_params_t comm_params =
  {
    .rx_pin_no    = RX_PIN_NUMBER,
    .tx_pin_no    = TX_PIN_NUMBER,
    .rts_pin_no   = RTS_PIN_NUMBER,
    .cts_pin_no   = CTS_PIN_NUMBER,
    .flow_control = APP_UART_FLOW_CONTROL_DISABLED,
    .use_parity   = false,
    .baud_rate    = UART_BAUDRATE_BAUDRATE_Baud115200
  }; 

and also:

#define RX_PIN_NUMBER  NULL
#define TX_PIN_NUMBER  7 
#define CTS_PIN_NUMBER NULL
#define RTS_PIN_NUMBER NULL
#define HWFC           false

After running uart_init(); passes with success (I have played with LEDs to get the result), however the debug lines

printf("BLE UART central example started.\r\n");
NRF_LOG_INFO("BLE UART central example started.\r\n");

do not produce any output on the TX pin.

Also, in the main loop I have the following:

for (;;)
{
    //power_manage();
  
  bsp_board_led_off(0);       
  bsp_board_led_on(1);
  nrf_delay_ms(3000);
  bsp_board_led_off(1);
  bsp_board_led_on(0);
  nrf_delay_ms(3000);  

}

When the uart_init() is commented/disabled I can get the two LEDs blinking, if uart_init() is not commented and gets executed only one LEDs is always lit, which means the nrf_delay_ms is not executed properly.

Since I am dealing with ble_app_uart_c for first time, I am not quite sure where to search for the problem, any advice would be helpful.

Parents
  • It's so simple, just read SDK documentation (how APP_UART_FIFO_INIT looks like in components\libraries\uart\app_uart.h which leads to signature/header of app_uart_init function at line 207 and onwards):

    @retval      NRF_ERROR_INVALID_LENGTH  If a provided buffer is not a power of two.
    

    As you can see in app_uart module this Nordic SDK library/driver works only with Tx/Rx buffer lengths of power of two (2/4/8/16/32/64/128/256/512/1024/2048/4096/8192/...).

Reply
  • It's so simple, just read SDK documentation (how APP_UART_FIFO_INIT looks like in components\libraries\uart\app_uart.h which leads to signature/header of app_uart_init function at line 207 and onwards):

    @retval      NRF_ERROR_INVALID_LENGTH  If a provided buffer is not a power of two.
    

    As you can see in app_uart module this Nordic SDK library/driver works only with Tx/Rx buffer lengths of power of two (2/4/8/16/32/64/128/256/512/1024/2048/4096/8192/...).

Children
No Data
Related