1、 串口初始化
串口参数根据自己实际情况调整,我的串口是为控制RN8209C,所以设置偶检验,4800波特率。
void RN8209_uart_init(void)
{
uart_config_t uart_config = {
.baud_rate = 4800,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_EVEN,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE
};
uart_param_config(UART_NUM_0, &uart_config);
uart_driver_install(UART_NUM_0, 256, 0, 0, NULL);
}
2、 串口发送函数
void RN8209_uart_tx(uint8_t *buf,uint8_t len)
{
//uart_flush_input(UART_NUM_0);
uart_write_bytes(UART_NUM_0,(const char*)buf,len);
uart_wait_tx_done(UART_NUM_0,portMAX_DELAY);
}
3、 串口接收函数
接收函数参数1:
接收函数参数2:串口的数据缓存起来了,你现在要用多大的BUF去获取换缓冲的数据。
接收函数参数3:BUF的大小
接收函数参数4:等待的时间
void RN8209_uart_rx(uint8_t *buf, uint8_t *len)
{
uint8_t temp_buf[20];
len[0] = uart_read_bytes(UART_NUM_0,temp_buf,20,0);
memcpy(buf, temp_buf, len[0] );
//ESP_LOGI(TAG, "len:%d-0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n\n",len[0],buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7]);
}
官方的串口代码封装的还可以,如果对实时性要求不高的话可以将就用。
网友评论