Clion&&STM32环境配置教程(优雅开发STM32) |
您所在的位置:网站首页 › clion环境配置mingw › Clion&&STM32环境配置教程(优雅开发STM32) |
Clion&&STM32环境配置
1.环境及所需工具
软件环境:
Windows 10、11STM32CubeMXClionMinGWOpenOCDarm-none-eabi-gcc
硬件环境:
STM32F407VGT6ST-Link下载器
工具安装
STM32CubeMX 这个正常去官网下载最新版的安装就行了:https://www.st.com/en/development-tools/stm32cubemx.html 或者在我的阿里云盘下载:SetupSTM32CubeMX-6.8.1-Win.exe https://www.aliyundrive.com/s/JcKhj7FD4nJ 提取码: up88 OpenOCD OpenOCD是用于对STM32进行下载仿真的工具,是一个开源软件包,Windows版本下从这里下载,下载好解压到一个目录就行。 OpenOCD-20230202-0.12.0 https://www.aliyundrive.com/s/mjmWrYPLUav 提取码: 80xh MingW 下载地址:MinGW - Minimalist GNU for Windows download | SourceForge.net 4.arm-none-eabi-gcc Windows到这里下载:https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads ,选择ZIP压缩包形式的: (最新的Clion、Clion下载网址以及破解网站教程、OpenCd、以及stlink的配置)这些都能到我的阿里云网盘下载: Clion&&stm32 https://www.aliyundrive.com/s/dqkys6yFNK3 提取码: tj47 (由于云盘限制MinGW和arm-none-eabi-gcc无法分享) 我的建议是把这些所有工具链放到同一路径下方便添加路径!!! 环境配置这里的路径可以这样操作 我的界面是中文是因为在插件下载了中文的插件
重启之后就会变成中文了 找到对应编译器路径 可以在Clion里创建CubeMx的工程也可以在CubeMx里建好后使用Clion打开(我个人觉得后者更舒服) 这里演示的是Clion里创建工程然后再打开CubeMx进行修改 在Clion创建STM32CubeMx工程最后点击创建 这里点击跳过(这里是相应板子的配置) 工程默认创建的是STM32F030的芯片 如果需要更改可以通过打开CubeMx重新选择芯片 CubeMx里面的配置需要自己修改这里就不多赘述了 回到Clion跳过即可,可以看到已经变成F4了 CubeMx创建工程使用Clion打开cubeMx配置内容就不多赘述了直接到工程管理界面 弹出提示框我们直接打开文件目录就好 Edit whith Clion 跳过即可 Config文件可以这样自己添加也可以使用我网盘里的哪个config文件(只适用于STM32F407VGTx使用STLink下载) 名字是你自己下载器的名字 文件里内容如下: # choose st-link/j-link/dap-link etc. #adapter driver cmsis-dap source [find interface/stlink.cfg] #transport select swd transport select hla_swd #这里的stm32f4x.cfg对应的是你的板子的相应芯片型号而不是Link的 source [find target/stm32f4x.cfg] # download speed = 10MHz adapter speed 10000 编辑运行配置比如我从其他地方拷贝了一个文件夹到当前工程路径下 然后就会更新 我们还需要在CMakeLists.txt里添加路径 记得重新加载CmakeLists 新版是这样 现在就可以下到板子上了(可以写个LED闪烁的程序观察效果) 下载成功是这样的(虽然是红色但是确实是下载成功) 需要添加以下两个文件 retarget.h #ifndef _RETARGET_H__ #define _RETARGET_H__ #include "stm32f4xx_hal.h" #include #include void RetargetInit(UART_HandleTypeDef *huart); int _isatty(int fd); int _write(int fd, char *ptr, int len); int _close(int fd); int _lseek(int fd, int ptr, int dir); int _read(int fd, char *ptr, int len); int _fstat(int fd, struct stat *st); #endif //#ifndef _RETARGET_H__ retarget.c #include "retarget.h" #include #include #include #include #include #include #include #if !defined(OS_USE_SEMIHOSTING) #define STDIN_FILENO 0 #define STDOUT_FILENO 1 #define STDERR_FILENO 2 UART_HandleTypeDef *gHuart; void RetargetInit(UART_HandleTypeDef *huart) { gHuart = huart; /* Disable I/O buffering for STDOUT stream, so that * chars are sent out as soon as they are printed. */ setvbuf(stdout, NULL, _IONBF, 0); } int _isatty(int fd) { if (fd >= STDIN_FILENO && fd hstatus = HAL_UART_Transmit(gHuart, (uint8_t *) ptr, len, HAL_MAX_DELAY); if (hstatus == HAL_OK) return len; else return EIO; } errno = EBADF; return -1; } int _close(int fd) { if (fd >= STDIN_FILENO && fd HAL_StatusTypeDef hstatus; if (fd == STDIN_FILENO) { hstatus = HAL_UART_Receive(gHuart, (uint8_t *) ptr, 1, HAL_MAX_DELAY); if (hstatus == HAL_OK) return 1; else return EIO; } errno = EBADF; return -1; } int _fstat(int fd, struct stat *st) { if (fd >= STDIN_FILENO && fd RetargetInit(&huart1); while(1) { } } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |