ESP32学习实例(二)串口测试学习之数据通信

目录

一、串口介绍

二、串口测试

三、串口数据的发送和读取

四、不足


Esp32的串口发送,相对来说比串口接收要简单一些,我们第1部分先看一下ESP32的串口发送是如何实现的。第2部分我们使用一些代码用来读取esp32串口所接收到的数据。

一、串口介绍


Esp32一般有三个串口,串口0一般是用于程序的烧写和打印输出调试。所以一般情况下,我们使用其他剩下的两个串口。

二、串口测试

首先我们使用下面的程序来检测一下我们的串口是否能够正常的开启,并通过串口监视器来打印出相关的内容。

#include <HardwareSerial.h>   
HardwareSerial MySerial_stm32(1);  

void setup() {
  Serial.begin(115200);
 
  MySerial_stm32.begin(115200, SERIAL_8N1, 14, 15);

  
}

void loop() {
  MySerial_stm32.println("usart test!!!");
  delay(1000);
}

 

在进行调试的时候,我们要输出的打印信息,最好设置为英文,因为有时候中文是不兼容的,他会出现一些乱码。
我们来简单了解一下这个验证串口是否能够开启和发送的程序,首先include里面包含的是一个库Esp32串口的操作库,使用这个库,我们可以把串口投影到其他引角进行使用,接下来是串口的开启程序,后面的一步是设置波特率的操作。


而最后loop那个程序是用来在一秒钟的时间内打印一次内容的。我们要通过这个程序来了解到begin这个函数如何使用。

三、串口数据的发送和读取

然后我们看串口数据是如何读取的,首先我们的数据发送到串口中是需要有一个储存的位置,而临时的储存位置,我们称为缓存,我们首先使用一个读取和清理缓存的函数,它的功能是读取一个数据后即立刻清除这个数据。


要实现数据读取的功能,我们的思路可以是这样的:首先读取缓存区的数据,然后将读取到的数据立刻删除,然后读取到的数据,在串口监视器中打印,如果储存区没有储存的数据,我们要让串口打印出没有数据的信息,如果存在数据,我们要让他输出串口接收的数据量是什么。经过上述的思路整理,我们的最终程序是这样的。

#include <HardwareSerial.h>    
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("串口接收区的缓存为空!!!");
  }
   
/
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);
}

然后再看一下试验的结果。


总之我们这个是在串口调试器上发送的数据,然后并且在ESP中接收到,并从打印窗口直接显示出来,上述程序主要有两个重要的思路,分别是available和read函数的使用以及删除数据的一个操作。

四、不足

这个实验仍然存在一个缺陷,就是串口的数据接收,每次只能接收一次数据,然后你再进行发送就不能正确接收了。这也是一个比较遗憾的地方,如果哪位同学知道他是什么原因,可以在评论里告诉我。​

  • 1
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好!我可以为您解答关于MicroPython ESP32和STM32之间串口通信的问题。 要实现ESP32和STM32的串口通信,您可以按照以下步骤进行操作: 1. 首先,确保您的ESP32和STM32设备上都已经安装了MicroPython固件。 2. 在ESP32上,您可以使用UART模块来设置串口通信。首先,导入UART模块: ```python from machine import UART ``` 3. 然后,通过实例化UART类来创建一个串口对象。您需要指定串口的引脚和波特率等参数。例如,假设您使用的是ESP32的UART2引脚和波特率为9600: ```python uart = UART(2, baudrate=9600) ``` 4. 接下来,您可以使用串口对象的`write()`方法向STM32发送数据: ```python uart.write('Hello STM32!') ``` 5. 在STM32上,您需要编写相应的代码来接收ESP32发送的数据。具体的代码取决于您使用的STM32开发板和编程环境。一般来说,您可以使用STM32的UART库来配置和接收数据。例如,使用STM32Cube HAL库: ```c #include "stm32f4xx_hal.h" UART_HandleTypeDef huart2; void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { // 处理接收到的数据 // ... } int main(void) { // 初始化STM32串口 HAL_UART_MspInit(&huart2); // 开启接收断 HAL_UART_Receive_IT(&huart2, rx_data, 1); while (1) { // 主循环代码 // ... } } ``` 请注意,上述代码仅为示例,具体的实现细节可能因您的硬件和需求而异。 希望这些信息对您有所帮助!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值