ESP-IDF使用记录
1. 工程
1.1 工程编译和修改
- 一定记得,工程只能每次做一次小改,改完编译通过了才能进行下一步操作,一次修改太多,必报错,因为工程中存在各种校验
- 比如:修改使用的芯片,一定要将当前的工程编译通过后,然后修改到想要的初步状态,编译通过,再换芯片,再次编译
1.2 工程添加文件
- 在对应的目录下的
CMakeLists.txt下添加对应的目录和文件 - 参考:ESP32 IDF 给工程新增文件夹与源文件
1.3 工程添加现有组件
- 参考:IDF 组件管理器
- 组件库:The ESP Component Registry
- 组件参考:espressif/led_strip
- 添加组件:到vscode的下面输出串口那里,找到终端,然后输入指令,这里用的led_strip
idf.py add-dependency "espressif/led_strip^3.0.0"
- 添加完组件,会在
main目录下的idf_componet.yml文件中看到,不需要的组件可以注释掉

- 注意:如果工程中,一个组件都没有,要把
idf_componet.yml文件删掉,留下个空的文件会编译不通过
2. 代码
2.1 整体使用
- 整个代码是跑在FreeRTOS上的,自己加的代码,就相当于RTOS里面的一个默认的任务,实际写代码完全可以和写裸机代码一样的写,反而是多了很多现成的接口可以用,反而更简单
- 延时使用
vTaskDelay(1000 / portTICK_PERIOD_MS);,系统自动处理延时,而不是加死等 - 由于ESP-IDF的接口都封装了很多层,实际运行起来,并没有使用裸机的程序直接操作IO口的响应速度快,实际体验就是,不用DMA,直接挨个发送数据刷屏,并不会比stm32用同样方式块
- 需要速度快的地方都得用DMA,代码处理慢主要是API把很多硬件操作包了太多层,看着一行代码,实际执行,十条指令打不住,甚至上百
2.2 代码里面的工具
- 错误返回的结构
ESP_RETURN_ON_ERROR
返回如果出错,就直接return退出并报错
/**
* Macro which can be used to check the error code. If the code is not ESP_OK, it prints the message and returns.
*/
#define ESP_RETURN_ON_ERROR(x, log_tag, format, ...) do { \
esp_err_t err_rc_ = (x); \
if (unlikely(err_rc_ != ESP_OK)) { \
ESP_LOGE(log_tag, "%s(%d): " format, __FUNCTION__, __LINE__ __VA_OPT__(,) __VA_ARGS__); \
return err_rc_; \
} \
} while(0)
使用
ESP_RETURN_ON_ERROR(i2c_read_bytes(tp, POINT_BUFFER_INDEX, pointdata, 14), TAG, "I2C read failed");
3. VSCODE+ESPIDF的使用
3.1 ESP-IDF暂停打印
-
打印如果不停下来,就一直滚动个不停,很难看到
-
使用
CTRL+]快捷键,可以关闭打印,然后就能停下来看打印

-
方向键向上,然后回车,就能重新打开打印,芯片复位后重新跑起来

-
这样操作还能复位然后重新运行芯片
-
总结:两个功能,停止打印和软件重新运行
3.2 ESP-IDF无法找到定义
-
打开工程后,头文件下面都有个波浪线,表示编辑器找不到文件

-
库函数都找不到定义

-
解决方案:查看----命令面板----ESP-IDF:Add VS Code Configuration Folder

-
等编辑器的代码分析跑一会,就好了

-
如果点了查看定义之后,就只有一个进度条在跑,半天不跳转,可以直接关闭串口,重新打开工程
2094

被折叠的 条评论
为什么被折叠?



