02.ESP32教程-linux开发环境搭建
Linux下的软件开发和编译环境配置

Linux下的软件开发和编译环境配置在Linux操作系统中,配置适合软件开发和编译的环境是非常重要的。
正确地设置开发环境,可以提高开发效率,同时确保软件的质量和稳定性。
本文将介绍如何在Linux下配置软件开发和编译环境,以帮助开发人员顺利进行开发工作。
一、安装必要的开发工具在开始配置软件开发环境之前,您需要安装一些必要的开发工具。
在Linux中,常用的开发工具包括GCC编译器、Make工具、调试器(如GDB)、版本控制工具(如Git)等。
您可以通过包管理器(如APT、YUM等)来安装这些工具。
以下是安装这些工具的示例命令(以基于Debian的系统为例):```sudo apt-get updatesudo apt-get install build-essentialsudo apt-get install gdbsudo apt-get install git```通过执行这些命令,您可以安装所需的开发工具,以便后续的配置步骤。
二、配置开发环境要配置软件开发环境,您需要设置一些环境变量和配置文件。
以下是一些常见的配置步骤:1. 配置PATH环境变量在Linux中,PATH环境变量用于指定可执行程序的搜索路径。
为了方便地访问开发工具和编译器,您应该将它们所在的目录添加到PATH环境变量中。
您可以通过编辑`.bashrc`文件来实现这一点。
打开终端,输入以下命令编辑文件:```vi ~/.bashrc```在文件末尾添加以下行(假设开发工具的路径为`/usr/local/bin`):```export PATH=$PATH:/usr/local/bin```保存并退出文件。
然后,使用以下命令使更改生效:```source ~/.bashrc```现在,您可以在任何目录下直接运行开发工具和编译器。
2. 配置编辑器选择一个适合您的编辑器来编写代码是很重要的。
在Linux中有多种编辑器可供选择,如Vim、Emacs、Sublime Text等。
esp32 技术参考手册

