首页 > 其他分享 >ESP32-S2使用串口接收数据帧 -- 解决串口缓存溢出问题

ESP32-S2使用串口接收数据帧 -- 解决串口缓存溢出问题

时间:2023-02-13 20:47:47浏览次数:55  
标签:缓存 -- len 串口 解决 Serial 接收数据 溢出

ESP32S2 串口接受数据帧时缓存溢出问题解决

工况

在使用ESP32S2作为单片机使用时,通过串口接收定时发送数据帧,会出现不定时的栈溢出问题。

解决方案

定时清理串口缓存,保证缓存区不会溢出。
解决方法

  1. 使用如下代码清理时,发现不能解决当前问题,经查阅发现,此函数在大于版本1.0之后,功能切换为等待当前串口数据传输结束功能。
Serial.flush()   
  1. 经在网上查阅帖子,发现使用以下方式,可以同等替换。
while(Serial.available()){
    Serial.read();
}
  1. 使用步骤二中的方法可以将缓存中全部数据清除,这并不是我们想要得到的效果,我们的目的是清除过长的数据,保留一帧完整数据,通过一下代码可以解决。
    const uint8_t len_Frame = 13;
    uint8_t buf_len = Serial.available();
    if(buf_len > len_Frame*2){
       for(uint8_t i = 0; i < buf_len-len_Frame*2; i++){
        Serial.read();
        } 
    }

通过以上方法,可以解决串口接受数据帧时,由于数据过多,导致缓存溢出进而引发的单片机重启问题。

日期: 20230213

标签:缓存,--,len,串口,解决,Serial,接收数据,溢出
From: https://www.cnblogs.com/Mech-Snake/p/17117711.html

相关文章

  • 一个经典的 FWT 问题
    黎明前的巧克力给定集合\(S\),求:\[\sum_{A,B\subseteqS\\A\capB=\emptyset}|\text{xor}_{x\inA\cupB}\x=0|\]\(n,a_i\le10^6\)相当于求:\[[x^0]\prod_{i}(1+2......
  • 头像显示
    效果图: 前端代码: 后端代码: 后端分页器代码:mypage.py内代码:  classPagination(object):def__init__(self,current_page,all_count,per_page_num......
  • Selenium Python 问题汇总
    1.在自动化打开浏览器后会长时间加载,此时使用如下命令解决:driver.set_page_load_timeout(20)#设置浏览器超时加载时间driver.set_script_timeout(20)#这两种设置都进......
  • GDB 调试 - 正确地加载调试符号文件
    一、开发流程1.编译可执行文件1#include<stdio.h>2#include<unistd.h>34voidtest()5{6char*s="helloworld\n";7while......
  • 8.2 本地代码的内容
     Windows中EXE文件的程序内容,使用的就是本地代码。用记事本打开有代码清单8-1的内容转换成本地代码得到的EXE文件(Samplel.exe),页面显示情况如图8-3所示。 上面本地代码......
  • 9.2要意识到操作系统的存在
       代码清单9-1表示的是,在Windows操作系统下,用C语言制作一个具有表示当前时间时间功能的应用。time()是用来取得当前日期和时间的函数,print()是用来在显示器上显示字符串......
  • 利用反射和代理简单模拟mybatis实现简单的CRUD
    利用反射接口做java数据库操作今天突发奇想,好像一些基本的CRUD操作路数都是一样的,又想到mybatis中的操作,便想着简单的模拟一下。随便写写,就当练习反射了。Dao接口类:这......
  • linux的安装方式--yum安装
    yum安装 前提 在Linux上安装软件中最头疼的就是软件包之间的依赖关系,通常安装A软件,但是编译的时候会报错说需要B软件,当安装B软件时又报告需要C软件。这个问题rpm安......
  • 一定程度
    <!DOCTYPEhtml><htmllang="en"><head> <metacharset="UTF-8"> <metahttp-equiv="X-UA-Compatible"content="IE=edge"> <metaname="viewport"content="width=d......
  • 8.3 编译器负责转换源代码
    能够把C语言等高级编程语言编写的源代码转换成本地代码的程序称为编译器。每个编写源代码的编程语言都需要其专用的编译器将C语言编写的源代码转换成本地代码的编译器称......