当前位置: 首页 > news >正文

Clion+STM32配置环境-DESKTOP-65G5ROL

Clion+STM32配置环境

下载安装

下载Clion,具体步骤省略
https://www.jetbrains.com/clion/download/

Clion官方的教程网址如下

https://www.jetbrains.com/help/clion/embedded-development.html

需要下载的东西有openocd和GNU ARM工具链

openocd:https://gnutoolchains.com/arm-eabi/openocd/(最新版即可)

image-20230713195950638

GNU ARM工具链:https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads(最新版即可)

image-20230713201216119

OpenOCD强烈建议安装在无空格,无特殊符号,尽可能简短的路径

安装后需要配置环境变量,版本号可能不一样(更别说yourpath了)别照抄

C:\yourpath\OpenOCD-20230202-0.12.0\bin
C:\yourpath\Arm GNU Toolchain arm-none-eabi\12.2 rel1\bin

假设你没有用过CubeMX,下载地址与推荐学习帖子:

https://www.st.com/en/development-tools/stm32cubemx.html#get-software

http://www.openedv.com/thread-309468-1-1.html

创建项目

项目路径和名字不要有空格,特殊符号,最好下划线也不要!!

先使用stm32Cubemx创建项目,在创建代码时需要选择STM32CubeIDE选项

image-20230521215546852

已经创建了项目的ico?(且要求ide没有选错)

直接在Clion内打开项目,选择打开ico文件,会自动识别为一个项目

板载文件.cfg配置,他给你推荐,你搜索对应的型号,大概就行(里面全部是开发板的cfg,然而我们大概率不是在用列表里的开发板),然后复制到项目中使用

image-20230522182207543

image-20230713203548566

OpenOCD在Clion的配置的话大概如图(大概只需要改一次)

image-20230713201503905

稍微提一下cmake语法问题

image-20230713202639850

这句话意思是索引在Startup,Src,Drivers下的所有文件夹里的所有文件,所以如果你添加了文件,显示找不到,请手动更新cmake

image-20230713202751582

cmake存在缓存,如果还是没刷出来可以考虑清缓存

image-20230713202829031

运行/调试配置要修改

image-20230713203710250

调试和运行的对象是这个图标的,别搞错了image-20230713203754169

其他

keil内的编译选项,宏定义在哪里添加

image-20230713203000117

在cmake中添加这句话,即定义DEBUG,USE_STDPERIPH_DRIVER等三个宏定义,类似的还有-O0等

printf怎么用

添加文件,记得自己改h7xx

retarget.h

#include "stm32H7xx_hal.h"
#include <sys/stat.h>
#include <stdio.h>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);

retarget.c

#include <_ansi.h>
#include <_syslist.h>
#include <errno.h>
#include <sys/time.h>
#include <sys/times.h>
#include <stdint.h>#if !defined(OS_USE_SEMIHOSTING)#define STDIN_FILENO  0
#define STDOUT_FILENO 1
#define STDERR_FILENO 2UART_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 <= STDERR_FILENO)return 1;errno = EBADF;return 0;
}int _write(int fd, char *ptr, int len)
{HAL_StatusTypeDef hstatus;if (fd == STDOUT_FILENO || fd == STDERR_FILENO){hstatus = HAL_UART_Transmit(gHuart, (uint8_t *) ptr, len, HAL_MAX_DELAY);if (hstatus == HAL_OK)return len;elsereturn EIO;}errno = EBADF;return -1;
}int _close(int fd)
{if (fd >= STDIN_FILENO && fd <= STDERR_FILENO)return 0;errno = EBADF;return -1;
}int _lseek(int fd, int ptr, int dir)
{(void) fd;(void) ptr;(void) dir;errno = EBADF;return -1;
}int _read(int fd, char *ptr, int len)
{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;elsereturn EIO;}errno = EBADF;return -1;
}int _fstat(int fd, struct stat *st)
{if (fd >= STDIN_FILENO && fd <= STDERR_FILENO){st->st_mode = S_IFCHR;return 0;}errno = EBADF;return 0;
}#endif //#if !defined(OS_USE_SEMIHOSTING)

main.c内

    RetargetInit(&huart1);

编译后提示重复函数名,需要自己屏蔽syscall的同名函数

对于浮点数打印,还有加一句cmake语句

set(COMMON_FLAGS "-specs=nosys.specs -specs=nano.specs -u _printf_float ")
http://www.jsqmd.com/news/100667/

相关文章:

  • 14、多线程编程中的信号处理与 I/O 操作
  • 视频字幕检索的Dify缓存周期全解密(企业级缓存设计实战)
  • 2020-12-17-xtx的日常开发日记-DESKTOP-65G5ROL
  • 2025 - 2026年宁夏银川geo ai搜索优化公司客观深度评测排行最新发布
  • Agent工具如何赋能Dify?3个真实案例揭示扩展开发的巨大价值
  • 实时消息推送(Websocket/SSE)
  • (Dify Tesseract 更新机制终极指南):构建高可用AI应用的基石
  • 无需力标定也能精准感知接触力?GelSight Mini光学触觉传感器迎来新校准范式
  • 智能Agent容器部署必看:5种常见资源配置错误及修复方案
  • godot引擎学习笔记4(C#)
  • 为什么你的Vercel AI SDK在Docker中无法读取环境变量?深度剖析加载机制盲区
  • 揭秘Docker MCP 网关负载均衡机制:5步实现无缝流量分发
  • 模温机企业排名:2025
  • 揭秘Dify重排序算法:如何选择最优模型提升搜索相关性?
  • 2025模温机厂家推荐排行榜:非标定制与专业服务
  • 肌营养不良新突破:固本培元生肌疗法
  • 【量子计算镜像构建缓存全解析】:掌握高效量子环境部署的5大核心技术
  • 加密文档处理生死战:Dify错误处理必须掌握的6项核心技术
  • 资源利用率下降30%?私有化Dify监控告警机制这样优化,稳了!
  • 【架构师亲授】:Docker MCP 网关服务注册的7大最佳实践
  • 找不到符号
  • Spring AI对接Dify的10个关键步骤,99%开发者忽略的部署细节
  • 【高危漏洞预警】:忽视Dify权限校验导致数据越权访问的5大案例
  • 为什么90%的企业还没意识到Dify解密算法对文档安全的颠覆性威胁?
  • Dify工作流依赖检查实战(从入门到精通)
  • arm中的ros项目交叉编译,一整套 业务级、完整、可直接用 的交叉编译 + rootfs 同步 + 自动上传 + 自动运行脚本 (未完全解决编译问题,大概编译到7%的时候报错,出现的问题应该在原)
  • Tesseract在Dify中的批量任务崩溃?99%的人都忽略的资源控制策略
  • 300套伺服电机步进调速电机SolidWorks三维3D模型图结构库合集
  • 错过再等十年:IPCC级气候归因模型R实现全过程首次公开
  • 编码器伺服电机例程代码原理图PMSM stm32 foc bldc学习资料