ESP32技术参考手册版本4.7乐鑫信息科技版权©2022关于本手册《ESP32技术参考手册》的目标读者群体是使用ESP32芯片的应用开发工程师。
本手册提供了关于ESP32的具体信息,包括各个功能模块的内部架构、功能描述和寄存器配置等。
芯片的管脚描述、电气特性和封装信息等可以从《ESP32技术规格书》获取。
文档版本请至乐鑫官网https:///zh-hans/support/download/documents下载最新版本文档。
修订历史请至文档最后页查看修订历史。
文档变更通知用户可以通过乐鑫官网订阅页面/zh-hans/subscribe订阅技术文档变更的电子邮件通知。
证书下载用户可以通过乐鑫官网证书下载页面/zh-hans/certificates下载产品证书。
目录1系统和存储器24 1.1概述24 1.2主要特性24 1.3功能描述261.3.1地址映射261.3.2片上存储器261.3.2.1Internal ROM0271.3.2.2Internal ROM1271.3.2.3Internal SRAM0271.3.2.4Internal SRAM1281.3.2.5Internal SRAM2281.3.2.6DMA281.3.2.7RTC FAST Memory291.3.2.8RTC SLOW Memory291.3.3片外存储器291.3.4Cache291.3.5外设301.3.5.1不对称PID Controller外设321.3.5.2不连续外设地址范围321.3.5.3存储器速度32 2中断矩阵(INTERRUPT)332.1概述33 2.2主要特性33 2.3功能描述332.3.1外部中断源332.3.2CPU中断362.3.3分配外部中断源至CPU外部中断362.3.4屏蔽CPU的NMI类型中断372.3.5查询外部中断源当前的中断状态37 3复位和时钟38 3.1System复位383.1.1概述383.1.2复位源38 3.2系统时钟393.2.1概述393.2.2时钟源403.2.3CPU时钟403.2.4外设时钟413.2.4.1APB_CLK源413.2.4.2REF_TICK源413.2.4.3LEDC_SCLK源423.2.4.4APLL_SCLK源423.2.4.5PLL_D2_CLK源423.2.4.6时钟源注意事项423.2.5Wi-Fi BT时钟423.2.6RTC时钟423.2.7音频PLL43 4IO_MUX和GPIO交换矩阵(GPIO,IO_MUX)444.1概述44 4.2通过GPIO交换矩阵的外设输入454.2.1概述454.2.2功能描述454.2.3简单GPIO输入46 4.3通过GPIO交换矩阵的外设输出464.3.1概述464.3.2功能描述464.3.3简单GPIO输出47 4.4IO_MUX的直接I/O功能484.4.1概述484.4.2功能描述48 4.5RTC IO_MUX的低功耗和模拟I/O功能484.5.1概述484.5.2功能描述48 4.6Light-sleep模式管脚功能48 4.7Pad Hold特性49 4.8I/O Pad供电494.8.1VDD_SDIO电源域50 4.9外设信号列表50 4.10IO_MUX Pad列表55 4.11RTC_MUX管脚清单56 4.12寄存器列表574.12.1GPIO交换矩阵寄存器列表574.12.2IO MUX寄存器列表584.12.3RTC IO MUX寄存器列表59 4.13寄存器614.13.1GPIO交换矩阵寄存器614.13.2IO MUX寄存器694.13.3RTC IO MUX寄存器70 5DPort寄存器825.1概述82 5.2主要特性82 5.3功能描述825.3.1系统和存储器寄存器825.3.2复位和时钟寄存器825.3.3中断矩阵寄存器825.3.4DMA寄存器825.3.5MPU/MMU寄存器825.3.6APP_CPU控制器寄存器825.3.7外设时钟门控和复位83 5.4寄存器列表84 5.5寄存器916DMA控制器(DMA)107 6.1概述107 6.2特性107 6.3功能描述1076.3.1DMA引擎的架构1076.3.2链表108 6.4UART DMA(UDMA)控制器108 6.5SPI DMA控制器110 6.6I2S DMA控制器1117SPI控制器(SPI)112 7.1概述112 7.2SPI特征112 7.3GP-SPI接口1137.3.1GP-SPI四线全双工模式1137.3.2GP-SPI四线半双工模式1147.3.3GP-SPI三线半双工模式1147.3.4GP-SPI数据缓存115 7.4GP-SPI时钟控制1157.4.1GP-SPI时钟极性和时钟相位1157.4.2GP-SPI时序116 7.5并行QSPI接口1177.5.1并行QSPI接口通信格式117 7.6GP-SPI中断硬件1187.6.1SPI中断1187.6.2DMA中断118 7.7寄存器列表119 7.8寄存器1218SDIO从机控制器142 8.1概述142 8.2主要特性142 8.3功能描述1428.3.1SDIO Slave功能块图1428.3.2SDIO总线上的数据发送和接收1428.3.3寄存器访问1438.3.4DMA1438.3.5包的发送和接收流程1448.3.5.1Slave向Host发送包1448.3.5.2Slave从Host接收包1468.3.6SDIO总线时序1478.3.7中断1488.3.7.1Host侧中断1488.3.7.2Slave侧中断148 8.4寄存器列表149 8.5SLC寄存器150 8.6SLC Host寄存器159 8.7HINF寄存器1719SD/MMC主机控制器172 9.1概述172 9.2主要特性172 9.3SD/MMC外部接口信号172 9.4功能描述1739.4.1SD/MMC架构1739.4.1.1BIU模块1749.4.1.2CIU模块1749.4.2命令通路1749.4.3数据通路1759.4.3.1数据发送1759.4.3.2数据接收176 9.5CIU操作的软件限制176 9.6收发数据RAM1779.6.1发送RAM模块1779.6.2接收RAM模块177 9.7链表环结构177 9.8链表结构178 9.9初始化1809.9.1DMAC初始化1809.9.2DMAC数据发送初始化1809.9.3DMAC数据接收初始化181 9.10时钟相位选择181 9.11中断182 9.12寄存器列表182 9.13寄存器18310以太网(MAC)203 10.1概述203 10.2EMAC_CORE20510.2.1传输操作20510.2.1.1发送流量控制20510.2.1.2冲突期间的重新发送20610.2.2接收操作20610.2.2.1接收协议20610.2.2.2接收帧控制器20710.2.2.3接收流量控制20710.2.2.4接收多帧的操作处理20710.2.2.5错误处理20710.2.2.6接收状态字207 10.3MAC中断控制器208 10.4MAC地址的过滤20810.4.1单播目标地址过滤20810.4.2多播目标地址过滤20810.4.3广播地址过滤20810.4.4单播源地址过滤20810.4.5反向过滤操作20810.4.6好的发送帧与接收帧210 10.5EMAC_MTL(MAC传输层)210 10.6PHY接口21010.6.1MII(介质独立接口)21010.6.1.1MII与PHY间的接口信号21110.6.1.2MII时钟21210.6.2RMII(精简介质独立接口)21210.6.2.1RMII接口信号描述21310.6.2.2RMII时钟21310.6.3Station Management Agent(SMA)接口21410.6.4RMII接口时序要求214 10.7以太网DMA特性215 10.8链表描述符21510.8.1发送描述符21510.8.2接收描述符219 10.9寄存器列表224 10.10寄存器22511I2C控制器(I2C)260 11.1概述260 11.2主要特性260 11.3I2C功能描述26011.3.1I2C简介26011.3.2I2C架构26111.3.3I2C总线时序26211.3.4I2C cmd结构26211.3.5I2C主机写入从机26311.3.6I2C主机读取从机26711.3.7中断269 11.4寄存器列表269 11.5寄存器27112I2S控制器(I2S)281 12.1概述28112.2主要特性282 12.3I2S模块时钟283 12.4I2S模式28412.4.1支持的音频标准28412.4.1.1Philips标准28412.4.1.2MSB对齐标准28412.4.1.3PCM标准28512.4.2模块复位28512.4.3FIFO操作28512.4.4发送数据28512.4.5接收数据28712.4.6I2S主机/从机模式28812.4.7I2S PDM模式289 12.5Camera-LCD控制器29012.5.1LCD主机发送模式29112.5.2Camera从机接收模式29112.5.3ADC/DAC模式292 12.6I2S中断29312.6.1FIFO中断29312.6.2DMA中断294 12.7寄存器列表294 12.8寄存器29613UART控制器(UART)313 13.1概述313 13.2主要特性313 13.3功能描述31313.3.1UART简介31313.3.2UART架构31413.3.3UART RAM31513.3.4波特率检测31513.3.5UART数据帧31613.3.6流控31613.3.6.1硬件流控31713.3.6.2软件流控31713.3.7UDMA31813.3.8UART中断31813.3.9UHCI中断318 13.4寄存器列表31913.4.1UART寄存器31913.4.2UHCI寄存器320 13.5寄存器32214LED PWM控制器(LEDC)349 14.1概述349 14.2功能描述34914.2.1架构34914.2.2分频器35014.2.3通道35114.2.4中断352 14.3寄存器列表352 14.4寄存器35515红外遥控(RMT)364 15.1概述364 15.2功能描述36415.2.1RMT架构36415.2.2RMT RAM36515.2.3时钟36515.2.4发射器36515.2.5接收器36615.2.6中断366 15.3寄存器列表366 15.4寄存器36716电机控制脉宽调制器(PWM)372 16.1概述372 16.2主要特性372 16.3模块37416.3.1模块概述37416.3.1.1预分频器模块37416.3.1.2定时器模块37416.3.1.3操作器模块37516.3.1.4故障检测模块37716.3.1.5捕获模块37716.3.2PWM定时器模块37716.3.2.1PWM定时器模块的配置37716.3.2.2PWM定时器工作模式和定时事件生成37816.3.2.3PWM定时器影子寄存器38216.3.2.4PWM定时器同步和锁相38216.3.3PWM操作器模块38216.3.3.1PWM生成器模块38316.3.3.2死区生成器模块39316.3.3.3PWM载波模块39716.3.3.4故障处理器模块40016.3.4捕获模块40116.3.4.1介绍40116.3.4.2捕获定时器40116.3.4.3捕获通道402 16.4寄存器列表402 16.5寄存器40417脉冲计数器(PCNT)448 17.1概述448 17.2功能描述44817.2.1架构图44817.2.2计数器通道输入信号44917.2.3观察点44917.2.4举例44917.2.5溢出中断450 17.3寄存器列表450 17.4寄存器45218定时器组(TIMG)457 18.1概述457 18.2功能描述45718.2.116-bit预分频器45718.2.264-bit时基计数器45718.2.3报警产生45818.2.4MWDT45818.2.5中断458 18.3寄存器列表458 18.4寄存器46019看门狗定时器(WDT)467 19.1概述467 19.2主要特性467 19.3功能描述46719.3.1时钟46719.3.2运行过程46719.3.3写保护46819.3.4Flash启动保护46819.3.5寄存器46820eFuse控制器(eFuse)469 20.1概述469 20.2主要特性469 20.3功能描述46920.3.1结构46920.3.1.1系统参数efuse_wr_disable47020.3.1.2系统参数efuse_rd_disable47020.3.1.3系统参数coding_scheme47120.3.1.4系统参数BLK3_part_reserve47220.3.2烧写系统参数47220.3.3软件读取系统参数47520.3.4硬件模块使用系统参数47620.3.5中断476 20.4寄存器列表47720.5寄存器479 21双线汽车接口(TWAI)490 21.1概述490 21.2主要特性490 21.3功能性协议49021.3.1TWAI性能49021.3.2TWAI报文49121.3.2.1数据帧和远程帧49221.3.2.2错误帧和过载帧49421.3.2.3帧间距49521.3.3TWAI错误49621.3.3.1错误类型49621.3.3.2错误状态49621.3.3.3错误计数49621.3.4TWAI位时序49721.3.4.1名义位49721.3.4.2硬同步与再同步498 21.4结构概述49921.4.1寄存器模块49921.4.2位流处理器50021.4.3错误管理逻辑50021.4.4位时序逻辑50021.4.5接收滤波器50021.4.6接收FIFO500 21.5功能描述50021.5.1模式50021.5.1.1复位模式50121.5.1.2操作模式50121.5.2位时序50121.5.3中断管理50221.5.3.1接收中断(RXI)50221.5.3.2发送中断(TXI)50221.5.3.3错误报警中断(EWI)50221.5.3.4数据溢出中断(DOI)50321.5.3.5被动错误中断(TXI)50321.5.3.6仲裁丢失中断(ALI)50321.5.3.7总线错误中断(BEI)50321.5.4发送缓冲器与接收缓冲器50321.5.4.1缓冲器概述50321.5.4.2帧信息50421.5.4.3帧标识符50421.5.4.4帧数据50521.5.5接收FIFO和数据溢出50521.5.6接收滤波器50621.5.6.1单滤波模式50621.5.6.2双滤波模式50721.5.7错误管理50721.5.7.1错误报警限制50921.5.7.2被动错误50921.5.7.3离线状态与离线恢复50921.5.8错误捕捉50921.5.9仲裁丢失捕捉510 21.6寄存器列表511 21.7寄存器51222AES加速器(AES)524 22.1概述524 22.2主要特性524 22.3功能描述52422.3.1运算模式52422.3.2密钥、明文、密文52422.3.3字节序52422.3.4加密与解密运算52722.3.5运行效率527 22.4寄存器列表527 22.5寄存器52823SHA加速器(SHA)530 23.1概述530 23.2主要特性530 23.3功能描述53023.3.1填充解析信息53023.3.2信息摘要53023.3.3哈希运算53023.3.4运行效率531 23.4寄存器列表531 23.5寄存器53324RSA加速器(RSA)538 24.1概述538 24.2主要特性538 24.3功能描述53824.3.1初始化53824.3.2大数模幂运算53824.3.3大数模乘运算53924.3.4大数乘法运算540 24.4寄存器列表541 24.5寄存器54225随机数发生器(RNG)544 25.1概述54425.2主要特性544 25.3功能描述544 25.4编程指南544 25.5寄存器列表545 25.6寄存器54526片外存储器加密与解密(FLASH)546 26.1概述546 26.2主要特性546 26.3功能描述54626.3.1Key Generator模块54726.3.2Flash Encryption模块54726.3.3Flash Decryption模块548 26.4寄存器列表548 26.5寄存器54827存储器管理和保护单元(MMU,MPU)550 27.1概述550 27.2主要特性550 27.3功能描述55027.3.1PID控制器55027.3.2MPU/MMU55027.3.2.1嵌入式存储器55027.3.2.2片外存储器55727.3.2.3外设56228PID控制器(PID)564 28.1概述564 28.2主要特性564 28.3功能描述56428.3.1中断识别56428.3.2信息记录56528.3.3进程主动切换进程567 28.4寄存器列表568 28.5寄存器57029片上传感器与模拟信号处理574 29.1概述574 29.2电容式触摸传感器57429.2.1简介57429.2.2主要特性57429.2.3可用通用输入输出接口57529.2.4功能描述57529.2.5触发传感器的状态机575 29.3SAR ADC57729.3.1简介57729.3.2主要特性57829.3.3功能概况57829.3.4RTC SAR ADC控制器58029.3.5DIG SAR ADC控制器580 29.4霍尔传感器58229.4.1简介58229.4.2主要特性58229.4.3功能描述582 29.5数字模拟转换器58329.5.1简介58329.5.2主要特性58329.5.3结构58329.5.4余弦波形生成器58429.5.5支持DMA584 29.6寄存器列表58529.6.1传感器58529.6.2外围总线58629.6.3RTC I/O586 29.7寄存器58729.7.1传感器58729.7.2高级外围总线59629.7.3RTC I/O600 30超低功耗协处理器(ULP)601 30.1概述601 30.2主要特性601 30.3功能描述602 30.4指令集60230.4.1ALU-算数与逻辑运算60230.4.1.1对寄存器数值的运算60330.4.1.2对指令立即值的运算60330.4.1.3对阶段计数器寄存器数值的运算60430.4.2ST–存储数据至内存60530.4.3LD–从内存加载数据60530.4.4JUMP–跳转至绝对地址60630.4.5JUMPR–跳转至相对地址(基于R0寄存器判断)60630.4.6JUMPS–跳转至相对地址(基于阶段计数器寄存器判断)60730.4.7HALT–结束程序60730.4.8WAKE–唤醒芯片60730.4.9SLEEP–设置硬件计时器的唤醒周期60830.4.10WAIT–等待若干个周期60830.4.11ADC–对ADC进行测量60830.4.12I2C_RD/I2C_WR–读/写I²C60930.4.13REG_RD–从外围寄存器读取60930.4.14REG_WR–写入外围寄存器610 30.5ULP协处理器程序的执行61030.6RTC_I2C控制器61230.6.1配置RTC_I2C61230.6.2使用RTC_I2C61330.6.2.1I2C_RD-读取单个字节61330.6.2.2I2C_WR-写入单个字节61330.6.2.3检测错误条件61430.6.2.4连接I²C信号614 30.7寄存器列表61430.7.1SENS_ULP地址空间61430.7.2RTC_I2C地址空间615 30.8寄存器61530.8.1SENS_ULP地址空间61530.8.2RTC_I2C地址空间61831低功耗管理(RTC_CNTL)624 31.1概述624 31.2主要特性624 31.3功能描述62431.3.1简介62531.3.2数字内核调压器62531.3.3低功耗调压器62531.3.4Flash调压器62631.3.5欠压检测器62731.3.6RTC模块62731.3.7低功耗时钟62831.3.8电源门控的实现63031.3.9预设功耗模式63131.3.10唤醒源63331.3.11RTC计时器63331.3.12RTC Boot633 31.4寄存器列表635 31.5寄存器637词汇列表661外设相关词汇661寄存器相关词汇661修订历史662表格1-1地址映射26 1-2片上寄存器地址映射27 1-3具有DMA功能的模块29 1-4片外存储器地址映射29 1-5Cache memory模式30 1-6外设地址映射31 2-1PRO_CPU、APP_CPU外部中断配置寄存器、外部中断源中断状态寄存器、外部中断源34 2-2CPU中断36 3-1PRO_CPU和APP_CPU复位源38 3-2CPU_CLK源40 3-3CPU_CLK源40 3-4外设时钟用法41 3-5APB_CLK源41 3-6REF_TICK源41 3-7LEDC_SCLK源42 4-1IO_MUX Light-sleep管脚功能寄存器48 4-2GPIO交换矩阵外设信号50 4-3IO_MUX Pad列表55 4-4RTC_MUX管脚清单56 7-1管脚功能信号与总线信号映射关系112 7-2从机命令描述114 7-3主机模式时钟极性和相位控制寄存器值116 7-4从机模式时钟极性和相位控制寄存器值116 9-1SD/MMC管脚描述173 9-2DES0链表描述178 9-3DES1179 9-4DES2180 9-5DES3180 10-1目标地址过滤209 10-2源地址过滤209 10-3接收数据时序要求214 10-4发送数据时序要求215 10-5发送描述符0(TDES0)216 10-6发送描述符1(TDES1)218 10-7发送描述符2(TDES2)219 10-8发送描述符3(TDES3)219 10-9发送描述符6(TDES6)219 10-10发送描述符7(TDES7)219 10-11接收描述符0(RDES0)220 10-12接收描述符1(RDES1)221 10-13接收描述符2(RDES2)222 10-14接收描述符3(RDES3)222 10-15接收描述符4(RDES4)22210-16接收描述符6(RDES6)223 10-17接收描述符7(RDES7)224 11-1SCL频率配置262 12-1I2S信号总线描述282 12-2寄存器配置286 12-3发送通道模式286 12-4接收数据写入FIFO模式和对应寄存器配置287 12-54种模式对应寄存器配置288 12-6过采样率配置289 12-7下采样配置290 14-1常用配置频率及精度350 16-1操作器模块的配置参数376 16-2PWM生成器中的所有定时事件384 16-3PWM定时器递增计数时,定时事件的优先级384 16-4PWM定时器递减计数时,定时事件的优先级385 16-5控制死区时间生成器开关的寄存器394 16-6死区生成器的典型操作模式395 20-1系统参数469 20-2BLOCK1/2/3编码471 20-3烧写寄存器472 20-4时序配置474 20-5软件读取寄存器475 21-1SFF和EFF中的数据帧和远程帧493 21-2错误帧494 21-3过载帧495 21-4帧间距495 21-5名义位时序中包含的段498 21-6TWAI_CLOCK_DIVIDER_REG的bit信息;TWAI地址0x18501 21-7TWAI_BUS_TIMING_1_REG的bit信息;TWAI地址0x1c501 21-8SFF与EFF的缓冲器布局503 21-9TX/RX帧信息(SFF/EFF);TWAI地址0x40504 21-10TX/RX标识符1(SFF);TWAI地址0x44505 21-11TX/RX标识符2(SFF);TWAI地址0x48505 21-12TX/RX标识符1(EFF);TWAI地址0x44505 21-13TX/RX标识符2(EFF);TWAI地址0x48505 21-14TX/RX标识符3(EFF);TWAI地址0x4c505 21-15TX/RX标识符4(EFF);TWAI地址0x50505 21-16TWAI_ERR_CODE_CAP_REG的bit信息;TWAI地址0x30509 21-17SEG.4-SEG.0的位信息510 21-18TWAI_ARB LOST CAP_REG中的位信息;TWAI地址0x2c511 22-1运算模式524 22-2AES文本字节序525 22-3AES-128密钥字节序526 22-4AES-192密钥字节序526 22-5AES-256密钥字节序526 27-1片上存储器的MPU和MMU结构55127-2管理RTC FAST Memory的MPU551 27-3管理RTC SLOW Memory的MPU551 27-4管理片上SRAM0和SRAM2剩余128KB的MMU页模式552 27-5SRAM0MMU页边界地址553 27-6SRAM2MMU页边界地址554 27-7DPORT_DMMU_TABLE n_REG和DPORT_IMMU_TABLE n_REG555 27-8针对DMA的MPU设置556 27-9片外存储器的虚地址557 27-10PRO_CPU的MMU配置项号558 27-11APP_CPU的MMU配置项号558 27-12PRO_CPU的MMU配置项号(特殊模式)558 27-13APP_CPU的MMU配置项号(特殊模式)559 27-14片外SRAM的虚拟地址模式560 27-15片外SRAM的虚地址(正常模式)560 27-16片外SRAM的虚地址(低-高模式)560 27-17片外SRAM的虚地址(偶-奇模式)561 27-18片外RAM的MMU配置项号561 27-19管理外设的MPU562 27-20DPORT_AHBLITE_MPU_TABLE_X_REG563 28-1中断向量入口地址565 28-2PIDCTRL_LEVEL_REG565 28-3PIDCTRL_FROM_n_REG566 29-1ESP32电容式触摸传感器的管脚575 29-2SAR ADC的信号输入579 29-3ESP32的SAR ADC控制器579 29-4样式表寄存器的字段信息581 29-5I型DMA数据格式582 29-6II型DMA数据格式582 30-1对寄存器数值的ALU运算603 30-2对指令立即值的ALU运算604 30-3对阶段计数器寄存器的ALU运算604 30-4ADC指令的输入信号608 31-1RTC电源域630 31-2唤醒源633插图1-1系统结构25 1-2地址映射结构25 1-3Cache系统框图30 2-1中断矩阵结构图33 3-1系统复位38 3-2系统时钟39 4-1IO_MUX、RTC IO_MUX和GPIO交换矩阵结构框图44 4-2通过IO_MUX、GPIO交换矩阵的外设输入45 4-3通过GPIO交换矩阵输出信号47 4-4ESP32I/O Pad供电源(QFN6*6,顶视图)49 4-5ESP32I/O Pad供电源(QFN5*5,顶视图)50 6-1DMA引擎的架构107 6-2链表结构图108 6-3UDMA模式数据传输109 6-4SPI DMA110 7-1SPI系统框图112 7-2SPI四线全双工/半双工通信113 7-3SPI数据缓存115 7-4GP-SPI从机数据输出117 7-5并行QSPI接口118 7-6并行QSPI接口的通信模式118 8-1SDIO Slave功能块图142 8-2SDIO总线上数据传输143 8-3CMD53内容143 8-4SDIO Slave DMA链表结构143 8-5链表串144 8-6Slave向Host发送包的流程145 8-7Slave从Host接收包的流程146 8-8Slave CPU挂载buffer的流程147 8-9采样时序图147 8-10输出时序图148 9-1SD/MMC外设连接的拓扑结构172 9-2SD/MMC外部接口信号173 9-3SD/MMC基本架构173 9-4命令通路状态机175 9-5数据传输状态机175 9-6数据接收状态机176 9-7链表环结构178 9-8链表结构178 9-9时钟相位选择181 10-1Ethernet MAC功能概述203 10-2Ethernet功能框图205 10-3MII接口21110-4MII时钟212 10-5RMII接口213 10-6RMII时钟214 10-7接收数据时序图214 10-8发送数据时序图215 10-9发送描述符215 10-10接收链表结构219 11-1I2C Master基本架构261 11-2I2C Slave基本架构261 11-3I2C时序图262 11-4I2C命令寄存器结构263 11-5I2C Master写7-bit地址Slave264 11-6I2C Master写10-bit地址Slave265 11-7I2C Master写7-bit地址Slave的M地址RAM265 11-8I2C Master分段写7-bit地址Slave266 11-9I2C Master读7-bit地址Slave267 11-10I2C Master读10-bit地址Slave267 11-11I2C Master从7-bit地址Slave的M地址读取N个数据268 11-12I2C Master分段读7-bit地址Slave269 12-1I2S系统框图281 12-2I2S时钟283 12-3Philips标准284 12-4MSB对齐标准284 12-5PCM标准285 12-6发送FIFO数据模式286 12-7第一阶段接收数据287 12-8接收数据写入FIFO模式288 12-9PDM发送模块289 12-10PDM发送信号290 12-11PDM接收信号290 12-12PDM接收模块290 12-13LCD主机发送模式291 12-14LCD主机发送数据帧格式1291 12-15LCD主机发送数据帧格式2291 12-16Camera从机接收模式292 12-17I2S的ADC接口292 12-18I2S的DAC接口293 12-19I2S DAC接口数据输入293 13-1UART基本架构图314 13-2UART共享RAM图315 13-3UART数据帧结构316 13-4AT_CMD字符格式316 13-5硬件流控图317 14-1LED_PWM架构349 14-2LED_PWM高速通道框图349 14-3LED_PWM分频器35014-4LED_PWM输出信号图351 14-5渐变占空比输出信号图351 15-1RMT架构364 15-2数据结构365 16-1MCPWM外设概览372 16-2预分频器模块374 16-3定时器模块374 16-4操作器模块375 16-5故障检测模块377 16-6捕获模块377 16-7递增计数模式波形378 16-8递减计数模式波形379 16-9递增递减循环模式波形,同步事件后递减379 16-10递增递减循环模式波形,同步事件后递增379 16-11递增模式中生成的UTEP和UTEZ380 16-12递减模式中生成的UTEP和UTEZ381 16-13递增递减模式中生成的UTEP和UTEZ382 16-14PWM操作器的子模块383 16-15递增递减模式下的对称波形386 16-16递增计数模式,单边不对称波形,PWM x A和PWM x B独立调制–高电平387 16-17递增计数模式,脉冲位置不对称波形,PWM x A独立调制388 16-18递增递减循环计数模式,双沿对称波形,在PWM x A和PWM x B上独立调制–高电平有效389 16-19递增递减循环计数模式,双沿对称波形,在PWM x A和PWM x B上独立调制–互补390 16-20NCI在PWM x A输出上软件强制事件示例391 16-21CNTU在PWM x B输出上软件强制事件示例392 16-22死区模块的开关拓扑394 16-23高电平有效互补(AHC)死区波形395 16-24低电平有效互补(ALC)死区波形395 16-25高电平有效(AH)死区波形396 16-26低电平有效(AL)死区波形396 16-27PWM载波操作的波形示例398 16-28载波模块的第一个脉冲和之后持续的脉冲示例399 16-29PWM载波模块中持续脉冲的7种占空比设置400 17-1PULSE_CNT单元基本架构图448 17-2PULSE_CNT递增计数图450 17-3PULSE_CNT递减计数图450 21-1数据帧和远程帧中的位域492 21-2错误帧中的位域494 21-3过载帧中的位域494 21-4帧间距中的域495 21-5位时序构成498 21-6TWAI概略图499 21-7接收滤波器506 21-8单滤波模式507 21-9双滤波模式508 21-10错误状态变化508乐鑫信息科技21ESP32技术参考手册(版本4.7)21-11丢失仲裁的bit位置511 25-1噪声源544 26-1Flash加解密模块架构546 27-1MMU访问示例552 28-1中断嵌套567 29-1触摸传感器574 29-2触摸传感器的内部结构575 29-3触摸传感器的工作流程576 29-4FSM的内部结构577 29-5SAR ADC的概况577 29-6SAR ADC的功能概况578 29-7RTC SAR ADC的功能概况580 29-8DIG SAR ADC控制器的概况581 29-9霍尔传感器的结构583 29-10DAC的功能概况584 29-11余弦波形生成器的工作流程585 30-1ULP协处理器基本架构601 30-2ULP协处理器的指令格式602 30-3指令类型-对寄存器数值的ALU运算603 30-4指令类型-对指令立即值的ALU运算603 30-5指令类型-对阶段计数器寄存器的ALU运算604 30-6指令类型-ST605 30-7指令类型-LD605 30-8指令类型-JUMP606 30-9指令类型-JUMPR606 30-10指令类型-JUMPS607 30-11指令类型-HALT607 30-12指令类型-WAKE607 30-13指令类型-SLEEP608 30-14指令类型-WAIT608 30-15指令类型-ADC608 30-16指令类型-I²C609 30-17指令类型-REG_RD609 30-18指令类型-REG_WR610 30-19ULP协处理器程序框图611 30-20ULP协处理器程序流控图612 30-21I2C读操作613 30-22I²C写操作614 31-1ESP32功耗控制示意图624 31-2数字内核调压器625 31-3低功耗调压器626 31-4Flash调压器627 31-5欠压检测器627 31-6RTC结构图628 31-7RTC低功耗时钟629 31-8数字低功耗时钟62931-9RTC状态630 31-10功耗模式632 31-11ESP32启动流程图6341系统和存储器1.1概述ESP32采用两个哈佛结构Xtensa LX6CPU构成双核系统。
esp32-cam开发环境搭建

