文章目录
一、准备工作
1.下载好串口调试小助手
界面如下
左上角的串口号是指USB TO TTL转接器所接入电脑的串口位置。实物图如下所示:
2.准备好连接esp32单片机
3.找到uart文件夹
打开Visual Studio Code软件,点击左上角文件,点击选择文件夹。按照如下红色圈记路径找到uart echo文件夹。
鼠标点击选择文件夹,Visual Studio Code软件界面如下。
二、改写程序
原始程序文件夹中有此处不再展示,以下是改写以及注释好之后的代码:
/* UART Echo Example
This example code is in the Public Domain (or CC0 licensed, at your option.)
Unless required by applicable law or agreed to in writing, this
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include "freertos/FreeRTOS.h"//freertos系统文件
#include "freertos/task.h"//任务创建
#include "driver/uart.h"//串口驱动
#include "driver/gpio.h"//gpio(引脚,输入输出)
#include "sdkconfig.h"
/**
* This is an example which echos any data it receives on configured UART back to the sender,
* with hardware flow control turned off. It does not use UART driver event queue.
*
* - Port: configured UART
* - Receive (Rx) buffer: on
* - Transmit (Tx) buffer: off
* - Flow control: off
* - Event queue: off
* - Pin assignment: see defines below (See Kconfig)
*/
//#define ECHO_TEST_TXD (CONFIG_EXAMPLE_UART_TXD)
//#define ECHO_TEST_RXD (CONFIG_EXAMPLE_UART_RXD)
#define ECHO_TEST_TXD 15//esp32的发送引脚
#define ECHO_TEST_RXD 4//esp32de接收引脚
#define ECHO_TEST_RTS (UART_PIN_NO_CHANGE)
#define ECHO_TEST_CTS (UART_PIN_NO_CHANGE)
//#define ECHO_UART_PORT_NUM //串口号(CONFIG_EXAMPLE_UART_PORT_NUM)
//#define ECHO_UART_BAUD_RATE //波特率(CONFIG_EXAMPLE_UART_BAUD_RATE)
//#define ECHO_TASK_STACK_SIZE //任务栈大小(CONFIG_EXAMPLE_TASK_STACK_SIZE)
#define ECHO_UART_PORT_NUM 2 //uart的端口号
#define ECHO_UART_BAUD_RATE 9600 //uart的波特率
#define ECHO_TASK_STACK_SIZE 1024 //任务堆栈大小
#define BUF_SIZE (1024) //uart缓冲区大小
int count1=0;//用以计数
//任务1
static void echo_task1(void *arg)
{
/* Configure parameters of an UART driver,
* communication pins and install the driver */
uart_config_t uart_config = {
.baud_rate = ECHO_UART_BAUD_RATE,//uart波特率
.data_bits = UART_DATA_8_BITS,//uart数据位,此处是8位
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,//停止位(此处是1)
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
.source_clk = UART_SCLK_APB,
};
int intr_alloc_flags = 0;
#if CONFIG_UART_ISR_IN_IRAM
intr_alloc_flags = ESP_INTR_FLAG_IRAM;
#endif
ESP_ERROR_CHECK(uart_driver_install(ECHO_UART_PORT_NUM, BUF_SIZE * 2, 0, 0, NULL, intr_alloc_flags));
ESP_ERROR_CHECK(uart_param_config(ECHO_UART_PORT_NUM, &uart_config));
ESP_ERROR_CHECK(uart_set_pin(ECHO_UART_PORT_NUM, ECHO_TEST_TXD, ECHO_TEST_RXD, ECHO_TEST_RTS, ECHO_TEST_CTS));
// Configure a temporary buffer for the incoming data
uint8_t *data = (uint8_t *) malloc(BUF_SIZE);
while (1) {
// Read data from the UART(uart接收来自串口调试小助手发送的信息)
int len = uart_read_bytes(ECHO_UART_PORT_NUM, data, BUF_SIZE, 20 / portTICK_RATE_MS);//所接收数据的长度
// Write data back to the UART
//uart_write_bytes(ECHO_UART_PORT_NUM, (const char *) data, len);
uart_write_bytes(ECHO_UART_PORT_NUM, (const char *) data, len);//将接收到的数据发送到串口小助手
if(len>2)//如果串口接收数据的长度大于2,则发送“uart2:yes”信息至串口调试小助手
{
uart_write_bytes(ECHO_UART_PORT_NUM, "uart2:yes\n", 10);
}
count1+=len;//计数
}
}
void app_main(void)
{
printf("aaa\n");//运行提示
xTaskCreate(echo_task1, "uart_echo_task", ECHO_TASK_STACK_SIZE, NULL, 10, NULL);
int i=0;
while(1)
{
vTaskDelay(1000 / portTICK_RATE_MS);//延迟1000ms(1秒)
i++;//计时
printf("%d:count1=%d\n",i,count1);
uart_write_bytes(2, "#001P2000T1000!\n", 16);//实时发送数据至串口调试小助手
}
}
划重点
1.定义串口号为2,设置串口波特率为9600
#define ECHO_UART_PORT_NUM 2 //uart的端口号
#define ECHO_UART_BAUD_RATE 9600 //uart的波特率
#define ECHO_TASK_STACK_SIZE 1024 //任务堆栈大小
2.定义好esp32的发送引脚和接收引脚,15,4两个数字代表对应单片机上的引脚号。
#define ECHO_TEST_TXD 15//esp32的发送引脚
#define ECHO_TEST_RXD 4//esp32de接收引脚
3.此处的len是指从串口小助手接收到的信息的长度,如串口小助手发送字符串“asdc”,则len=4;
int len = uart_read_bytes(ECHO_UART_PORT_NUM, data, BUF_SIZE, 20 / portTICK_RATE_MS);
4.这两个函数是串口信息收发的关键。read函数表示esp332从串口小助手读入数据也就是实现RXD(接收功能)。 write函数表示将信息发送到串口小助手。实现TXD(发送)功能。
uart_read_bytes(ECHO_UART_PORT_NUM, data, BUF_SIZE, 20 / portTICK_RATE_MS);
uart_write_bytes(ECHO_UART_PORT_NUM, (const char *) data, len);
三、测试步骤
1.将程序下载到单片机中
首先连接好单片机,记住接入的端口号
然后点击下图红色圈记部分,选择单片机连接的串口号。
再按住单片机sw1按钮不要松手,再按住sw2,再松手进行单片机的重启。随后页面会出现“waiting for download” (等待下载),再点击下图红色圈记部分,把程序下载到单片机中。
然后会出现黄色的信息,说明已经下载完成,按下单片机的sw2按钮便开始运行。终端会输出代码中prinft的内容。
2.单片机连接USB TO TTL转接器
我写的代码中此处15号引脚为数据发送,4号为接收。
将15处连转接器的接收端RXD,4处连转接器的发送端TXD。单片机的GND接转接器的GND。
3.测试串口调试小助手接收发功能
左上后串口号选择USB TO TTL的端口号,波特率与esp32对应选择9600,校验位选择NONE,数据位与esp32代码中对应选择8,停止位对应选1。再点击打开即可接收以及发送数据。(补充:接收设置可以选择ASCII,即接收到的是发送的原文本,也可以选择HEX十六进制接收数据,HEX所代表的含义可通过计算得ASCII值。发送设置同理)。下方的发送框即是串口调试小助手发送给esp32的数据。测试如下:
蓝色划线表示SEND发送"1232"给esp32,而esp32也会发送同样的数据“1232”给串口小助手。即红色RECV接收到1232,此外len=4>3还会接收到esp32发送的“uart2:yes”信息。而esp32中count1=count1+len,count计数同样发生了改变。由16+4变成12。printf里面的内容会在终端显示。
四、总结
uart_echo例源主要实现esp32和串口调试助手间的数据接收,发送功能。注意好发收对应的引脚,正确选择好对应的端口在此例中很重要。