본문 바로가기

Programing/ Nordic(BLE)

ble_app_uart nrf51822와 usb serial로 통신할 때

예제 소스를 실행하면 pc에서 데이터를 전송할때 데이터 마지막에 \n 문자가 들어가서나 20바이트 이상 보내야지만 휴대폰에 출력된다.

1바이트씩 통신하기 위해서는 아래와 같이 수정하면 된다.

main.c를 열어보면 

void uart_event_handle(app_uart_evt_t * p_event) 함수가 존재한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
case 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, data_array, index);
                if (err_code != NRF_ERROR_INVALID_STATE)
                {
                    APP_ERROR_CHECK(err_code);
                }
                
                index = 0;
            }
            break;
cs

위 부분을 아래 처럼 변경하면 1 바이트씩 통신되는것을 확인할수 있다.

1
2
3
4
5
6
7
8
9
10
case APP_UART_DATA_READY:
            UNUSED_VARIABLE(app_uart_get(&data_array[0]));
 
                        err_code = ble_nus_string_send(&m_nus, data_array, 1);
                        if (err_code != NRF_ERROR_INVALID_STATE)
                        {
                                APP_ERROR_CHECK(err_code);
                        }
 
            break;
cs

하지만 이렇게 바꾸면 8 바이트 이상 한번에 전송하면 블루투스 연결이 끊어지는 문제점이 발생한다.

왜 이런 현상이 발생하는지는 확인하지 못했지만 나중에라고 말게되면 글을 수정하겠다.