今天我们来玩儿串口

概述

ESP32 芯片有3 个 UART 接口,UART0,UART1,UART2,支持异步通信和 IrDA,通信速度最高可达 5Mbps,3 个接口可以被 DMA 或 CPU 直接访问,3 个串口带发送接收 FIFO,共享 1024*8bit 的 RAM,通过串口,我们可以非常方便的跟其它外设进行通信或者打印数据。

硬件

上图是硬件参考设计,我把默认的串口标注出来了,我们可以在Arduino的库中看到默认的引脚,如下图:

UART0 引脚直接在函数里面定义了,UART1、UART2使用宏定义,大家还记得我们在GPIO章节中说的吗,ESP32有GPIO矩阵,外设都可以随意映射到绝大部分的引脚,比如我们想把UART2的引脚改变到GPIO26 GPIO27这两个上,我们直接调用相关函数就行了,这些都是可以实现的,硬件上非常灵活

U0TXD 线上需串联 499 Ω 电阻用于抑制 80 MHz 谐波。ESP32 UART 串口电路如下图所示:

这里还需要注意下,UART1的默认引脚为GPIO9,、GPIO10,这两个接口一般用于连接外部Flash,程序中默认使用这两个引脚的,所以我们在用的时候一定记得改到别的IO口。

软件

关于串口的一些概念,包括原理,波特率,停止位,奇偶校验,流控等概念,这些概念非常基础,这里就展开篇幅说了,需要的小伙伴自行了解,不同芯片,原理都是一样的。

我们讲一下基础的使用

首先我们需要在setup()中对串口进行初始化,非常简单,就一行代码搞定:

Serial.begin(115200);

这里默认是UART0的,将UART0波特率初始化为115200,其它参数都是默认的,如果我们想将UART0的TX RX改一下呢,我们看下面:

Serial.begin(115200,SERIAL_8N1,26,27);

通过上面的函数,我们就把RX改到了26,TX改到了27,第一个参数为波特率设置,如果输入0就会自动监测波特率,第二个为串口配置参数,SERIAL_8N1为8位数据位,无校验位,1位停止位的意思,还有其它参数,大家可以自行到源码中看看,加深印象。

看到这里才体会到GPIO矩阵的妙处,硬件设计大大的简化啊!

关于串口的函数,我们这里介绍几个常用的,完整的可以在HardwareSerial类中看到。

void begin(unsigned long baud, uint32_t config=SERIAL_8N1, int8_t rxPin=-1, int8_t txPin=-1, bool invert=false, unsigned long timeout_ms = 20000UL); //串口初始化
void end();//失能串口
void updateBaudRate(unsigned long baud);//重新设置波特率
int available(void);//返回串口接收缓冲区中的数据
int read(void);//返回串口接收缓冲区的一个字节的数据,之后将缓冲区中的本字节删除
void flush(void);//等待串口收发数据完毕
size_t write(uint8_t);//写数据到TX缓冲区
size_t setRxBufferSize(size_t);//设置接收缓冲区的大小

这里只是简单展示几个函数,具体的用法有不懂的,或者想了解全部函数的,可以在arduino-esp32中打开具体的库看用法,只有这样,大家才能深刻了解,老宇哥这里只是带大家进门。

库函数中有标准输入输出函数,所以打印函数必不可少的了,我们常用的打印函数如下:

Serial.print("芯片之家!"); //打印数据
Serial.println("This is a uart0 demo!"); //打印并换行

当然,也可以各种格式化打印,大家可以自行尝试!

Serial.println(data) //从串行端口输出数据,跟随一个回车(ASCII 13, 或 'r')和一个换行符(ASCII 10, 或 'n')。这个函数所取得的值与 Serial.print()一样。
Serial.println(b) //以十进制形式输出b的ASCII编码值,并同时跟随一个回车和换行符。
Serial.println(b, DEC)// 以十进制形式输出b的ASCII编码值,并同时跟随一个回车和换行符。
Serial.println(b, HEX) //以十六进数据形式输出b的ASCII编码值,并同时跟随一个回车和换行符。
Serial.println(b, OCT)//以八进数据形式输出b的ASCII编码值,并同时跟随一个回车和换行符。
Serial.println(b, BIN)//以二进数据形式输出b的ASCII编码值,并同时跟随一个回车和换行符。
Serial.print(b, BYTE)//以单个字节输出b,并同时跟随一个回车和换行符。
Serial.println(str)//如果 str是一个字符串或数组,输出整个 str的 ASCII编码字符串。
Serial.println()//仅输出一个回车和换行符。

完整程序1:

void setup()
{Serial.begin(115200);
}void loop()
{Serial.print("芯片之家!"); Serial.println("This is a uart0 demo!"); delay(1000);
}

完整程序2:

int recData; //接收的数据void setup() {Serial.begin(115200);
}void loop() {// 收到什么发什么数据if (Serial.available() > 0) {// 读取一个字节recData = Serial.read();Serial.print("received: ");Serial.println(recData,HEX);}
}

感谢大家,关于ESP32的学习,希望大家Enjoy!您的 转发点赞 就是我继续创作的最佳动力!

老宇哥带你玩转ESP32:03 GPIO数字输入与数字输出

老宇哥带你玩转ESP32:02使用VSCode+PlatformIO搭建开发环境

老宇哥带你玩转ESP32:01入门介绍

欢迎点分享、收藏、点赞、在看。

