Hi All
I am working on nrf52832 but not using the SDK. how ever I had created the uart functionality on my nrf but many times I got the communication error.
I had taken the references from the uart example provided in the sdk and using APP uart example I created this uart setup.
I am trying to communicate nrf with esp over uart.
But I am failed in sending and receiving data.
Can I get some help in that.
/* * Copyright (c) 2017, CoolR Group Inc * All Rights Reserved. * * File: uart.c * * Description: APIs for accessing SoC uart * * Author: VAIBHAV * */ #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include <ctype.h> #include <string.h> #include <stdlib.h> #include "uart.h" #include "config.h" #include "nrf_gpio.h" #include "app_util_platform.h" #include "coolerBoard.h" #include "debug.h" #include "nrf_delay.h" #include "app_uart.h" #include "esp.h" #define UART_TX_BUF_SIZE 256 /**< UART TX buffer size. */ #define UART_RX_BUF_SIZE 256 /**< UART RX buffer size. */ #define UART_INST 0 //nrf_drv_uart_t uart_nrf = NRF_DRV_UART_INSTANCE(UART_INST); /***********************************************************//** * Initialization of the uart peripheral. * @param uart_config_t uartConfig * Configuration structure for initialising uart * @return error code **************************************************************/ void uart_event_handle(app_uart_evt_t * p_event) { static uint8_t data_array[40]; static uint8_t index = 0; uint32_t err_code; switch (p_event->evt_type) { case APP_UART_DATA_READY: UNUSED_VARIABLE(app_uart_get(&data_array[index])); index++; if(data_array[index -1] == 0x0A && data_array[index -2] == 0x0D) { esp_parse_data(data_array,index); index = 0; } break; case APP_UART_COMMUNICATION_ERROR: print(LL_PRINT,"COMMUNICATION ERROR\r\n"); break; case APP_UART_FIFO_ERROR: print(LL_PRINT,"FIFO ERROR\r\n"); break; default: break; } } ret_code_t uartInit(uart_config_t uartConfig, nrf_uart_event_handler_t uart_event_handler) { /* ret_code_t ret = NRF_SUCCESS; const nrf_drv_uart_config_t config = { .pseltxd = uartConfig.tx_pin, .pselrxd = uartConfig.rx_pin, .baudrate = (nrf_uart_baudrate_t)uartConfig.baudrate, .interrupt_priority = uartConfig.intr_priotity, .hwfc = uartConfig.hwfc, .parity = uartConfig.parity, .p_context = NULL, }; ret = nrf_drv_uart_init( &uart_nrf, &config, uart_event_handler ); return ret; */ uint32_t err_code; app_uart_comm_params_t const comm_params = { .rx_pin_no = uartConfig.rx_pin, .tx_pin_no = uartConfig.tx_pin, .flow_control = APP_UART_FLOW_CONTROL_DISABLED, .use_parity = false, .baud_rate = (nrf_uart_baudrate_t)uartConfig.baudrate, }; APP_UART_FIFO_INIT(&comm_params,UART_RX_BUF_SIZE,UART_TX_BUF_SIZE,uart_event_handle,APP_IRQ_PRIORITY_HIGHEST,err_code); return err_code; } ret_code_t uartUnInit() { ret_code_t ret = NRF_SUCCESS; // nrf_drv_uart_uninit(&uart_nrf); return ret; } /***********************************************************//** * uart Receive * @param p_data - Pointer to the data * @param length - Number of bytes to Receive * * @return error code **************************************************************/ ret_code_t uartReceive(uint8_t * p_data,uint8_t length) { ret_code_t ret = NRF_SUCCESS; /* ret = nrf_drv_uart_rx(&uart_nrf, p_data, length); if(ret != NRF_SUCCESS) { print(LL_ERROR,"UART RECEIVE ERROR\r\n"); } else { } */ return ret; } /***********************************************************//** * uart Transmit * @param p_data - Pointer to the data * @param length - Number of bytes to Send * * @return error code **************************************************************/ ret_code_t uartTransmit(uint8_t const * const p_data,uint32_t length) { ret_code_t ret = NRF_SUCCESS; uint8_t data[200]; if(p_data == NULL) { ret = NRF_ERROR_INVALID_PARAM; return ret; } if(length != 0) memcpy(&data[0], &p_data[0], length); for (uint32_t i = 0; i < length;i++) { //print(LL_PRINT, "%X ", data[i]); ret = app_uart_put(data[i]); if(ret != NRF_SUCCESS) { print(LL_PRINT,"UART DATA SENDING FAILED\r\n"); } } return ret; }
Please review and let me know the issue.