【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引脚
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值