esp32-cam开发环境搭建esp32-cam模组是安信可推出的⼀个很⼩的 wifi-摄像头模块开发⽅式可以选择arduinoIDE开发的⽅式也可以使⽤官⽅sdk IDF开发的⽅式,下⾯是使⽤虚拟机+ubuntu+IDF的开发环境搭建:下载虚拟机软件并安装,需要在最后安装的时候写上密钥密钥:5A02H-AU243-TZJ49-GTC7K-3C61N需要注意的是使⽤github下载的项⽬⼯程⽂件⼀直报错,最后我换了⼀个资源好使了,资源我已经放到下⾯链接了。
虚拟机软件链接:https:///s/1b2mHB1hVeJ870-EwFSTiRA提取码:nnkh下载安信可官⽅的ubuntu镜像完成后在虚拟机界⾯添加新的虚拟机ubuntu镜像链接:https:///s/1x5MxoNQHYeNnxccrJHUHXg提取码:siw8下载官⽅sdk下esp_demo⼯程,复制到主⽂件夹下官⽅下载链接:https:///donny681/ESP32_CAMERA_QR⽹盘链接:链接:https:///s/1IAbHOX8sLS5Fe9h0GO8-5Q提取码:e52e下载完成后在项⽬⽬录下打开终端,输⼊make menuconfig 开始配置1.将serialport配置为ttyUSB0,2.ESP32 Camera Demo Configuration菜单下配置WiFi信息配置完成后输⼊make all开始编译编译成功后输出以下信息,To flash all build output, run 'make flash' or:python /home/ai-thinker/esp/esp-idf/components/esptool_py/esptool/esptool.py--chip esp32--port /dev/ttyUSB0--baud 115200--before default_reset--after hard_reset write_flash -z--flash_mode dio --flash_freq 40m--flash_size detect0x1000 /home/ai-thinker/esp_demo/ESP32_CAMERA_QR-master/build/bootloader/bootloader.bin0x10000 /home/ai-thinker/esp_demo/ESP32_CAMERA_QR-master/build/esp32-cam-demo.bin0x8000 /home/ai-thinker/esp_demo/ESP32_CAMERA_QR-master/build/partitions_singleapp.bin烧录可以使⽤安信可esp32烧录⼯具,烧录⼯具配置就选择和上⾯打印⼀样的配置⽅案。
000-ESP32学习开发-ESP32烧录板使用说明

