1. 程式人生 > >藍芽BLE---DA14683的UART操作

藍芽BLE---DA14683的UART操作

DA14683的串列埠操作

Date: 2018.11.21

Create: Jim

 

首先我們匯入Demo工程freertos_retargetscript

 

要登出的程式碼

串列埠列印的巨集定義登出:

Main函式裡面的prvTemplateTask任務中的以下部分登出:

新增串列埠驅動

在main函式中加入以下串列埠驅動的定義和子函式:

程式碼如下:

#define USER_UART_TX_PORT    HW_GPIO_PORT_1

#define USER_UART_TX_PIN     HW_GPIO_PIN_3

#define USER_UART_RX_PORT    HW_GPIO_PORT_2

#define USER_UART_RX_PIN     HW_GPIO_PIN_3

#define USER_CONFIG_RETARGET_UART             HW_UART2

#define USER_CONFIG_RETARGET_UART_BAUDRATE    HW_UART_BAUDRATE_115200

#define USER_CONFIG_RETARGET_UART_DATABITS    HW_UART_DATABITS_8

#define USER_CONFIG_RETARGET_UART_STOPBITS    HW_UART_STOPBITS_1

#define USER_CONFIG_RETARGET_UART_PARITY      HW_UART_PARITY_NONE

//#define USER_RETARGET_UART_IS_CONFIGURED_FLAG        (0x55)

void user_uart_init(void)

{

        uart_config uart_init = {

                .baud_rate = USER_CONFIG_RETARGET_UART_BAUDRATE,

                .data      = USER_CONFIG_RETARGET_UART_DATABITS,

                .stop      = USER_CONFIG_RETARGET_UART_STOPBITS,

                .parity    = USER_CONFIG_RETARGET_UART_PARITY,

                .use_dma   = 0,

                .use_fifo  = 0,

                .rx_dma_channel = HW_DMA_CHANNEL_0,

                .tx_dma_channel = HW_DMA_CHANNEL_1,

        };

        hw_gpio_set_pin_function(USER_UART_TX_PORT, USER_UART_TX_PIN, \

                HW_GPIO_MODE_OUTPUT,HW_GPIO_FUNC_UART2_TX);

        hw_gpio_set_pin_function(USER_UART_RX_PORT, USER_UART_RX_PIN, \

                HW_GPIO_MODE_INPUT,HW_GPIO_FUNC_UART2_RX);

        hw_uart_init(USER_CONFIG_RETARGET_UART, &uart_init);

       // hw_uart_write_scr(USER_CONFIG_RETARGET_UART, \

                       USER_RETARGET_UART_IS_CONFIGURED_FLAG);

}

以上巨集定義分別代表什麼基本上一目瞭然,再次不做贅述。

 

然後在periph_init函式中呼叫user_uart_init函式:

到這裡串列埠驅動和串列埠引腳設定完畢。

#define USER_UART_TX_PORT    HW_GPIO_PORT_1

#define USER_UART_TX_PIN     HW_GPIO_PIN_3

#define USER_UART_RX_PORT    HW_GPIO_PORT_2

#define USER_UART_RX_PIN     HW_GPIO_PIN_3

這四個巨集定義是設定串列埠的傳送和接收引腳,可以根據使用者需求隨意設定。

串列埠傳送和接收

在prvTemplateTask中加入以下程式碼:

這段程式碼表示串列埠接收到什麼資料就返回什麼資料。

程式碼如下:

rev=hw_uart_read(USER_CONFIG_RETARGET_UART);

if(rev)

{

   hw_uart_write(USER_CONFIG_RETARGET_UART,' ');

   hw_uart_write(USER_CONFIG_RETARGET_UART,' ');

   hw_uart_write(USER_CONFIG_RETARGET_UART,rev);

   hw_uart_send(USER_CONFIG_RETARGET_UART, "\r\n  UART_TEST2\r\n", 16, NULL, NULL);

   rev=0;

}

然後編譯程式碼,下載進開發板,電腦開啟串列埠助手,上電測試:

可以看到,電腦端傳送什麼資料,開發板就發回什麼資料了。

以上程式碼只適用單位元組接收,如需要多位元組接收,可以自行用指標和迴圈新增邏輯程式碼。

更多出串列埠相關操作請參考hw_uart.h和hw_uart.c這兩個檔案。