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

how to create with multiple serial port with log_init in nRf52832 chipset

Hi Team,

i have trying to create multiple serial port with debug log enabled in the sdk code sample but when i am going to init log_init a long with any UART / SERIAL  initialization  i was going to fatel error.

i required debug port along with multiple serial ports init and working can you give sample code.

if also without log_int and i enable 2 serial initialization it was getting error below.

Building ‘serial_pca10040’ from solution ‘serial_pca10040’ in configuration ‘Release’
4> Compiling ‘main.c’
4> In file included from ../../../../../../modules/nrfx/nrfx.h:45,
4> from ../../../../../../modules/nrfx/drivers/include/nrfx_clock.h:44,
4> from ../../../../../../integration/nrfx/legacy/nrf_drv_clock.h:43,
4> from C:\Users\kothalankav\Downloads\completenRFSDK\nRF5SDK16\examples\peripheral\serial\main.c:45:
4> ../../../../../../modules/nrfx/drivers/include/nrfx_uarte.h:86:35: error: 'NRF_UARTE1' undeclared here (not in a function); did you mean 'NRF_UARTE0'?
4> ../../../../../../modules/nrfx/drivers/nrfx_common.h:92:37: note: in definition of macro 'NRFX_CONCAT_2_'
4> ../../../../../../modules/nrfx/drivers/include/nrfx_uarte.h:86:21: note: in expansion of macro 'NRFX_CONCAT_2'
4> ../../../../../../integration/nrfx/legacy/nrf_drv_uart.h:56:18: note: in expansion of macro 'NRFX_UARTE_INSTANCE'
4> ../../../../../../integration/nrfx/legacy/nrf_drv_uart.h:171:5: note: in expansion of macro 'NRF_DRV_UART_CREATE_UARTE'
4> ../../../../../../components/libraries/serial/nrf_serial.h:275:21: note: in expansion of macro 'NRF_DRV_UART_INSTANCE'
4> C:\Users\kothalankav\Downloads\completenRFSDK\nRF5SDK16\examples\peripheral\serial\main.c:124:1: note: in expansion of macro 'NRF_SERIAL_UART_DEF'
4> ../../../../../../modules/nrfx/drivers/include/nrfx_uarte.h:87:35: error: 'NRFX_UARTE1_INST_IDX' undeclared here (not in a function); did you mean 'NRFX_UARTE0_INST_IDX'?
4> ../../../../../../modules/nrfx/drivers/nrfx_common.h:113:37: note: in definition of macro 'NRFX_CONCAT_3_'
4> ../../../../../../modules/nrfx/drivers/include/nrfx_uarte.h:87:21: note: in expansion of macro 'NRFX_CONCAT_3'
4> ../../../../../../integration/nrfx/legacy/nrf_drv_uart.h:56:18: note: in expansion of macro 'NRFX_UARTE_INSTANCE'
4> ../../../../../../integration/nrfx/legacy/nrf_drv_uart.h:171:5: note: in expansion of macro 'NRF_DRV_UART_CREATE_UARTE'
4> ../../../../../../components/libraries/serial/nrf_serial.h:275:21: note: in expansion of macro 'NRF_DRV_UART_INSTANCE'
4> C:\Users\kothalankav\Downloads\completenRFSDK\nRF5SDK16\examples\peripheral\serial\main.c:124:1: note: in expansion of macro 'NRF_SERIAL_UART_DEF'
Build failed

the code was written like 

/**
* Copyright (c) 2016 - 2019, Nordic Semiconductor ASA
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form, except as embedded into a Nordic
* Semiconductor ASA integrated circuit in a product or a software update for
* such product, must reproduce the above copyright notice, this list of
* conditions and the following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* 4. This software, with or without modification, must only be used with a
* Nordic Semiconductor ASA integrated circuit.
*
* 5. Any software provided in binary form under this license must not be reverse
* engineered, decompiled, modified and/or disassembled.
*
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>

#include "nrf.h"
#include "nrf_drv_clock.h"
#include "nrf_gpio.h"
#include "nrf_delay.h"
#include "nrf_log.h"
#include "nrf_log_ctrl.h"
#include "nrf_drv_power.h"
#include "nrf_serial.h"
#include "app_timer.h"


#include "app_error.h"
#include "app_util.h"
#include "boards.h"

/** @file
* @defgroup nrf_serial_example main.c
* @{
* @ingroup nrf_serial_example
* @brief Example of @ref nrf_serial usage. Simple loopback.
*
*/

#define OP_QUEUES_SIZE 3
#define APP_TIMER_PRESCALER NRF_SERIAL_APP_TIMER_PRESCALER

static void sleep_handler(void)
{
__WFE();
__SEV();
__WFE();
}
/***********************************************************************/
NRF_SERIAL_DRV_UART_CONFIG_DEF(m_uart0_drv_config,
RX_PIN_NUMBER, TX_PIN_NUMBER,
RTS_PIN_NUMBER, CTS_PIN_NUMBER,
NRF_UART_HWFC_ENABLED, NRF_UART_PARITY_EXCLUDED,
NRF_UART_BAUDRATE_115200,
UART_DEFAULT_CONFIG_IRQ_PRIORITY);

