打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ESP32+输出功能

今天的这篇文章来讲述ESP32的插口打印功能


首先向昨天哪样,打开一个HelloWorld的example

这里对SDK做一个小改动,配置SPI为4MB

文件已经有所体现了

#include <stdio.h>#include "sdkconfig.h"#include "freertos/FreeRTOS.h"#include "freertos/task.h"#include "esp_system.h"#include "esp_spi_flash.h"
#ifdef CONFIG_IDF_TARGET_ESP32 //config idf target esp32#define CHIP_NAME "ESP32" //chip_name"esp32#endif
#ifdef CONFIG_IDF_TARGET_ESP32S2BETA //config idf target esp32-s2 bate#define CHIP_NAME "ESP32-S2 Beta" //chip name esp-s2#endif
void app_main(void){ printf("Hello world!\n");
/* Print chip information */ esp_chip_info_t chip_info; esp_chip_info(&chip_info); printf("This is %s chip with %d CPU cores, WiFi%s%s, ", CHIP_NAME, chip_info.cores, (chip_info.features & CHIP_FEATURE_BT) ? "/BT" : "", (chip_info.features & CHIP_FEATURE_BLE) ? "/BLE" : "");
printf("silicon revision %d, ", chip_info.revision);
printf("%dMB %s flash\n", spi_flash_get_chip_size() / (1024 * 1024), (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");
for (int i = 10; i >= 0; i--) { printf("Restarting in %d seconds...\n", i); vTaskDelay(1000 / portTICK_PERIOD_MS); } printf("Restarting now.\n"); fflush(stdout); esp_restart();}

以上是此处的真实代码

你看头文件第一个有红色波浪线,就是引擎没有加载到这个标准的C库

还有关于组件的配置的头文件

以及freertos的两个头文件

系统+任务

记忆esp_system的头和flash读写的头

https://github.com/espressif/esp-idf/blob/357a277/components/esp_system/include/esp_system.h

顺手就找到了

稍微看看里面的内容,看起来真的很重要


你可以在这里加载自己的库文件的位置


就是我画红色线框的地方

接下来是一些预编译的命令,来定义目标芯片的具体大类

其实就是俩种

printf("This is %s chip with %d CPU cores, WiFi%s%s, ", CHIP_NAME, chip_info.cores, (chip_info.features & CHIP_FEATURE_BT) ? "/BT" : "", (chip_info.features & CHIP_FEATURE_BLE) ? "/BLE" : "");

打印芯片种类以及CPU的核心数

以上就是代码内部所

开始一键编译加烧录

我特地测量了一下时间

for (int i = 10; i >= 0; i--) { printf("Restarting in %d seconds...\n", i); vTaskDelay(1000 / portTICK_PERIOD_MS); } printf("Restarting now.\n"); fflush(stdout); esp_restart();

其实需要学习一下这个代码,就是一个倒计时加重启的代码

头文件:#include<stdio.h> 定义函数:int fflush(FILE * stream);函数说明:fflush()会强迫将缓冲区内的数据写回参数stream指定的文件中,如果参数stream为NULL,fflush()会将所有打开的文件数据更新。返回值:成功返回0,失败返回EOF,错误代码存于errno中。fflush()也可用于标准输入(stdin)和标准输出(stdout),用来清空标准输入输出缓冲区。stdin是standard input的缩写,即标准输入,一般是指键盘;标准输入缓冲区即是用来暂存从键盘输入的内容的缓冲区。stdout是standard output 的缩写,即标准输出,一般是指显示器;标准输出缓冲区即是用来暂存将要显示的内容的缓冲区。 清空标准输出缓冲区,刷新输出缓冲区,即将缓冲区的东西输出到屏幕上 如果圆括号里是已写打开的文件的指针,则将输出缓冲区的内容写入该指针指向的文件,否则清除输出缓冲区。这里的stdout是系统定义的标准输出文件指针,默认情况下指屏幕,那就是把缓冲区的内容写到屏幕上。可是从代码中看不出缓冲区会有什么内容,所以它实际上没有起什么作用

vTaskDelay延时,

常数可以用于通过滴答率计算实时时间-分辨率为一个滴答周期


在xshell内部的打印

这个是重启的一瞬间抛出来的东西

 fflush(stdout)估计是这个缓存里面的东西

在串口输出的这个有重启时的原因

和文档的说法相符

查找资料发现就是串口通信打印的log而已


ESP32 一共有三个 UART 通讯接口,设备号从 0~2,即 UART0,UART1,UART2。这三个串口的管脚不 是固定的,是可以重映射到任意的 IO 口的。
ESP32 的 BOOT 程序把 UART0 用于程序下载,LOG 输出,实验 hello world 的 LOG 就是从 UART0 输出的。在 BOOT 程序里,把 UART0 映射到 IO1(RX0)和 IO3(TX0)上。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
fflush(stdou)
fflush 函数
printf记录程序日志,彻底告别vsnprintf
uc中关于输入缓冲区的问题 printf中加\n 和fflush
printf()详解之终极无惑
Eclipse CDT 调用printf/cout 控制台(console)无输出
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服