完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
首先串口这种很重要的东西应该早点讲的,但是串口发送简单,读取起来是要废一番脑筋的,所以下面有两个部分,第一部分只有ESP32的几个串口使能和发送的讲解,第二部分就包含串口接收,我们将要把读取的数据再由我们的调试串口打印出来。
我们将要使用到HardwareSerial这个自带的库,Arduino IDE中编程,将串口映射到别的IO上直接使用 首先第一部分:串口使能与开启以及发送,直接先上代码 #include //我们测试需要用到的串口,ESP32一共有3个串口,串口0应该是用于程序烧写和打印输出调试用的,所以我们只用1和2 HardwareSerial MySerial_stm32(1); void setup() { Serial.begin(115200); //串口的开启,这里还可以传一些别的参数,但是我们只传入下面四个最重要的:波特率,默认SERIAL_8N1为8位数据位、无校验、1位停止位,后面两个分别为 RXD,TXD 引脚 MySerial_stm32.begin(115200, SERIAL_8N1, 14, 15); //MySerial_stm32.updateBaudRate(9600); //重新设置波特率; //MySerial_stm32.end(); //失能串口,释放占用的资源 } void loop() { MySerial_stm32.println("usart test!!!"); delay(1000); } 看看结果: 第二部分:串口的读取 #include //我们测试需要用到的串口,ESP32一共有3个串口,串口0应该是用于程序烧写和打印输出调试用的,所以我们只用1和2 HardwareSerial MySerial_stm32(1); unsigned short i; char temp; //这个函数适用于清理串口读取缓存区的缓存,其实也就是用读一个删除一个的方式清理,我还会打印出有没有进行清理,清理了哪些内容 void clear_usart_buffer(){ i = MySerial_stm32.available(); if(i != 0){ Serial.print("清空串口接收区的缓存......"); Serial.println(MySerial_stm32.available()); while(i--) MySerial_stm32.read(); //读取串口接收回来的数据但是不做处理只给与打印 } else Serial.println("串口接收区的缓存为空!!!"); } /* 关于串口读取还有一些别的函数,用的不多但是找的资料给大家罗列在这里 * * int peek(void); //返回接收缓存中第一个字节数据,但并不从中删除它; * void flush(void); //等待串口收发完毕; * 下面是两个发送的,我没怎么用过,我一般直接使用println来发送 * size_t write(uint8_t);写数据到TX FIFO,在发送FIFO中的数据会自动输出到TX端口上;该方法有很多重载,可以用来发送字符串、长整型、整形;如果TX FIFO已满,则该方法将阻塞; * size_t write(const uint8_t *buffer, size_t size);写数据到TX FIFO,如果发送FIFO已满,则该方法将阻塞; * size_t setRxBufferSize(size_t); //设置接收缓存大小(默认为256字节);ESP32默认有128字节的硬件RX FIFO,在RX FIFO收到数据后会移送到上面的接收缓存中;这个挺重要的但是我们直接使用默认的就好 */ void read_usart(){ i = MySerial_stm32.available(); //返回目前串口接收区内的已经接受的数据量 if(i != 0){ Serial.print("串口接收到的数据量为:"); Serial.println(MySerial_stm32.available()); while(i--){ temp = MySerial_stm32.read(); //读取一个数据并且将它从缓存区删除 Serial.print(temp); //读取串口接收回来的数据但是不做处理只给与打印 } Serial.println(""); //data_analyse(); //至关重要的一步,也就是把读取回来的数据进行分步截取直接拿到我们想要的数据,我下一篇博文会讲如何自己写这个函数 } else Serial.println("串口接收区没有数据!!!"); } void setup() { Serial.begin(115200); //串口的开启,这里还可以传一些别的参数,但是我们只传入下面四个最重要的:波特率,默认SERIAL_8N1为8位数据位、无校验、1位停止位,后面两个分别为 RXD,TXD 引脚 MySerial_stm32.begin(115200, SERIAL_8N1, 14, 15); //MySerial_stm32.updateBaudRate(9600); //重新设置波特率; //MySerial_stm32.end(); //失能串口,释放占用的资源 clear_usart_buffer(); //清空接收区缓存函数 } void loop() { MySerial_stm32.println("usart test!!!"); read_usart(); delay(500); read_usart(); delay(500); read_usart(); delay(500); } 看看结果: |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
896 浏览 0 评论
614 浏览 0 评论
Onenet云网关方案应用--基于米尔瑞芯微RK3576开发板
1187 浏览 0 评论
【幸狐Omni3576边缘计算套件试用体验】Redis最新8.0.2版本源码安装及性能测试
1865 浏览 0 评论
2085 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-7-13 02:04 , Processed in 0.396576 second(s), Total 39, Slave 34 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191