前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ESP32+输出功能

ESP32+输出功能

作者头像
云深无际
发布2021-01-18 10:46:06
8770
发布2021-01-18 10:46:06
举报
文章被收录于专栏:云深之无迹云深之无迹

今天的这篇文章来讲述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)上。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档