000-ESP32学习开发-ESP32烧录板使⽤说明
<p><iframe name="ifd" src="https:///resource/cnblogs/LearnESP32" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
原理图
实物图(模组可拆卸)
烧录固件程序
1.开发板使⽤的串⼝芯⽚为 CH340C,如果没有安装过CH340驱动,需要安装驱动
2.安装步骤
3.使⽤USB线(Micro)连接开发板,短接跳线帽
注:按照下图短接跳线帽是电脑串⼝和模组的串⼝0通讯
4.如果电脑提⽰安装硬件驱动 ,等待安装完成,然后右击 "我的电脑" 选择管理
5.点击设备管理器,点击端⼝查看当前电脑和开发板通信的端⼝号我的为 COM4 (不同的电脑端⼝号不⼀样,只要有端⼝号就可以)
6.打开烧录软件
7.选择固件
注:此固件为模组⾃⾝默认的AT指令固件
8.按照下图选择,然后点击 START
注:波特率根据⾃⼰电脑的⽀持调整,波特率越⾼下载速度越快.
测试AT指令
注:如果刚烧写完程序,记得先复位下.
1.跳线帽短接如下
2.打开串⼝调试助⼿,发送AT。
关于esp32的系统初始化启动过程及设计学习方法

关于esp32的系统初始化启动过程及设计学习⽅法对于esp32,其开发程序中有且只能有⼀个app_main函数,该函数是⽤户程序的⼊⼝,这在没有调⽤FreeRTOS的系统中相当于函数main,但其实在app_main之前,系统还有⼀段初始化的过程,其⼤致可以分为以下三个过程:ROM中的第⼀级引导加载程序将闪存偏移0x1000的第⼆级引导加载程序映像加载到RAM(IRAM和DRAM)。
第⼆级引导程序从闪存加载分区表和主应⽤程序映像。
主应⽤程序包含RAM段和通过闪存缓存映射的只读段。
主应⽤程序图像执⾏。
此时可以启动第⼆个CPU和RTOS调度程序。
以下将详细介绍这三个过程STEP1:第⼀阶段引导程序 系统first-stage bootload启动,对于系统的first-stage bootloader,其主要任务是负责从Flash的地址0X1000开始加载bootloader镜像到RAM中(此⼯程的bootloader⽂件由esp-idf中的component ⽬录下的bootloader\subproject\main\bootloader_start.c可以查看源码),在SoC复位后,PRO CPU将⽴即开始运⾏,执⾏复位向量代码,⽽APP CPU将保持复位。
在启动过程中,PRO CPU执⾏所有初始化。
call_start_cpu0应⽤程序启动代码功能中的APP CPU复位被取消置位。
复位向量代码位于ESP32芯⽚掩码ROM中的地址0x40000400,不能修改。
从复位向量调⽤的启动代码通过检查GPIO_STRAP_REG(gpio_reg.h定义的)引导引脚状态的寄存器来确定引导模式。
根据复位原因,发⽣以下情况:从深度睡眠复位:如果值为RTC_CNTL_STORE6_REG⾮零,并且RTC存储器的CRC值RTC_CNTL_STORE7_REG有效,RTC_CNTL_STORE6_REG则将其⽤作⼊⼝点地址并⽴即跳转到其中。
LINUX安装32位运行库【LINUX配置YUM源的几种办法】

