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

UART and NRF_LOG simultaneously

I am using nrf52832 development kit and sdk version 14.2.0 and soft device 5.0.

#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
#include "nrf.h"
#include "nrf_delay.h"
#include "bsp.h"
#include "nrf_calendar.h"
#include "boards.h"
#include "app_uart.h"
#include "app_error.h"
#include "app_mpu.h"

#include "nrf_log.h"
#include "nrf_log_ctrl.h"
#include "nrf_log_default_backends.h"


/**@brief Function for initializing the nrf log module.
 */
static bool run_time_updates = false;


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);
    }
}


void uart_init()
{
    uint32_t err_code;
    const app_uart_comm_params_t comm_params =
      {
          RX_PIN_NUMBER,
          TX_PIN_NUMBER,
          RTS_PIN_NUMBER,
          CTS_PIN_NUMBER,
          APP_UART_FLOW_CONTROL_DISABLED,
          false,
          UART_BAUDRATE_BAUDRATE_Baud115200
      };

    APP_UART_FIFO_INIT(&comm_params,
                         256,
                         256,
                         uart_error_handle,
                         APP_IRQ_PRIORITY_LOWEST,
                         err_code);
    APP_ERROR_CHECK(err_code);
}


int uart_get_parameter(char *query_message, int min_value, int max_value)
{
    uint8_t tmp_char, digit_index;
    int current_value;
    while(1)
    {
        current_value = 0;
        digit_index = 0;
        printf("%s: ", query_message);
        while(1)
        {
            while(app_uart_get(&tmp_char) != NRF_SUCCESS);
            if(tmp_char >= '0' && tmp_char <= '9' && digit_index < 9)
            {
                current_value = current_value * 10 + (tmp_char - '0');
                app_uart_put(tmp_char);
                digit_index++;
            }
            else if(tmp_char == 8 && digit_index > 0)
            {
                current_value /= 10;
                digit_index--;
                printf("\b \b");
            }
            else if(tmp_char == 13)
            {
                break;
            }
        }
        if(current_value >= min_value && current_value <= max_value) break;
        else
        {
            printf("\r\nInvalid value! \r\n");
            printf("Legal range is %i - %i\r\n", min_value, max_value);            
        }
    }
    printf("\r\n");
    return current_value;
}


void print_current_time()
{
    NRF_LOG_INFO("Uncalibrated time:\t%s\r\n", nrf_cal_get_time_string(false));
    NRF_LOG_INFO("Calibrated time:\t%s\r\n", nrf_cal_get_time_string(true));
}


void calendar_updated()
{
    if(run_time_updates)
    {
        print_current_time();
    }
}

static void log_init(void)
{
    ret_code_t err_code = NRF_LOG_INIT(NULL);
    APP_ERROR_CHECK(err_code);

    NRF_LOG_DEFAULT_BACKENDS_INIT();
}


void mpu_init(void)
{
    ret_code_t ret_code;
    // Initiate MPU driver
    ret_code = app_mpu_init();
    APP_ERROR_CHECK(ret_code); // Check for errors in return value
    
    // Setup and configure the MPU with intial values
    app_mpu_config_t p_mpu_config = MPU_DEFAULT_CONFIG(); // Load default values
    p_mpu_config.smplrt_div = 19;   // Change sampelrate. Sample Rate = Gyroscope Output Rate / (1 + SMPLRT_DIV). 19 gives a sample rate of 50Hz
    p_mpu_config.accel_config.afs_sel = AFS_2G; // Set accelerometer full scale range to 2G
    ret_code = app_mpu_config(&p_mpu_config); // Configure the MPU with above values
    APP_ERROR_CHECK(ret_code); // Check for errors in return value 
}

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

  log_init();
	NRF_LOG_INFO("\033[2J\033[;H"); // Clear screen
    
    mpu_init();
    
    // Start execution.
   NRF_LOG_INFO("MPU Free Fall Interrupt example.");
	  NRF_CLOCK->EVENTS_HFCLKSTARTED = 0;
    NRF_CLOCK->TASKS_HFCLKSTART = 1;
    while(NRF_CLOCK->EVENTS_HFCLKSTARTED == 0);
		
    nrf_cal_init();
	
	
    nrf_cal_set_callback(calendar_updated, 1);

 
    accel_values_t acc_values;
    uint32_t sample_number = 0;
		
		
 
    while(1)
    {
			if(NRF_LOG_PROCESS() == false)
        {  
					NRF_LOG_INFO("MPU Free Fall Interrupt example.");
					// Read accelerometer sensor values
            err_code = app_mpu_read_accel(&acc_values);
            APP_ERROR_CHECK(err_code);
            // Clear terminal and print values
           NRF_LOG_INFO("\033[3;1HSample # %d\r\nX: %06d\r\nY: %06d\r\nZ: %06d", ++sample_number, acc_values.x, acc_values.y, acc_values.z);
				   print_current_time();
         nrf_delay_ms(10);
        }
			}
    
}

/** @} */

I am using nrf_calendar.h with mpu9250. I have uploaded my code,and I have used all necessary libraries.my code is compiled with no error,but when I try to observe the output on putty it is not as expected and It is blank.

I have debug my code when I remove uart_init(),its working and it gives output of mpu data and time on putty.

but problem is I want to use uart service to get the character from user.

Parents Reply Children
No Data
Related