#define SERIAL_FIFO_TX_SIZE 32
#define SERIAL_FIFO_RX_SIZE 32

NRF_SERIAL_QUEUES_DEF(serial_queues, SERIAL_FIFO_TX_SIZE, SERIAL_FIFO_RX_SIZE);


#define SERIAL_BUFF_TX_SIZE 1
#define SERIAL_BUFF_RX_SIZE 1

NRF_SERIAL_BUFFERS_DEF(serial_buffs, SERIAL_BUFF_TX_SIZE, SERIAL_BUFF_RX_SIZE);

NRF_SERIAL_CONFIG_DEF(serial_config, NRF_SERIAL_MODE_IRQ,
&serial_queues, &serial_buffs, NULL, sleep_handler);


NRF_SERIAL_UART_DEF(serial_uart, 0);
/***********************************************************************/
NRF_SERIAL_DRV_UART_CONFIG_DEF(m_uart1_drv_config,
SER_CON_RX_PIN,SER_CON_TX_PIN,
SER_CON_CTS_PIN,SER_CON_RTS_PIN,
NRF_UART_HWFC_ENABLED, NRF_UART_PARITY_EXCLUDED,
NRF_UART_BAUDRATE_115200,
UART_DEFAULT_CONFIG_IRQ_PRIORITY);

#define SERIAL_FIFO_TX_SIZE 32
#define SERIAL_FIFO_RX_SIZE 32

NRF_SERIAL_QUEUES_DEF(serial1_queues, SERIAL_FIFO_TX_SIZE, SERIAL_FIFO_RX_SIZE);


#define SERIAL_BUFF_TX_SIZE 1
#define SERIAL_BUFF_RX_SIZE 1

NRF_SERIAL_BUFFERS_DEF(serial1_buffs, SERIAL_BUFF_TX_SIZE, SERIAL_BUFF_RX_SIZE);

NRF_SERIAL_CONFIG_DEF(serial1_config, NRF_SERIAL_MODE_IRQ,
&serial1_queues, &serial1_buffs, NULL, sleep_handler);

NRF_SERIAL_UART_DEF(serial_uart1, 1);


int main(void)
{
ret_code_t ret;

ret = nrf_drv_clock_init();
APP_ERROR_CHECK(ret);
ret = nrf_drv_power_init(NULL);
APP_ERROR_CHECK(ret);

nrf_drv_clock_lfclk_request(NULL);
ret = app_timer_init();
APP_ERROR_CHECK(ret);

// Initialize LEDs and buttons.
bsp_board_init(BSP_INIT_LEDS | BSP_INIT_BUTTONS);

ret = nrf_serial_init(&serial_uart, &m_uart0_drv_config, &serial_config);
APP_ERROR_CHECK(ret);

ret = nrf_serial_init(&serial_uart1, &m_uart1_drv_config, &serial1_config);
APP_ERROR_CHECK(ret);
static char tx_message[] = "Hello nrf_serial!\n\r";

ret = nrf_serial_write(&serial_uart,
tx_message,
strlen(tx_message),
NULL,
NRF_SERIAL_MAX_TIMEOUT);
APP_ERROR_CHECK(ret);

ret = nrf_serial_write(&serial_uart1,
tx_message,
strlen(tx_message),
NULL,
NRF_SERIAL_MAX_TIMEOUT);
APP_ERROR_CHECK(ret);


while (true)
{
char c;
ret = nrf_serial_read(&serial_uart0, &c, sizeof(c), NULL, 1000);
if (ret != NRF_SUCCESS)
{
continue;
}
(void)nrf_serial_write(&serial_uart0, &c, sizeof(c), NULL, 0);
(void)nrf_serial_flush(&serial_uart0, 0);

}
}

/** @} */

Parents
  • Hi 

    The nRF52832 only has a single UART module, so if you try to initialize two different UART's you will get an error. 

    In order to get two physical UART's you would need to get one of the larger nRF52 devices, such as the nRF52840. 

    If you are limited to a device with only one UART have you considered using RTT for logging rather than UART?
    RTT logging uses the debugger for logging, and frees up one UART for other things. 

    When using the DK this is seamless since there is a Segger debug chip on board that connects to the nRF52 device over the SWD interface. 

    When debugging your own hardware you need to have a Segger debugger connected in order to have RTT logging working. 

    Best regards
    Torbjørn

  • Hi Tobjorn

    In the above code i was not adding log_init function for debug and trying to build two serial communications but still it was problem 

    please suggest how i can make two serial port communications one for on USB and one for with Uart module.

  • Hi 

    Which USB are you referring to?

    The nRF52832 does not have a USB peripheral, but perhaps you mean the USB set up by the nRRF52DK?

    If you get the nRF52840 or the nRF52833 then you have a USB interface on chip, and you will be able to set up both a virtual comport interface over USB, as well as a physical UART interface using the UARTE peripheral.

    Best regards
    Torbjørn 

Reply Children
No Data
Related