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

news/2025/12/16 20:46:08/文章来源:https://www.cnblogs.com/xutongxin/p/19359287

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.mzph.cn/news/1026697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频字幕检索的Dify缓存周期全解密(企业级缓存设计实战)

第一章&#xff1a;视频字幕检索的Dify缓存周期在构建基于AI的视频内容分析系统时&#xff0c;视频字幕检索是关键环节之一。Dify作为支持多模态工作流的开发平台&#xff0c;其缓存机制对提升字幕检索效率具有显著影响。合理的缓存周期设置不仅能减少重复计算开销&#xff0c;…

14、多线程编程中的信号处理与 I/O 操作

多线程编程中的信号处理与 I/O 操作 1. 异步信号处理 在多线程编程中,异步信号的处理是一个重要的问题。可以使用 sigwait() 函数将线程与异步信号分离。创建一个线程来监听异步信号,同时让其他线程阻塞发送给该进程的所有异步信号。 sigwait() 函数的语法如下: #in…

2020-12-17-xtx的日常开发日记-DESKTOP-65G5ROL

xtx第15周日常开发日记 12.18 记一下java的vm启动参数 -Dfile.encoding=UTF-8 -Xmx3G -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5010硬核参数 -Dfile.encoding=UTF-8 -d64 -XX:+AggressiveOpts…

2025 - 2026年宁夏银川geo ai搜索优化公司客观深度评测排行最新发布

在当今数字化的时代,geo ai搜索推荐优化对于企业的线上发展至关重要。为了让更多企业在这一领域少走弯路,经过大量的市场接触、专业研判,并综合行业协会和客户的意见,现对宁夏银川的geo ai搜索优化公司做出如下评测…

AI智能体:连接大语言模型与现实任务的核心架构解析

随着人工智能技术不断持续地演进&#xff0c;有一种架构范式被称作“智能体”&#xff0c;它正变成连接大语言模型与现实世界复杂任务的关键桥梁。被简称为智能体的AI智能体&#xff0c;不是一个全新概念&#xff0c;不过其内涵在通用人工智能技术取得突破之后&#xff0c;得到…

使用蚁剑连接一句话木马远程控制小皮

首先我们启动小皮&#xff1a;事先写好一句话木马并以php的格式保存将木马文件放到小皮目录下在蚁剑中添加数据&#xff0c;输入url和连接密码&#xff0c;测试连接后发现连接成功此时我们便可以通过蚁剑访问本机文件了关于127.0.0.1127.0.0.1 是 IPv4 协议中预留的本地回环地址…

手搓RPC框架系列(二):核心功能实现与架构原则应用

本文实现了RPC框架的核心功能,包括序列化模块、网络传输模块和服务代理模块。重点展示了SOLID原则、高内聚低耦合、KISS、迪米特法则和DRY等架构设计原则在实际代码中的应用,确保了系统的可扩展性和可维护性。下一步…

揭秘Docker Compose中的Agent服务扩展:90%开发者忽略的关键配置

第一章&#xff1a;揭秘Docker Compose中Agent服务扩展的核心价值在现代微服务架构中&#xff0c;Agent服务常被用于监控、日志收集或安全代理等关键任务。通过Docker Compose对Agent服务进行声明式编排&#xff0c;不仅能提升部署效率&#xff0c;还能确保环境一致性与可维护性…

QT实现点击某个菜单项切换软件主板内容

void InfraredMeasurement::slot_action_reHongWaiQt_clicked() {if (reHongWaiQt NULL){reHongWaiQt new ReHongWaiQt();}exchangedWidget(reHongWaiQt); }//切换功能列表界面 void InfraredMeasurement::exchangedWidget(QWidget* pWidget) {if (pWidget){if (currentWidge…

Agent工具如何赋能Dify?3个真实案例揭示扩展开发的巨大价值

第一章&#xff1a;Agent工具与Dify集成的核心价值在现代AI应用开发中&#xff0c;Agent工具通过自主决策、任务分解与外部系统交互等能力&#xff0c;显著提升了自动化水平。将Agent与Dify平台集成&#xff0c;能够充分发挥Dify在可视化编排、模型管理与API服务化方面的优势&a…

