nRF52832 개발일지 (1)

치삼이·2021년 6월 26일
1

nRF52832 개발일지

목록 보기
2/8
post-thumbnail

👨‍💻 개발일지 (1) : UART 예제를 통한 SDK 분석 -1-

1. Nordic SDK UART 예제 선작업

1.1 Custom Board schematic 확인

PCA10040, PCA10056, PCA10100 등 같은 Nordic에서 제공하는 DK(Development kit)를 이용하시는 분들은 예제를 바로 이용하여 개발을 하면 됩니다. 그러나 저처럼 Custom Borad를 이용하시는 분들은 Custom borad를 정의해주시고 사용하셔야 합니다.

이번에 소개할 Custom Board는 Decawave서에서 제작한 DWM1001입니다. DWM1001는 UWB 칩셋인 DW1000을 제어하기위해 Host MCU와 DW1000으로 구성되어 있는 모듈입니다. DWM1001에 여러 IC 소자, LED, 칩을 붙여 프로그래밍 및 제어가 가능한 Borad가 지금 부터 사용하게 될 DWM1001 DEVELOPMENT BOARD(DWM1001-DEV) 입니다.

001

Custom Board를 정의를 위해 📂 $(SDK PATH)\nRF5_SDK_17.0.2_d674dde\components\boards 디렉토리에서 pca10040.h를 열어보겠습니다.

...

#define LED_START      17
#define LED_1          17
#define LED_2          18
#define LED_3          19
#define LED_4          20
#define LED_STOP       20

...

#define BSP_LED_0      LED_1
#define BSP_LED_1      LED_2
#define BSP_LED_2      LED_3
#define BSP_LED_3      LED_4

#define BUTTONS_NUMBER 4

#define BUTTON_START   13
#define BUTTON_1       13
#define BUTTON_2       14
#define BUTTON_3       15
#define BUTTON_4       16

...

#define RX_PIN_NUMBER  8
#define TX_PIN_NUMBER  6
#define CTS_PIN_NUMBER 7
#define RTS_PIN_NUMBER 5
#define HWFC           true

#define SPIS_MISO_PIN   28  // SPI MISO signal.
#define SPIS_CSN_PIN    12  // SPI CSN signal.
#define SPIS_MOSI_PIN   25  // SPI MOSI signal.
#define SPIS_SCK_PIN    29  // SPI SCK signal.

...

boards 디렉토리에 있는 내용은 LED, Button 등과 같은 H/W 구성요소와 GPIO의 맵핑에 대한 내용입니다. 이제 DWM1001-DEV 에 관한 dwm1001.h를 작성하기위해 DWM1001와 DWM1001-DWM1001의 Schmetic을 확인해보겠습니다.

🔗 DWM1001
🔗 DWM1001-DEV

002

003

DWM1001 모듈 Core는 nRF52832이며, UART는 J1.20 이 GPIO Port P0.05 와 J1.18은 GPIO Port P0.11 맵핑 되어 있습니다. 그리고 J1.20 , J1.18 은 각각 DWM1001-DEV의 Debug를 위해 UART_TX, UART_RX로 사용됩니다.

📌특이한 점은 nRF52832는 STM32 등 에서 사용하는 Alternative Function과 같은 핀에 미리 지정된 기능이 있지 않습니다. UART를 이용하기 위해서는 사용할 GPIO 핀을 선택만 하면 됩니다.
Nordic DevZone > Nordic Q&A > nrf52 UART pins

1.2 Custom Board 정의 파일 만들기

Schematic을 기반으로 DWM1001-DEV 정의 파일인 dwm1001.h을 작성하겠습니다. 현재는 UART예제를 위해 TX 와 RX 만을 정의합니다. (RTS/CTS 핀은 사용하지 않습니다.)

#ifndef DWM1001_H
#define DWM1001_H

#ifdef __cplusplus
extern "C" {
#endif

#include "nrf_gpio.h"

// DEBUG Serial Port GPIO Setting
#define UART_RX     11
#define UART_TX     5

#ifdef __cplusplus
}
#endif

#endif // DWM1001_H

boards 디렉토리에 있는 boards.h 파일은 Preprocessor Definitions 목록에서 board 정보를 읽어 알맞은 헤더파일을 include 해줍니다. boards.h를 열어 86 ~ 88번 라인을 다음과 같이 수정한 뒤, Preprocessor Definitions DWM1001 을 목록에 추가하면 dwm1001.h 을 사용할 수 있습니다.

#elif defined(BOARD_CUSTOM)
  #include "custom_board.h"
#elif defined(DWM1001)
  #include "dwm1001.h"
#else

2. Serial Termianl 이용하기 🖥️

UART Example을 이용하기 전 터미널 프로그램을 다운받겠습니다. 대표적인 터미널 프로그램은 Putty, Xshell, TeraTerm 등이 있으며, 개인의 취향이니 원하시는 프로그램을 이용하시면 됩니다. 저는 NetSarang의 XShell 7을 다운로드하여 사용하겠습니다.

005

Xshell 7은 가정 및 학교에서 비상업 목적으로 무료 사용 가능합니다.

🔗 Xshell 7 Downloads

다운로드 및 설치가 끝났으면 nRF52832 보드 와 터미널을 연결합니다.

007

3. UART Example

uart 예제는 키보드 입력을 받으면 입력받은 내용을 바로 출력하는 Echo Program 입니다(q 제외). 여기서 q를 누르게 되면 프로그램이 무한 루프로 들어가 멈추게 됩니다.

📂 $(SDK PATH)\nRF5_SDK_17.0.2_d674dde\examples\peripheral\uart 을 복사해 uart_test 로 디렉토리 이름을 바꾸겠습니다. uart_test 디렉토리 안에 여러 Nordic DK 중 uart_test > pca10040 > blank > sesuart_pca10040.emProject 를 클릭하여 프로젝트를 실행합니다.

프로젝트의 Alt + Enter 를 눌러 옵션 패널에 들어간 뒤, Preprocessor의 Preprocessor Definitions BOARD_PCA10040을 DWM1001로 변경합니다.

004

다음은 main.c 파일을 열어 const app_uart_comm_params_t comm_params 구조체의 내용을 변경합니다. app_uart_comm_params_t 은 UART 의 기본적인 파라미터를 셋팅하기 위한 구조체입니다.

 const app_uart_comm_params_t comm_params =
      {
          UART_RX,
          UART_TX,
          0,
          0,
          UART_HWFC,
          false,
#if defined (UART_PRESENT)
          NRF_UART_BAUDRATE_115200
#else
          NRF_UARTE_BAUDRATE_115200
#endif
      };

내용이 수정되었으면 Ctrl + T, F5 를 눌러 Debug를 시작합니다.

007

터미널에 출력되는 모습을 확인 할 수 있습니다.

0개의 댓글