当前位置: 首页 > news >正文

做网站用asp div代码谷歌seo和百度seo区别

做网站用asp div代码,谷歌seo和百度seo区别,大学网站建设多少钱,wordpress个人博客毕业设计ESP32-S3 IDF USART详解 USART简介 USART是一种串行通信协议,广泛应用于微控制器和计算机之间的通信。USART支持异步和同步模式,因此它可以在没有时钟信号的情况下(异步模式)或有时钟信号的情况下(同步模式&#xff…

ESP32-S3 IDF USART详解

USART简介

USART是一种串行通信协议,广泛应用于微控制器和计算机之间的通信。USART支持异步和同步模式,因此它可以在没有时钟信号的情况下(异步模式)或有时钟信号的情况下(同步模式)进行通信。

ESP32-S3的USART

ESP32-S3有两个全功能的USART通道,USART0和USART1,USART2,支持异步通信(RS232 和 RS485)和 IrDA,通信速率可达到 5 Mbps。

UART 基本架构图
在这里插入图片描述
UART 模块工作在两个时钟域:APB_CLK 时钟域和 Core 时钟域。UART Core 有三个时钟源:80-MHz APB_CLKRC_FAST_CLK 以及晶振时钟 XTAL_CLK ,可以通过配置 UART_SCLK_SEL 来选择时钟源。分频器用于对时钟源进行分频,然后产生时钟信号来驱动 UARTCore 模块。

更加详细的介绍,可以去看看官方的文档:
ESP32S3官方文档

需要注意一点
ESP32-S3的USART引脚映射是可配置的,这是因为ESP32-S3使用了一个称为GPIO矩阵的特性。GPIO矩阵是ESP32-S3硬件的一部分,它允许将内部信号路由到任何GPIO引脚。这意味着,我们可以将USART的发送(TX)和接收(RX)信号连接到你选择的任何可用GPIO引脚。

ESP32-S3 UART的默认引脚

发送(TX)接收(RX)
UART0IO43IO44
UART1IO17 / 任意IOIO18 / 任意IO
UART2任意IO任意IO

printf()函数

在ESP-IDF中,printf()函数默认使用的是USART0。这是因为在ESP32-S3的启动代码中,USART0被初始化为默认的调试控制台。因此,当我们在代码中使用printf()函数来打印信息时,这些信息将会被发送到USART0,并且可以通过串行接口(如USB转串口适配器)在计算机的串行监视器上看到。

使用ESP-IDF配置USART

在ESP32-S3上使用USART的基本步骤:

  • 设置 UART 参数、分配引脚(可选,不配置则使用默认引脚)
  • 初始化UART
  • 安装 UART 驱动
  • 收发数据
  • 使用中断
  • 卸载 UART 中断驱动,释放资源(当 UART 不再使用时)
#include "driver/uart.h"void app_main(void)
{// -------------1. 配置USART选项-----------------------uart_config_t uart_config = {.baud_rate = 115200, // 波特率.data_bits = UART_DATA_8_BITS, // 数据位.parity = UART_PARITY_DISABLE, // 奇偶校验.stop_bits = UART_STOP_BITS_1, // 停止位.flow_ctrl = UART_HW_FLOWCTRL_DISABLE // 流控};// --------------2. 初始化USART------------------------// UART_NUM_1:UART端口号// &uart_config:指向uart_config_t结构体的指针uart_param_config(UART_NUM_1, &uart_config);// --------------3. 安装驱动程序------------------------// UART_NUM_1:UART端口号// 1024 * 2:接收缓冲区大小// 0:发送缓冲区大小// 0:队列长度// NULL:队列句柄(如果不使用队列,可以设置为NULL)// 0:中断分配标志(通常设置为0)uart_driver_install(UART_NUM_1, 1024 * 2, 0, 0, NULL, 0);// 4.---------------4. 发送数据--------------------------// UART_NUM_1:UART端口号// "Hello, world!":要发送的数据// 13:要发送的数据的长度uart_write_bytes(UART_NUM_1, "Hello, world!", 13);// ------------------5. 读取数据-----------------------uint8_t data[128]; // 数据缓冲区int length = 0; // 读取的数据长度// UART_NUM_1:UART端口号// data:数据缓冲区// sizeof(data):要读取的最大数据长度// 1000 / portTICK_RATE_MS:读取超时时间(以RTOS tick为单位)length = uart_read_bytes(UART_NUM_1, data, sizeof(data), 1000 / portTICK_RATE_MS);if (length > 0) {// 如果读取到数据,处理数据// ...}}

前面提到过ESP32-S3的USART引脚映射是可配置的,所以我们可以使用uart_set_pin()来自定义TX和RX

#include "driver/uart.h"void app_main(void)
{// 设置UART1的TX引脚为GPIO10,RX引脚为GPIO9uart_set_pin(UART_NUM_1, 10, 9, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
}

这里uart_set_pin()函数的最后两个参数是RTS(请求发送)和CTS(清除发送),我没有使用所以将它们设置为UART_PIN_NO_CHANGE

USART实验

在这里插入图片描述
串口UART_NUM_1接收数据,并分别在串口UART_NUM_0和串口UART_NUM_1返回

这次我们依旧使用面向对象的方法来编写驱动,驱动API接口参考Arduino的格式

USART.h

/*** @file USART.h* @author 宁子希 (1589326497@qq.com)* @brief   串口初始化类* @version 0.1* @date 2024-03-12* * @copyright Copyright (c) 2024* */#ifndef _USART_H_
#define _USART_H_#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/uart.h"
#include "driver/uart_select.h"
#include "driver/gpio.h"#ifdef __cplusplusextern "C" {
#endifclass Uart {
public:// 构造函数,接收UART端口号和TX、RX引脚作为参数Uart(uart_port_t uart_num, int tx_pin, int rx_pin);// 发送数据,接收一个字符数组和长度作为参数void write(const char* data, int len);// 接收数据,接收一个字符数组和长度作为参数,返回实际接收的长度int read(uint8_t* buf, int len);private:uart_port_t _uart_num; // UART端口号int _tx_pin; // TX引脚int _rx_pin; // RX引脚
};#ifdef __cplusplus}
#endif#endif

USART.cpp

/*** @file USART.cpp* @author 宁子希 (1589326497@qq.com)* @brief   串口初始化类* @version 0.1* @date 2024-03-12* * @copyright Copyright (c) 2024* */
#include "USART.h"// 构造函数
Uart::Uart(uart_port_t uart_num, int tx_pin, int rx_pin): _uart_num(uart_num), _tx_pin(tx_pin), _rx_pin(rx_pin) {// 配置UART参数uart_config_t uart_config = {.baud_rate = 115200, // 波特率.data_bits = UART_DATA_8_BITS, // 数据位.parity = UART_PARITY_DISABLE, // 奇偶校验.stop_bits = UART_STOP_BITS_1, // 停止位.flow_ctrl = UART_HW_FLOWCTRL_DISABLE, // 流控制};// 配置UART参数uart_param_config(uart_num, &uart_config);// 设置UART引脚// 设置UART的TX和RX引脚uart_set_pin(uart_num, tx_pin, rx_pin, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);// 安装UART驱动程序// 安装UART驱动程序uart_driver_install(uart_num, 1024 * 2, 0, 0, NULL, 0);
}// 发送数据
void Uart::write(const char* data, int len) {// 调用ESP-IDF库函数来发送数据uart_write_bytes(_uart_num, data, len);
}// 接收数据
int Uart::read(uint8_t* buf, int len) {// 调用ESP-IDF库函数来接收数据return uart_read_bytes(_uart_num, buf, len, 1000 / portTICK_PERIOD_MS);
}

main.cpp

/*** @file main.cpp* @author 宁子希 (1589326497@qq.com)* @brief   串口通信实验* @version 0.1* @date 2024-03-13* * @copyright Copyright (c) 2024* */#include <iostream>
#include <string>
#include "USART.h"
using namespace std;extern "C" void app_main(void){// 创建一个Uart对象使用UART_NUM_1 TX:8 RX:9Uart uart1(UART_NUM_1, 8, 9);// 发送数据uart1.write("Hello, ESP32!", 13);while(true){// 接收数据uint8_t buf[128];int len = uart1.read(buf, sizeof(buf));// 处理接收到的数据if (len > 0) {// 假设我们只是简单地将接收到的数据打印出来for (int i = 0; i < len; i++) {printf("%c", buf[i]);}printf("\n");// 然后我们可以再次发送处理后的数据uart1.write((const char*)buf, len);}}
}

总结

更加详细的内容可以去看看官方的资料:
ESP32S3 USART 官方手册

http://www.ritt.cn/news/5387.html

相关文章:

  • 政府网站建设项目背景太原企业网站建设
  • wordpress关闭谷歌字体系统优化软件十大排名
  • 大学生创意产品设计方案福州百度快速优化排名
  • 海南响应式网站建设制作网络广告有哪些形式
  • 用帝国做的网站只收录首页软文写作平台
  • .tv做网站怎么样产品推广ppt范例
  • 关于购物网站开发的开题报告关键词优化排名怎么做
  • 做网站需要注意哪些提升seo排名
  • 甘肃省建设厅门户网站营销培训总结
  • 网站介绍页面免费b站推广网站不用下载
  • 做外贸网站服务器要选择哪里的网络seo推广
  • 做360网站优化站长工具友链检测
  • 网站的模版可以换吗手机百度如何发布作品
  • 东莞品牌网站设计公司计公司网络营销推广方案ppt
  • 南昌网站建设公司统计站老站长推荐草莓
  • 玉林做绿化苗木网站的是哪个单位如何在各大平台推广
  • wordpress个人展示网站6最新seo操作
  • 宜兴营销型网站建设班级优化大师官方免费下载
  • 做简历的网站有百度网盘资源免费搜索引擎入口
  • 西安将军山网站建设软文营销文章300字
  • 义乌网图科技有限公司电话seo网站推广建站服务商
  • 如何建立自己免费网站不屏蔽的国外搜索引擎
  • wordpress 主seo厂家电话
  • 网站开发用到的编程浙江企业网站建设
  • 网站布局有哪些海南百度首页广告
  • 新网网站建设跨界营销案例
  • 大学生家教网站开发中国十大公关公司排名
  • 做词云的网站百度投放广告平台
  • 电商网站设计的原则网络推广是做什么工作的
  • 做网站怎么做连接点下一个页面一套完整的运营方案