0
点赞
收藏
分享

微信扫一扫

[ESP32] 快速搭建vscode开发环境(便捷式)


下载地址:https://pan.baidu.com/s/1-oGcJ0p-iV4WZ9d6lL0KaA
提取码:7v35

Espressif4_4_1 精简便携式 : VSCode1.61_嵌入式便捷式_含必备插件:

一、将压缩包文件解压到C盘根目录

  1. 将[settings.json],复制到"C:\Users\用户名\AppData\Roaming\Code\User"

二、 安装VScode插件 Espressif IDF

[ESP32] 快速搭建vscode开发环境(便捷式)_环境变量_02


[ESP32] 快速搭建vscode开发环境(便捷式)_嵌入式_03

三、编译例程,并调试

  1. 使用VScode打开 C:\prog\Espressif\esp-idf\examples\peripherals\gpio\generic_gpio
  2. 选择对应芯片型号,再执行编译
  3. [ESP32] 快速搭建vscode开发环境(便捷式)_嵌入式_04


  4. [ESP32] 快速搭建vscode开发环境(便捷式)_环境变量_05

  5. 编译完毕后,执行烧录
  6. [ESP32] 快速搭建vscode开发环境(便捷式)_ESP32_06


  7. [ESP32] 快速搭建vscode开发环境(便捷式)_环境变量_07

  8. 打开观察窗口,查看串口log
  9. [ESP32] 快速搭建vscode开发环境(便捷式)_python_08


  10. [ESP32] 快速搭建vscode开发环境(便捷式)_ESP32_09

第二种:更换任意盘符

  1. 便携式vscode v1.69.1,集成嵌入式常用插件(解压即用) ​​下载​​:
  2. 便携式Espressif v4.4.1,解压后,编写环境变量即可。​​下载:​​

需要添加的环境变量如下:

[ESP32] 快速搭建vscode开发环境(便捷式)_ESP32_10


[ESP32] 快速搭建vscode开发环境(便捷式)_ESP32_11


[ESP32] 快速搭建vscode开发环境(便捷式)_python_12

IDF_PATH                   D:\prog\Espressif
IDF_PYTHON_ENV_PATH %IDF_PATH%\tools\python_env\idf4.4_py3.8_env
IDF_TOOLS_PATH %IDF_PATH%\tools


PATH添加如下:
手动一次添加
%IDF_PATH%;
%IDF_TOOLS_PATH%\tools\idf-python\3.8.7;
%IDF_TOOLS_PATH%\tools\xtensa-esp32-elf\esp-2021r2-patch3-8.4.0\xtensa-esp32-elf\bin;
%IDF_TOOLS_PATH%\tools\xtensa-esp32s2-elf\esp-2021r2-patch3-8.4.0\xtensa-esp32s2-elf\bin;
%IDF_TOOLS_PATH%\tools\xtensa-esp32s3-elf\esp-2021r2-patch3-8.4.0\xtensa-esp32s3-elf\bin;
%IDF_TOOLS_PATH%\tools\riscv32-esp-elf\esp-2021r2-patch3-8.4.0\riscv32-esp-elf\bin;
%IDF_TOOLS_PATH%\tools\esp32ulp-elf\2.28.51-esp-20191205\esp32ulp-elf-binutils\bin;
%IDF_TOOLS_PATH%\tools\esp32s2ulp-elf\2.28.51-esp-20191205\esp32s2ulp-elf-binutils\bin;
%IDF_TOOLS_PATH%\tools\cmake\3.20.3\bin;
%IDF_TOOLS_PATH%\tools\openocd-esp32\v0.11.0-esp32-20211220\openocd-esp32\bin;
%IDF_TOOLS_PATH%\tools\ninja\1.10.2\;
%IDF_TOOLS_PATH%\tools\idf-exe\1.0.3\;
%IDF_TOOLS_PATH%\tools\ccache\4.3\ccache-4.3-windows-64;
%IDF_TOOLS_PATH%\tools\dfu-util\0.9\dfu-util-0.9-win64;
%IDF_TOOLS_PATH%\python_env\idf4.4_py3.8_env\Scripts;

