IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> Esp32 C3 Arduino 串口开发(1) -> 正文阅读

[嵌入式]Esp32 C3 Arduino 串口开发(1)

网上合宙的esp32 C3 的测试版 9.9元,简洁小巧,用于学习测试非常方便。原来是装的Luatos,可以直接用Arduino开发。Arduino安装的为最新版 V2.00RC8,有点类似 vScode的风格,支持代码提示 、补全等功能 。

下载安装网址:Software | Arduino

支持中文模式:

安装完Arduino 后,需要安装Esp32 Arduino 支持包,最新版为 2.03,安装比较慢,要有耐心,也可以进入网站直接下载然后离线安装.zip文件。

?我是在线安装的,还是比较快的。

离线包的下载地址:

经测试,我发现,2.03(基于IDF SDKV4.4.1)版本的EEprom 库部分有问题,对于ESP32 c3 无法进行存储,提交问题后,得到快速答复,说是DIO/QIO模式的问题,已经在 2.04版本进行更改了。等待2.04版及时发布。但是这并不影响其它功能。下面开始了学习测试之旅。由于通讯测试比较容易,不需要其它元器件,仅需要一个TTL的串口接头。我用的是CP340的接口。当然如果仅c测试串口 0,则不需要此接口。开发板上安装了CH343 串口芯片,因此需要先安装CH343的驱动。?网内下载即可:CH343EVT.ZIP - 南京沁恒微电子股份有限公司CH343评估板设计原理图,用于USB转串口。https://www.wch.cn/downloads/CH343EVT_ZIP.html

串口工作模式 (一)。

以下为代码,在Loop内循环调用等待。供参考。首先定义常量如下:

串口 0 默认为 IO20和IO21,本测试无需引线,板内部已经和CP343连接,可以直接测试。

#define BTN_STOP_ALARM ? ?0
#define ? ? LED_D4 ? ? 12? ?开发板的 LED1
#define ? ? LED_D5 ? ? 13??开发板的 LED2
#define ? ? TXD1 ? ? 0? ? 串口 1使用的TX PIN
#define ? ? RXD1 ? ? 1? ?串口 1使用的RX PIN

String comdata = "";//声明字符串变量
 
void setup() 
{
  Serial.begin(9600);      //设定的波特率
}
 
void loop() 
{
   while (Serial.available() > 0)  
    {
        comdata += char(Serial.read());//readBytes
        delay(2);
    }
    
   if (comdata.length() > 0)
    {
       Serial.println(comdata);
       comdata = "";
    }
}

注意:Serial对应内部串口 0,Serial1对应内部串口 1,以上为典型开发历程,只对串口0操作,下面为对两个串口0在loop内的操作代码。

/*
 Serial Receive Comand example
 收到 ON/n  则点亮 LED-D4
 收到 OFF/n 则关闭 LED-D5
 This example shows how to use hardware timer in ESP32. The timer calls onTimer
 function every second. The timer can be stopped with button attached to PIN 0
 (IO0).

 This example code is in the public domain.
 */


#define BTN_STOP_ALARM    0
#define     LED_D4     12
#define     LED_D5     13


#define ToggleOutput(out) do { digitalWrite(out, !digitalRead(out)); } while(0)
#define ToggleOutBlink(out,interval) do {static uint32_t estp=0;if( (millis()-estp)>=interval ){ estp=millis();digitalWrite(out, !digitalRead(out));} } while(0)


void setup() {
  Serial.begin(9600);
  pinMode(LED_D4, OUTPUT);   
  pinMode(LED_D5, OUTPUT);  //

  digitalWrite(LED_D4, LOW);
  digitalWrite(LED_D5, LOW);  
}
 
void loop() {
  ToggleOutBlink(LED_D5,1000);
  if(Serial.available()) // if there is data on the line
  {
    String mycommand = Serial.readStringUntil('\n'); // read string until we see a newline character
    mycommand.toUpperCase();
    if(mycommand == "ON")
    {
      digitalWrite(LED_D4, HIGH);
      Serial.println("I turned it ON!"); // Reply text to send to Serial Monitor
    }
    else
    if(mycommand == "OFF")
    {
      digitalWrite(LED_D4, LOW);
      Serial.println("I turned it OFF"); // Reply text to send to Serial Monitor
    }
    else {
      Serial.println(mycommand); // Reply text to send to Serial Monitor
    }
  }
}

下面代码为打开了串口 1 进行配置。并对串口0和1 进行了缓冲区再分配!esp32串口默认缓冲区为128 字节,更改为 512字节。并演示了清空串口缓冲区的方法。注意,Serial.flush不再是清空缓冲区功能了,最新文档显示:为串口传送缓冲发送完毕的标记!

#define BTN_STOP_ALARM ? ?0
#define ? ? LED_D4 ? ? 12? ?开发板的 LED1
#define ? ? LED_D5 ? ? 13??开发板的 LED2
#define ? ? TXD1 ? ? 0? ? 串口 1使用的TX PIN
#define ? ? RXD1 ? ? 1? ?串口 1使用的RX PIN

#define MaxUartErrorCount  20
#define MaxUartRxBufferSize  512
#define Uart0BaudRate  9600
#define Uart1BaudRate  115200

String comdata = "";//声明字符串变量
 
void setup() 
{
  Serial.begin(Uart0BaudRate);
  Serial1.begin(Uart1BaudRate,SERIAL_8N1,RXD1,TXD1);

  Serial.setRxBufferSize(MaxUartRxBufferSize);//默认缓冲区位128 Byte,更改为 512 Byte
  Serial1.setRxBufferSize(MaxUartRxBufferSize);//默认缓冲区位128 Byte,更改为 512 Byte
  while(Serial0.read()>= 0){}//clear serialport
  while(Serial1.read()>= 0){}//clear serialport
}
 
void loop() 
{
   while (Serial.available() > 0)  
    {
        comdata += char(Serial.read());//readBytes
        delay(2);
    }
    
   if (comdata.length() > 0)
    {
       Serial.println(comdata);
       comdata = "";
    }
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 11:01:01  更:2022-07-03 11:01:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 8:19:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计