很多时候我们需要用linux运行或测试程序,然而我们发现64位linux系统在检测32位程序的动态链接库文件时(也就是ldd一个so文件)会报错:不是动态可执行文件【或英文提示:not a dynamic executable file】这是因为系统没有安装32位兼容库的缘故,我们分两大方法解决这个问题→有网络/无网络一、当前使用linux系统已连接网络情况下,可进行在线安装yum在线安装:sudo yum install xulrunner.i686或:sudo yum install ia32-libs.i686Ubuntu系统:sudo apt-get install ia32-libs但是在这里要附带说明一下,RedHat系统默认是需要注册才能使用yum的在线安装功能的,如果没有注册系统会提示:This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.如果您不想花钱注册,请参考B计划:【使用CentOS的网络资源配置yum源】备份原repo文件:mv /etc/yum.repos.d/rhel-debuginfo.repo/etc/yum.repos.d/rhel-debuginfo.repo.repo.bak编辑repo文件:vi /etc/yum.repos.d/rhel-debuginfo.repo内容为:[base]name=CentOS-$releasever - Basebaseurl=/centos/6.0/os/$basearch/gpgcheck=1gpgkey=/centos/RPM-GPG-KEY-CentOS-6#released updates[updates]name=CentOS-$releasever - Updatesbaseurl=/centos/6.0/updates/$basearch/gpgcheck=1gpgkey=/centos/RPM-GPG-KEY-CentOS-6#packages used/produced in the build but not released#[addons] #name=CentOS-$releasever - Addons#baseurl=/centos/$releasever/addons/$basearch/#gpgcheck=1#gpgkey=/centos/RPM-GPG-KEY-CentOS-6#additional packages that may be useful[extras]name=CentOS-$releasever - Extrasbaseurl=/centos/6.0/extras/$basearch/gpgcheck=1gpgkey=/centos/RPM-GPG-KEY-CentOS-6#additional packages that extend functionality of existing packages [centosplus]name=CentOS-$releasever - Plusbaseurl=/centos/6.0/centosplus/$basearch/gpgcheck=1enabled=0编辑完成后使用:yum clean all清理yum包使用yum install vim或yum install xulrunner.i686 命令安装32位运行库二、所使用的linux系统为封闭式网路,无法连接外网这种情况下我们需要有安装光盘,也就是安装当前linux系统所使用的安装光盘,也可以分为两种情况1): 使用iso镜像文件挂载1.创建iso存放目录和挂载目录mkdir /mnt/iso mkdir/mnt/cdrom2. 将iso镜像文件复制到/mnt/iso文件夹下3. 将/mnt/iso/下的iso文件挂载到/mnt/cdrom目录 mount -o loop /mnt/iso/XXXXX.iso /mnt/cdrom <注:挂载完之后对其操作会提示设备繁忙,此时需要umount解开挂载才行> 查看是否挂载成功:df -h <用来查看系统中所有挂载的,mount也可以>4. cd /etc/yum.repos.d/==> 创建自己的.repo文件touch myself.repo ==> vi myself.repo[base]name=RedHatbaseurl=file:///mnt/cdrom #注:这里的baseurl就是你挂载的目录,在这里是/mnt/cdromenabled=1gpgckeck=0gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release #注:此参数可以cd /mnt/cdrom/看到,此参数仅供参考5. 测试:yum clean all ==> yum install vim*如果无效则使用 yum install xulrunner.i6862:)使用已挂载的镜像文件配置yum源【光盘已经挂载在media文件中,显示的是已经解压的iso镜像文件】1. 挂载光盘mount /dev/cdrom /media 通常会提示:mount: block device /dev/sr0 is write-protected, mountingread-only意思是当前光盘是以只读方式挂载的,可以忽略,你也可以添加参数挂载:mount -ro -loop /dev/cdrom /media #以只读方式挂载,就不会报错了2. 建立yum配置文件vi /etc/yum.repos.d/local.repo 内容如下:[base]name=linux6baseurl=file:///mediagpgcheck=0enable=1gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release3. 修改YUM源地址vi/usr/lib/python2.6/site-packages/yum/yumRepo.py在末行模式下(也就是输入状态下按了ESC的状态),输入/remote可以查找remote单词找到 remote = url +'/' + relative 修改为:remote = '/yum' + relative4. 测试:yum clean all 安装: yum install vim*或者使用yum install xulrunner.i686如果系统在安装一大堆的i686包就代表完成了附录:yum说明[yum常用命令]Yum(全称为Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。
Linux服务器搭建步骤详解