老宇哥带你玩转 ESP32:04 串口玩起来是真方便相关推荐

  1. 老宇哥带你玩转ESP32:02使用VSCode+PlatformIO搭建开发环境

    上一篇文章给大家介绍了ESP32使用Arduino官方IDE进行开发的流程. 老宇哥带你玩转ESP32:01入门介绍 (点击阅读) 有部分同学反馈下载的时候特别慢,这个库是托管在GitHub的,国内有 ...

  2. 老宇哥带你玩转 ESP32:09 EEPROM的使用演示

    今天我们来玩儿EEPROM. EEPROM概述 ESP32内部没有专门的EEPROM,但是我们可以通过FLASH模拟EEPROM,FLASH与EEPROM也是非常相似的,都是非易失性存储器,使用EEP ...

  3. 老宇哥带你玩转ESP32:03 GPIO数字输入与数字输出

    今天我们来点灯. 多路复用器与GPIO矩阵 ESP32芯片有34个物理 GPIO Pad,每个Pad可以当作通用IO,也可以当作外设的引脚,GPIO 引脚通过非常复杂的 GPIO 矩阵互连,这基本上就 ...

  4. 老宇哥带你玩转ESP32:01入门介绍

    接触物联网差不多10年了. 先跟大家聊聊,老宇哥11年进入大学,大一就在实验室开始了电子研发,记得那时候师兄介绍我买了一块郭天祥老师的51开发板,还有配套的一本书,虽然从小非常喜欢电子,经常折腾,有一 ...

  5. mysql为什么用b加树_为什么MySQL要用B+树?聊聊B+树与硬盘的前世今生【宇哥带你玩转MySQL 索引篇(二)】...

    为什么MySQL要用B+树?聊聊B+树与硬盘的前世今生 在上一节,我们聊到数据库为了让我们的查询加速,通过索引方式对数据进行冗余并排序,这样我们在使用时就可以在排好序的数据里进行快速的二分查找,使得查 ...

  6. mysql 如何添加索引_MySQL如何创建一个好索引?创建索引的5条建议【宇哥带你玩转MySQL 索引篇(三)】...

    MySQL如何创建一个好索引?创建索引的5条建议 过滤效率高的放前面 对于一个多列索引,它的存储顺序是先按第一列进行比较,然后是第二列,第三列...这样.查询时,如果第一列能够排除的越多,那么后面列需 ...

  7. 跟着老宇哥一起,咱们手把手一起DIY一个宠物喂食器,免费领开发套件!

    跟涂鸦申请的福利,给喜欢开发的同学发放开发套件,只要是不是专门白嫖党,数量可以不做限制. 去年疫情突发,封城.封小区以及人员隔离,让原本享受千般宠爱的主子们变成了靠吃猫砂.塑料袋度日的小可怜,甚至有些 ...

  8. 蒙文字体怎么安装_焘哥带你玩转字体(三)字体的安装及显示问题

    视频版 焘哥带你玩转字体(三)https://www.zhihu.com/video/1132957888620130304 上两篇文章我们共同了解了[衬线].[非衬线]字体,和如何识别字体的性格,以 ...

  9. 超哥带你玩转正则表达式-(六)

    超哥带你玩转正则 目录 (一)一句话弄明白你的疑问 (二)正则表达式啥玩意? (三)正则表达式的语法(第一招) 1.元字符 2. 重复限定符 3. 分组 4. 转义 5. 条件或 6. 区间 (四)练 ...

最新文章

  1. MySQL存储引擎之Myisam和Innodb总结性梳理
  2. .NET Core多平台项目模板eShopOnContainers编译手记
  3. 30岁之前需要知道的10个人生底线,你知道几个?
  4. JMM内存模型详解(一)
  5. 前端薪资竟最差?程序员跳槽时如何才能谈个好价钱
  6. micropython性能低下_MicroPython支持的开发板:高性能、低成本创客首选
  7. CH341/CH340Linux驱动使用教程
  8. 常用的浏览器及其内核
  9. 数据总线、地址总线详解
  10. 某知名网络安全公司的渗透测试工程师面试题实战汇总
  11. klouderr什么意思_bought是什么意思_bought的翻译_音标_读音_用法_例句_爱词霸在线词典...
  12. delphi android 截屏,Delphi 截图\截屏
  13. 软件编程推荐书籍目录
  14. Vue中的SEO优化
  15. 海思Hi3516dv300屏幕调试MIPI TX接口LCD屏幕(京东方JD9366)
  16. ReactiveX函数简要说明
  17. 【AltiumDesigner专栏】01.06——ECAD-MCAD(二)
  18. 计算机一级ps操作,计算机一级考试《PS》:视图操作快捷键大全
  19. 心路历程(一)--天圆地方的时候
  20. 国产奶粉逆袭的10年:90后奶爸奶妈助力新国货逆袭洋品牌

热门文章

  1. vscode的c_cpp_properties.json
  2. 破解浏览器主页被锁定在毒霸网址大全的问题
  3. 正则(数字或者以英文逗号隔开的数字字符串)
  4. android 切回前台,Android退到后台与切到前台
  5. virbr0怎么关闭_kvm虚拟化关闭虚拟网卡virbr0的方法
  6. 关于烛光斧影——赵光义是否谋杀赵匡胤,是否合法继位
  7. 评估EtherCAT从站节点解决方案
  8. shell 回车键判断_Bash技巧:把变量赋值为换行符,判断文件是否以换行符结尾...
  9. vue updated
  10. Linux中使用sendmail发送邮件,指定任意邮件发送人