实时消息推送(Websocket/SSE)

实时消息推送(Websocket/SSE)在日常的开发中,我们经常能碰见服务端需要主动推送给客户端数据的业务场景,比如数据大屏的实时数据,比如消息中心的未读消息,比如聊天功能等等。 本文主要介绍SSE的使用场景和如何使用…

(Dify Tesseract 更新机制终极指南):构建高可用AI应用的基石

第一章&#xff1a;Dify Tesseract 更新机制概述Dify Tesseract 是一个面向低代码 AI 应用开发平台的核心模块&#xff0c;其更新机制设计旨在确保系统在高可用性与数据一致性之间取得平衡。该机制通过版本快照、差量同步与自动回滚策略&#xff0c;实现应用配置与模型逻辑的平…

无需力标定也能精准感知接触力?GelSight Mini光学触觉传感器迎来新校准范式

在机器人抓取、灵巧操作等任务中&#xff0c;光学触觉传感器需依赖大量带标签数据和高精度力/扭矩设备进行校准&#xff0c;过程耗时且成本高昂。近期&#xff0c;伦敦国王学院机器人感知实验室在arXiv发表的研究《Deep Domain Adaptation Regression for Force Calibration of…

智能Agent容器部署必看:5种常见资源配置错误及修复方案

第一章&#xff1a;智能 Agent 容器的资源限制配置在部署智能 Agent 到容器化环境时&#xff0c;合理配置资源限制是保障系统稳定性与性能的关键环节。容器若未设置适当的资源约束&#xff0c;可能导致节点资源耗尽&#xff0c;进而影响同主机上其他服务的正常运行。通过为容器…

新能源汽车的类型及其核心技术详解

1、新能源汽车类型及特点 新能源汽车是指那些采用非传统的车用燃料作为动力源&#xff0c;或采用传统车用燃料搭配新型车载动力装置的汽车。它们融合了先进的动力控制和驱动技术&#xff0c;展现了前沿的技术原理&#xff0c;同时具备新技术和新结构。 1&#xff09;纯电动汽…

godot引擎学习笔记4(C#)

一、节点常用的一些面板属性选中节点后右侧的属性栏通常会显示本节点及其父节点直至根节点的一些属性&#xff0c;包括CanvasItem和根节点node&#xff0c;类似下图结构1.CanvasItemVisibility是显示效果&#xff08;1&#xff09;visible可以更改节点的显示与不显示&#xff0…

为什么你的Vercel AI SDK在Docker中无法读取环境变量?深度剖析加载机制盲区

第一章&#xff1a;Docker 与 Vercel AI SDK 的环境变量在现代全栈应用开发中&#xff0c;安全地管理敏感配置信息至关重要。Docker 与 Vercel AI SDK 的结合使用时&#xff0c;环境变量成为连接本地容器化服务与云端 AI 功能的桥梁。合理配置这些变量&#xff0c;不仅能提升应…

揭秘Docker MCP 网关负载均衡机制:5步实现无缝流量分发

第一章&#xff1a;揭秘Docker MCP 网关负载均衡的核心价值 在现代微服务架构中&#xff0c;Docker MCP&#xff08;Microservice Communication Platform&#xff09;网关作为流量入口的中枢组件&#xff0c;其内置的负载均衡机制发挥着至关重要的作用。通过智能分发请求到多个…

模温机企业排名:2025

在工业领域&#xff0c;精确的温度控制是确保产品质量和生产效率的关键。今天&#xff0c;我们将深入探讨模温机、导热油炉、TCU、冷水机以及高低温冷热一体机等温控技术&#xff0c;并结合南京星德机械的专业视角&#xff0c;为您揭示这些技术在化工和新型应用行业中的重要性。…

揭秘Dify重排序算法:如何选择最优模型提升搜索相关性?

第一章&#xff1a;揭秘Dify重排序算法的核心机制Dify的重排序算法是其在检索增强生成&#xff08;RAG&#xff09;系统中实现精准响应的关键组件。该算法并非简单地对初始检索结果进行打分排序&#xff0c;而是通过语义相关性建模、上下文匹配度分析以及用户意图理解三重机制&…