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的主要内容,如果未能解决你的问题,请参考以下文章

ESP32-IDF02-3 外设-定时器

ESP32-IDF 02-4 外设-SPI

ESP32-IDF02-2 外设-触摸传感器

ESP32-IDF开发实例-JSON数据构造与解析

ESP32-IDF开发实例-传感器模块编程-TM1637数码管

ESP32-IDF开发实例-传感器模块编程-DHT11温度湿度传感器