ESP32-IDF 02-5 外设-UART
Posted Ciaran-byte
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESP32-IDF 02-5 外设-UART相关的知识,希望对你有一定的参考价值。
UART
1. 概述
esp32的UART一共有UART0、UART1和UART2三个UART,支持UART唤醒,并且可以使用DMA
2. 时钟源
- 80MHZ APB_CLK
- 参考时钟REF_TICK
可以通过UART_CLKDIV_FRAG来选择时钟源
3. 框图
4. 存储
默认情况下uart0、1、2的输入和输出各占一个block。如果需要block大小可以更改,不过这样的话就会占用其他uart的存储器。
5. 引脚定义
esp32的UART是有默认引脚的,但是因为esp32支持IO交换矩阵,所以UART可以使用任意GPIO引脚作为串口使用
6. 例程
6.1 串口发送数据
uart.h
#ifndef _UART_H_
#define _UART_H_
#define BaudRate 115200
#define UART UART_NUM_2
#define RX GPIO_NUM_3
#define TX GPIO_NUM_1
#define RTS UART_PIN_NO_CHANGE
#define CTS UART_PIN_NO_CHANGE
#define RX_BUFFER 1024
#define TX_BUFFER 1024
// UART0被log和console占用,可以通过把UART1和UART2重定向到GPIO_3和GPIO_1实现向电脑发送数据
void uart_init();
#endif
uart.cpp
#include "uart.h"
void uart_init()
{
//01 配置串口通讯的参数
uart_config_t uart_config;
uart_config.baud_rate = BaudRate; //设置通讯的波特率
uart_config.data_bits = UART_DATA_8_BITS; //设置数据位8位
uart_config.flow_ctrl = UART_HW_FLOWCTRL_DISABLE; //关闭硬件流控制
uart_config.parity = UART_PARITY_DISABLE; //关闭校验位
uart_config.stop_bits = UART_STOP_BITS_1; //设置1位停止位
uart_config.use_ref_tick = false; //使用默认的时钟源,不适用rtc时钟源
uart_param_config(UART_NUM_2, &uart_config); //配置gpio引脚
//02 配置通讯引脚
//全部使用uart默认引脚
uart_set_pin(UART, TX,RX , UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
//03 配置通讯的buffer
uart_driver_install(UART, RX_BUFFER, TX_BUFFER, 0, NULL, 0);
}
main.cpp
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "led.h"
#include "driver/uart.h"
void setup() {
uart_init();
//04 发送
char* test_str = "This is a test string.\\n";
while (1)
{
uart_write_bytes(UART_NUM_2, (const char*)test_str, strlen(test_str));
vTaskDelay(2000 / portTICK_PERIOD_MS);
}
}
// the loop function runs over and over again until power down or reset
void loop() {
}
7. 出现的问题
- uart0被log和console占用。如果希望通过串口输出数据到电脑,应该使用uart1和uart2,并且引脚需要做重定向
- 模组图纸上的标号是模组的引脚,不是芯片定义的引脚,因此那个rx0和tx0应该对应gpio1和gpio3,而不是34和35引脚
以上是关于ESP32-IDF 02-5 外设-UART的主要内容,如果未能解决你的问题,请参考以下文章