DA14683的串口操作
Date: 2018.11.21
Create: Jim
首先我们导入Demo工程freertos_retarget和script
要注销的代码
串口打印的宏定义注销:
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这两个文件。