Linux服务器搭建步骤详解Linux服务器是互联网技术领域中广泛应用的服务器操作系统。
本文将详细介绍Linux服务器搭建的步骤,以帮助读者快速、准确地搭建自己的服务器。
第一步:选择Linux发行版在搭建Linux服务器之前,需要根据自己的需求选择合适的Linux发行版。
常见的Linux发行版有Ubuntu、CentOS、Debian等。
每个发行版都有其特点和适用场景,因此根据服务器用途选择合适的Linux发行版非常重要。
第二步:准备服务器硬件环境在搭建Linux服务器之前,确保服务器的硬件环境符合要求。
需要留意的硬件包括服务器的处理器、内存、硬盘空间以及网络接口等。
确保硬件环境能够满足服务器的运行需求,以免影响服务器性能。
第三步:安装Linux发行版在准备好硬件环境后,接下来是安装所选择的Linux发行版。
这通常通过光盘、USB安装介质或者通过网络进行安装。
根据所选发行版的提供的安装方法进行操作,按照提示完成安装过程。
第四步:安全设置安装完成后,要进行一些基本的安全设置,以保护服务器的安全性。
首先是更新系统内核和软件包到最新版本,这能够修复已知的安全漏洞。
其次,设置防火墙规则以限制对服务器的访问。
还可以配置SSH登录限制和安装入侵检测工具等,以增加服务器的安全性。
第五步:安装服务器软件接下来,根据服务器的用途安装相应的软件。
例如,如果服务器用于网站托管,可以安装Web服务器软件如Apache或Nginx,数据库软件如MySQL或PostgreSQL;如果服务器用于邮件服务,可以安装邮件服务器软件如Postfix或Sendmail。
根据需求选择并安装合适的服务器软件。
第六步:配置服务器软件安装完成后,需要对所安装的服务器软件进行配置。
服务器软件的配置文件通常位于/etc目录下,通过编辑配置文件来配置服务器的参数和选项。
例如,对于Web服务器软件,可以设置虚拟主机、目录索引、缓存机制等。
根据需要,对服务器软件进行个性化配置以满足自己的需求。
Arduino配置ESP32开发环境