在末尾;直接添加
%IDF_PATH%;%IDF_PATH%\tools;%IDF_TOOLS_PATH%\tools\idf-python\3.8.7;%IDF_TOOLS_PATH%\tools\xtensa-esp32-elf\esp-2021r2-patch3-8.4.0\xtensa-esp32-elf\bin;%IDF_TOOLS_PATH%\tools\xtensa-esp32s2-elf\esp-2021r2-patch3-8.4.0\xtensa-esp32s2-elf\bin;%IDF_TOOLS_PATH%\tools\xtensa-esp32s3-elf\esp-2021r2-patch3-8.4.0\xtensa-esp32s3-elf\bin;%IDF_TOOLS_PATH%\tools\riscv32-esp-elf\esp-2021r2-patch3-8.4.0\riscv32-esp-elf\bin;%IDF_TOOLS_PATH%\tools\esp32ulp-elf\2.28.51-esp-20191205\esp32ulp-elf-binutils\bin;%IDF_TOOLS_PATH%\tools\esp32s2ulp-elf\2.28.51-esp-20191205\esp32s2ulp-elf-binutils\bin;%IDF_TOOLS_PATH%\tools\cmake\3.20.3\bin;%IDF_TOOLS_PATH%\tools\openocd-esp32\v0.11.0-esp32-20211220\openocd-esp32\bin;%IDF_TOOLS_PATH%\tools\ninja\1.10.2\;%IDF_TOOLS_PATH%\tools\idf-exe\1.0.3\;%IDF_TOOLS_PATH%\tools\ccache\4.3\ccache-4.3-windows-64;%IDF_TOOLS_PATH%\tools\dfu-util\0.9\dfu-util-0.9-win64;%IDF_TOOLS_PATH%\python_env\idf4.4_py3.8_env\Scripts;

三 使idf支持c++17

x\Espressif\tools\cmake\build.cmake

[ESP32] 快速搭建vscode开发环境(便捷式)_环境变量_13

四 不定长接收串口数据

x\Espressif\components\driver\uart.c

//read any size, only added two line to fucntion uart_read_bytes, marked with mk
int uart_read_frame(uart_port_t uart_num, uint8_t* buf, TickType_t ticks_to_wait) {
//mk: set to 1 so that it will pass the while
uint32_t length = 1;

uint8_t* data = NULL;
size_t size;
size_t copy_len = 0;
int len_tmp;
if(xSemaphoreTake(p_uart_obj[uart_num]->rx_mux,(portTickType)ticks_to_wait) != pdTRUE) {
return -1;
}
while(length) {
if(p_uart_obj[uart_num]->rx_cur_remain == 0) {
data = (uint8_t*) xRingbufferReceive(p_uart_obj[uart_num]->rx_ring_buf, &size, (portTickType) ticks_to_wait);
//mk: get actual length received
length = p_uart_obj[uart_num]->rx_buffered_len;
if(data) {
p_uart_obj[uart_num]->rx_head_ptr = data;
p_uart_obj[uart_num]->rx_ptr = data;
p_uart_obj[uart_num]->rx_cur_remain = size;
} else {
//When using dual cores, `rx_buffer_full_flg` may read and write on different cores at same time,
//which may lose synchronization. So we also need to call `uart_check_buf_full` once when ringbuffer is empty
//to solve the possible asynchronous issues.
if(uart_check_buf_full(uart_num)) {
//This condition will never be true if `uart_read_bytes`
//and `uart_rx_intr_handler_default` are scheduled on the same core.
continue;
} else {
xSemaphoreGive(p_uart_obj[uart_num]->rx_mux);
return copy_len;
}
}
}
if(p_uart_obj[uart_num]->rx_cur_remain > length) {
len_tmp = length;
} else {
len_tmp = p_uart_obj[uart_num]->rx_cur_remain;
}
memcpy((uint8_t *)buf + copy_len, p_uart_obj[uart_num]->rx_ptr, len_tmp);
UART_ENTER_CRITICAL(&(uart_context[uart_num].spinlock));
p_uart_obj[uart_num]->rx_buffered_len -= len_tmp;
uart_pattern_queue_update(uart_num, len_tmp);
p_uart_obj[uart_num]->rx_ptr += len_tmp;
UART_EXIT_CRITICAL(&(uart_context[uart_num].spinlock));
p_uart_obj[uart_num]->rx_cur_remain -= len_tmp;
copy_len += len_tmp;
length -= len_tmp;
if(p_uart_obj[uart_num]->rx_cur_remain == 0) {
vRingbufferReturnItem(p_uart_obj[uart_num]->rx_ring_buf, p_uart_obj[uart_num]->rx_head_ptr);
p_uart_obj[uart_num]->rx_head_ptr = NULL;
p_uart_obj[uart_num]->rx_ptr = NULL;
uart_check_buf_full(uart_num);
}
}

xSemaphoreGive(p_uart_obj[uart_num]->rx_mux);
return copy_len;
}


举报

相关推荐

0 条评论