nRF52840 with GPS help

Hello, I want to get GPS location information with nRF52840, I use UART protocol at 9600 baud rate, but I cannot read the data regularly, how should I do?

Parents Reply Children
  • yes i am using existing driver made necessary adjustments according to datasheet

  • Hi,

    Can you share a trace from a logic analyzer that shows the data on RX and TX when you request GPS location?

    Berkay Dudu said:

    yes i am using existing driver made necessary adjustments according to datasheet

    Can you show me this in your code?

    regards
    Jared 

  • Hi

    Sorry I havent logic analyzer device, therefor I will send the code

    #include <stdbool.h>
    #include <stdint.h>
    #include <stdio.h>
    #include "app_uart.h"
    #include "app_error.h"
    #include "nrf_delay.h"
    #include "nrf.h"
    #include "bsp.h"
    #if defined (UART_PRESENT)
    #include "nrf_uart.h"
    #endif
    #if defined (UARTE_PRESENT)
    #include "nrf_uarte.h"
    #endif


    //#define ENABLE_LOOPBACK_TEST /**< if defined, then this example will be a loopback test, which means that TX should be connected to RX to get data loopback. */

    #define MAX_TEST_DATA_BYTES (15U) /**< max number of test bytes to be used for tx and rx. */
    #define UART_TX_BUF_SIZE 256 /**< UART TX buffer size. */
    #define UART_RX_BUF_SIZE 256 /**< UART RX buffer size. */

    void uart_error_handle(app_uart_evt_t * p_event)
    {
    if (p_event->evt_type == APP_UART_COMMUNICATION_ERROR)
    {
    APP_ERROR_HANDLER(p_event->data.error_communication);
    }
    else if (p_event->evt_type == APP_UART_FIFO_ERROR)
    {
    APP_ERROR_HANDLER(p_event->data.error_code);

    }
    }


    #ifdef ENABLE_LOOPBACK_TEST
    /* Use flow control in loopback test. */
    #define UART_HWFC APP_UART_FLOW_CONTROL_ENABLED

    /** @brief Function for setting the @ref ERROR_PIN high, and then enter an infinite loop.
    */
    static void show_error(void)

    {

    bsp_board_leds_on();
    while (true)
    {
    // Do nothing.

    }
    }


    /** @brief Function for testing UART loop back.
    * @details Transmitts one character at a time to check if the data received from the loopback is same as the transmitted data.
    * @note @ref TX_PIN_NUMBER must be connected to @ref RX_PIN_NUMBER)
    */
    static void uart_loopback_test()
    {
    uint8_t * tx_data = (uint8_t *)("\r\nLOOPBACK_TEST\r\n");
    uint8_t rx_data;

    // Start sending one byte and see if you get the same
    for (uint32_t i = 0; i < MAX_TEST_DATA_BYTES; i++)
    {
    uint32_t err_code;
    while (app_uart_put(tx_data[i]) != NRF_SUCCESS);

    nrf_delay_ms(10);
    err_code = app_uart_get(&rx_data);

    if ((rx_data != tx_data[i]) || (err_code != NRF_SUCCESS))
    {
    show_error();
    }
    }
    return;
    }
    #else
    /* When UART is used for communication with the host do not use flow control.*/
    #define UART_HWFC APP_UART_FLOW_CONTROL_DISABLED
    #endif


    /**
    * @brief Function for main application entry.
    */
    int main(void)
    {
    uint32_t err_code;

    bsp_board_init(BSP_INIT_LEDS);

    const app_uart_comm_params_t comm_params =
    {
    RX_PIN_NUMBER,
    TX_PIN_NUMBER,
    RTS_PIN_NUMBER,
    CTS_PIN_NUMBER,
    UART_HWFC,
    false,
    #if defined (UART_PRESENT)
    NRF_UART_BAUDRATE_9600
    #else
    NRF_UARTE_BAUDRATE_9600
    #endif

    };

    APP_UART_FIFO_INIT(&comm_params,
    UART_RX_BUF_SIZE,
    UART_TX_BUF_SIZE,
    uart_error_handle,
    APP_IRQ_PRIORITY_LOWEST,
    err_code);

    APP_ERROR_CHECK(err_code);

    #ifndef ENABLE_LOOPBACK_TEST
    printf("\r\nUART example started.\r\n");

    while (true)
    {
    //char a[100];

    uint8_t cr;

    //uint8_t i;
    //double cr;
    //while (app_uart_get(&cr) != NRF_SUCCESS);
    //while (app_uart_put(cr) != NRF_SUCCESS);

    //if (cr == 't' || cr == 'Q')
    //{
    // printf(" \r\nExit!\r\n");

    // while (true)
    // {
    // bsp_board_leds_on();

    // }
    //}

    if(app_uart_get(&cr) != NRF_SUCCESS)
    {

    printf(cr,'\r\n');
    nrf_delay_ms(500);

    }
    //else
    //{
    // //printf("i degeri : %d", i);
    // printf(cr);
    // nrf_delay_ms(500);
    //}
    }
    #else

    // This part of the example is just for testing the loopback .
    while (true)
    {
    uart_loopback_test();
    }
    #endif

    }

  • Hi,

    Where in the code that you've shared do you use the driver to configure the GPS?

    regards

    Jared

  • When the code added the line "flow_control = APP_UART_FLOW_CONTROL_DISABLED" and changed the location of the pins on the board, the data came in this way, but upload different codes and the same data is coming. How can I control the future and how can I filter it?

Related