Arduino配置ESP32开发环境⼊⼿ESP32板⼦⼀块,准备使⽤Arduino IDE作为开发⼯具。
1、安装Arduino IDE下载后,⼀直点击下⼀步完成安装,安装过程中会弹出“驱动安装”的选项,点击安装即可。
⼆、安装ESP32开发⼯具包下载完整⼯程,如果下载较慢,可⽤“码云”把仓库拉⼀下。
找到Arduino IDE的安装路径,我安装的路径是D:\program\Arduino,找到hardware⽂件夹,进⼊新建⽂件夹espressif,再进⼊espressif⽂件夹,再新建⽂件夹esp32。
进⼊esp32⽂件夹,将github下载的压缩包解压,内容复制到esp32⽂件夹中。
进⼊tools⽂件夹,在电脑安装python的前提下,点击get.exe下载依赖库。
下载速度⾮常缓慢,为解决这个问题,我们打开esp32⽬录下的package⽂件夹,⾥⾯有⼀个叫做package_esp32_index.template.json的⽂件,打开找到以下三处:复制链接在迅雷中下载,⼏秒钟下载完成,我们得到三个压缩⽂件,esptool-3.0.0.2-windows.zip、mkspiffs-0.2.3-arduino-esp32-win32.zip、xtensa-esp32-elf-win32-1.22.0-97-gc752ad5-5.2.0.zip然后进⼊esp32⽬录下的tools⽂件夹,将三个压缩包解压放在tools⽬录下,如图:打开Arduino IDE,选择⼯具->开发板,找到ESP32 Dev Module即可开发ESP32程序。
下载zip解压覆盖到Arduino\hardware\espressif\esp32\libraries\AzureIoT⽬录下即可。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统:Ubuntu32
1、打开shell,输入mkdir esp创建esp目录;输入mkdir download,创建download文件夹,输入ls检查是否创建成功
2、输入cd download/进入download目录;
输入wget https:///dl/xtensa-esp32-elf-linux32-1.22.0-59.tar.gz下载linux32为系统下的工具链
3、输入tar -xzf xtensa-esp32-elf-linux32-1.22.0-59.tar.gz解压工具链,会在download目录下产生一个xtensa-esp32-elf文件夹,然后输入mv xtensa-esp32-elf ~/esp/将此文件夹移动到~/esp/目录下
4、输入
export PATH=$PATH:$HOME/esp/xtensa-esp32-elf/bin添加环境变量。
alias get_esp32="export PATH=$PATH:$HOME/esp/xtensa-esp32-elf/bin" 使环境变量永久生效
添加环境变量。
输入nano ~/.bashrc,编辑bashrc文件,粘贴
export PATH=$PATH:$HOME/esp/xtensa-esp32-elf/bin到bashrc文件的最后一行,这样就可以将工具链bin目录添加到环境变量中,按ctr+x,退出编辑输入y确认。
这样电脑重启后环境变量依然有效
5、输入cd ~/esp/进入esp目录,输入git clone --recursive https:///espressif/esp-idf.git 克隆esp_idf固件库
6、输入cd ~/esp/esp-idf 进入esp_idf目录,输入git submodule update –init 初始化sdk。
7、输入cd examples/01_hello_world/进入历程中得hello_world工程。
输入
export IDF_PATH=~/esp/esp-idf,添加环境变量。
添加环境变量。
输入nano ~/.bashrc,编辑bashrc文件,粘贴
export IDF_PATH=~/esp/esp-idf到bashrc文件的最后一行,这样就可以将工具链bin目录添加到环境变量中,按ctr+x,退出编辑输入y确认。
这样电脑重启后环境变量依然有效
输入
8、请将你的USB转串口工具插入电脑,然后选择虚拟工具栏的设备->USB->CP2102的设备(此处因芯片不同而不同,选择正确的工具即可),千万不要选错了,最开始可能只有一个错误的选项,我多插拔几次,重启了几次虚拟机正确的选项才出来,而且不可选,重启虚拟机
如果是出现上图的情况,是无法正常工作的。
正确的串口识别。
9、输入ls /dev/ttyU*,查看USB转串口设备的名称,查询到的设备名称为/dev/ttyUSB0
10、输入make menuconfig,编辑配置文件,使用向下的方向键选择Serial flasher config,按下回车键,检测串口设备名称是否和刚刚查询到的串口设备名称是否一致,如果一致,直接按向右方向键、回车、向右方向键、回车。
退出config。
如果不一致请直接按回车修改设备名称为查询得到的设备名称。
然后退出config。
11、确保你的模块已经上电,GPIO0/DL引脚为低电平,按下复位键,使模块进入串口boot 并等待上位机链接,下载程序。
12、就差最后一步了。
输入make flash,等着编译完成后会自动的调用python脚本进行下载了。
下载完成后把GPIO0/DL引脚设为高电平,按复位键就可以了。