본문 바로가기

Programing/ Nordic(BLE)

UART 양방향 통신이 되지 않을 때 ble_app_uart_s130_pca10028(nRF51822 PCA10028) 예제를 실행하고 PC에서 시리얼통신을 연결하면PC(테스트 보드) -> 스마트폰 전송은 되지만 스마트폰 -> PC(테스트 보드) 전송은 되지 않는다.정확히는 스마트폰과 nRF51 칩과는 통신이 되는데 nRF51 칩과 USB to Serial 칩과의 통신이 되지 않는것이다.이를 해결하기 Main.c에서 아래 부분을 찾아12345678910111213141516171819202122static void uart_init(void){ uint32_t err_code; const app_uart_comm_params_t comm_params = { RX_PIN_NUMBER, TX_PIN_NUMBER, RTS_PIN_NUMBER, C..
nrf51 시리즈 개발환경 구축 nrf51 시리즈 개발환경 구축에 관한 글은 많은데 포스팅 일자도 오래되기도 해서 다시 정리해서 보스팅합니다. 글에 앞서 제가 사용하는 보드는 PCA10028, PCA10031 테스트 보드와 NRF51822 Eval Kit + J-Link BASE를 사용합니다. 1. 먼저 keill을 다운 받아야합니다. 무료 버전과 유료 버전이 있는데 컴파일 파일 사이즈 말고는 차이점을 모르겠습니다.기간 제한이 있는지는 확인하지 못했습니다.저도 무료 버전을 사용하는데 아직까지는 아무 문제 없었습니다.https://www.keil.com/download/product/우리는 MDK-ARM을 다운 받으면 됩니다.들어가면 이름, 이메일, 주소등 여러가지 정보를 입력하라고 하는데 입력하면 메일로 다운로드 링크를 보내줍니다. 이..
LED 인티케이터 동작시 다른 LED가 꺼지는 현상 제목 그대로 BLE Advertising 중에 LED 1번에 깜밖이는데문제는 LED 1번이 켜질때는 문제 없지만 꺼질때는 다른 LED들도 같이 꺼지는 것을 확인했습니다.이를 수정하기 위해서는 Board Support의 bsp.c 파일을 열어static uint32_t bsp_led_indication(bsp_indication_t indicate) 함수를 찾습니다.1234567891011121314151617181920212223242526272829303132333435static uint32_t bsp_led_indication(bsp_indication_t indicate){ uint32_t err_code = NRF_SUCCESS; uint32_t next_delay = 0; switch (ind..
ble_app_uart nrf51822와 usb serial로 통신할 때 예제 소스를 실행하면 pc에서 데이터를 전송할때 데이터 마지막에 \n 문자가 들어가서나 20바이트 이상 보내야지만 휴대폰에 출력된다.1바이트씩 통신하기 위해서는 아래와 같이 수정하면 된다.main.c를 열어보면 void uart_event_handle(app_uart_evt_t * p_event) 함수가 존재한다.123456789101112131415case APP_UART_DATA_READY: UNUSED_VARIABLE(app_uart_get(&data_array[index])); index++; if ((data_array[index - 1] == '\n') || (index >= (BLE_NUS_MAX_DATA_LEN))) { err_code = ble_nus_string_send(&m_nus, ..
ble_app_uart 인디케이터 LED 설정 변경 bsp.c를 열어보면12#define ADVERTISING_LED_ON_INTERVAL 200#define ADVERTISING_LED_OFF_INTERVAL 1800cs블루투스 방송중일때 LED1번이 깜밖이는 속도 조절 하는 부분입니다. 저는 아래와 같이 수정하였습니다.12#define ADVERTISING_LED_ON_INTERVAL 200#define ADVERTISING_LED_OFF_INTERVAL 200cs 또 연결이 완료된 후 LED1이 켜져 있는것을 끄기 위해static uint32_t bsp_led_indication(bsp_indication_t indicate) 함수의 아래 부분을123456case BSP_INDICATE_CONNECTED: LEDS_OFF(LEDS_MASK & ~BS..
시중에 판매중인 모듈 사용하기 시중에 판매중인 nrf51822 모듈을 보면 2개의 크리스탈이 달려있습니다.위 사진처럼 첫번째 모듈은 2개가 달려있는데 2번째와 4번째 모듈은 크리스탈이 하나만 달려있습니다. 크리스탈이 하나이거나 크리스탈 값이 다르면 기본 예제 프로그램이 LED나 버튼 등은 동작하는데 BLE는 동작하지 않을것입니다.이부분은 아래 처럼 수정하면 해결 가능합니다.기본 예제인 ble_app_uart의 한 부분입니다.123456789101112131415161718192021222324/**@brief Function for the S110 SoftDevice initialization. * * @details This function initializes the S110 SoftDevice and the BLE event i..
외부 인터럽트 & 타이머 인터럽트를 이용한 롱버튼 구현 timer 예제 이용해서 수정하였습니다.버튼을 3초이상 누르면 불이켜지고 다시 3초 이상 누르면 불이 꺼집니다.12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091#include #include #include "nrf.h"#include "bsp.h" #include "nrf_drv_timer.h"#include "bsp.h"#include "app_error.h" #define LED 22#define BUTTON 16 const nrf_drv_t..
pin change interrupt 123456789101112131415161718192021222324252627282930313233343536373839404142#include "nrf.h"#include "boards.h" #define LED 22#define BUTTON 16 void GPIOTE_IRQHandler(void){ // Event causing the interrupt must be cleared. if ((NRF_GPIOTE->EVENTS_IN[0] == 1) && (NRF_GPIOTE->INTENSET & GPIOTE_INTENSET_IN0_Msk)) { NRF_GPIOTE->EVENTS_IN[0] = 0; nrf_gpio_pin_toggle(LED); }} static void gpio_init(void)..