VSCode搭建ESP32开发环境
在Win10下搭建VSCode+ESP32开发调试环境,实现串口以及JTAG烧录调试,包含一键自动编译烧录调试,实现优雅地开发ESP32。本篇文章使用ESP32-S3模组进行测试,因为S3自带USB转JTAG调试功能;如果只使用串口烧录调试则所有ESP系列芯片通用。
1.硬件准备
ESP32-S3-WROOM
开发板(双Type-C接口:一个USB转串口,一个USB转JTAG)- 示波器,测量引脚输出波形
2.VSCode安装ESP-IDF插件
2.1 根据ESP-IDF插件提示安装环境
完全按照ESP-IDF的提示进行安装即可,基本上全自动,全程开启代理确保下载速度最优
- 选择侧边栏
ESP-IDF
选项卡 - 选择
Configure ESP-IDF Extension
- 选择
EXPRESS
(也可以根据个人实际情况选择安装模式) - 选择下载的服务器以及
ESP-IDF
的版本,一般默认选择最新的,安装路径需要注意:将所有Administrator
替换为自己的英文用户名,比如Orionxer
,尽量避免权限问题 - 慢慢等待安装结束,大约需要30分钟左右,VSCode会提示下载安装过程
2.2 新建项目
- ESP-IDF选项卡侧边栏选择
Show Examples
- 选择默认的
ESP-IDF
环境 - 创建
blink
项目,选择项目文件夹以保存
2.3 选择目标芯片
点击底部栏的Set Espressif Target(IDF_TARGET)
选择目标芯片
- 选择工程
blink
- 选择
esps3
- 选择
ESP32-S3 Chip (via built-in USB-JTAG)
2.4 编译项目
点击底部栏的编译按钮,第一次编译的时间会稍长,后续如果修改了项目的Configuration
(即menuconfig)也会导致编译时间变长。编译成功后会输出RAM/ROM信息。
如果VSCode在c_cpp_properties.json
文件中提示Cannot find "${env:IDF_TOOLS_PATH}
等类似错误,
找到compilerPath
键值对,将config:idf.toolsPath
修改为config:idf.toolsPathWin
即可
3.串口
3.1 烧录
使用串口烧录前需要将丝印COM
接入电脑,正常情况下Win10会自动安装驱动,并识别出正确的端口、选择该端口,比如COM8
,点击烧录。
3.2 监控
点击监控按钮,ESP-IDF
启动串口监控命令行界面,可以观察到每秒打印一个日志。快捷键Ctrl + ]
退出串口监控。
3.3 一键编译烧录监控
ESP-IDF
针对串口方式,提供了一键编译烧录监控的按钮,方便快速调试验证。
3.4 提升烧录速度
在烧录过程中,如果不指定波特率,则烧录速度会默认为460800bps
。可以通过settings.json
文件修改键值对"idf.flashBaudRate"
的值,提升烧录速度,最高速度取决于USB转串口芯片最大支持的波特率。
3.4.1 ESP32-S3
以ESP32-S3-WROOM
开发板为例,板载CH343PUSB转串口芯片,根据该芯片的数据手册,理论波特率最高能设置为6Mbps
[1],修改为4000000
即4Mbps
可以烧录。
1 |
|
1 |
|
实测修改为6000000
即6Mbps
,无法烧录,待验证…
3.4.2 ESP32
以ESP-WROOM-32
开发板为例,板载CP2102的USB转串口芯片,根据该芯片的数据手册,理论波特率最高能设置为1Mbps
[2]。实测修改为1000000
即1Mbps
,无法烧录,只是921600bps
相当接近于1Mbps
。
1 |
|
保存并尝试烧录,可以看到终端提示烧录的速度是921600
4.JTAG
ESP32-S3
模组自带USB转JTAG功能,配合OpenOCD
能够实现烧录调试功能。调试功能一般用于不方便串口打印的场景,比如中断函数;另外定位HardFault
原因比如指针越界访问等问题也会更加精准。
4.1 更换驱动
将丝印USB的TypeC接口接入电脑。
4.1.1 下载Zadig
进入Zadig软件官网下载,安装并打开。
4.1.2 选择接口
- 点击
Options
,选择List All Devices
- 选择
USB JTAG/serial debug unit(Interface 0)
接口,注意一定要选择Interface 0接口 - 目的驱动选择
USB Serial CDC
- 点击Replace Driver
更换驱动成功后,重新插拔TypeC接口。设备管理器界面中,Interface 0
出现在端口(COM和LPT)处,说明驱动更换成功。
该驱动更换仅针对特定的USB端口,如果下次接入的其他的USB端口,则需要再次更换驱动。
4.2 修改优化等级
进入调试前,确保编译项目的优化等级为-OG,否则调试容易出现无法打断点以及断点位置偏移等问题。
- 点击底部栏配置按钮(menuconfig)
- 输入
optimization
,将Size (-Os)
修改为Size (-OG)
- 点击
Save
,重新编译
4.3 烧录
- 点击底部栏的烧录方式,选择
JTAG
- 点击启动
OpenOCD
。如果OpenOCD
启动失败可以尝试重启电脑。 - 点击烧录,等待提示烧录成功。(启动
OpenOCD
等待几秒之后再开始烧录)
修改代码后,进入调试前必须编译并且下载,否则调试容易出现异常。
4.4 启动调试
1 |
|
重新编译烧录,在blink_example_main.c
文件下按下F5
尝试启动调试。一般VSCode会自动生成luanch.json
文件配置,如果没有则复制以下的完整示例。
1 |
|
1 |
|
实测JTAG调试经常启动失败,失败报错原因:Debug adapter -> Extension: DEBUG_ADAPTER_READY2CONNECT
。如果调试启动失败则多试几次,直至成功为止。暂未找到解决问题的办法。
4.5 波形测量
4.5.1 100Hz滴答
blink
项目默认配置了GPIO48
为GPIO输出引脚,且FreeRTOS的滴答频率是100Hz,即中断时间是10ms。修改Blink LED type
为GPIO
,编译烧录,示波器测量GPIO48
引脚,波形如下:
根据上述代码分析,vTaskDelay(1);
代表延迟一个滴答时间。理论上GPIO48
在延迟10ms后会翻转电平。通过测量正脉宽参数可以验证该结论。
4.5.1 1KHz滴答
在不修改以上测试代码的前提下,修改项目配置的滴答频率为1000Hz
,重新编译烧录,再次测量该引脚,此时正脉宽应该是1ms。此时vTaskDelay(1);
依然代表延迟一个滴答时间,只是该滴答时间为1ms。
5.快捷键
合理使用快捷键能够有效提高效率,ESP-IDF的快捷键有点特殊,比如根据ESP-IDf的插件说明:编译项目快捷键是Ctrl E B
,则按住Ctrl + E
,松开,再按B
,才能正确触发快捷键
常用的快捷键参考
快捷键 | 英文 | 中文 |
---|---|---|
Ctrl + E + B |
Build your project | 编译 |
Ctrl + E + F |
Flash your project | 烧录 |
Ctrl + E + M |
Monitor your device | 监控 |
Ctrl + E + D |
Build, Flash and start a monitor on your device | 编译烧录监控 |