STM32 × CLion 新建项目

news2025/4/6 10:38:43

STM32 × CLion 新建项目

新建和配置一个 STM32 项目

1 创建项目

假如是 ST 官方开发板,比如 NUCLEO 板,选择从 ST 板创建

假如是单芯片或淘宝买的那种 F103 开发板,选择从 MCU 创建

2 STM CubeMX 配置

2.1 Pinout & Configuration 外设配置

假如是 ST 官方开发板,可以使用默认设置

否则,在 System Core - SYS - Debug 选择 Serial Wire

:::danger 主警告
忘记配置 Debug 可能造成无法二次烧录代码 (恢复有点麻烦)
:::

2.2 Clock Configuration 时钟树

暂时可以忽略

2.3 Project Manager 项目配置

通常只用配置这两个

  1. Project - Project Settings - Toolchain/IDE : STM32CubeIDE 并勾选 Generate Under Root
  2. Code Generator - Generated files - Generate … ‘.c/.h’ … peripheral

2.4 Tools 工具

绝大多数情况可以忽略

2.5 生成代码

完成后点击右上角 GENERATE CODE

3 CLion 设置

CLion 新建项目时选择 嵌入式 - STM32CubeMX

3.1 非 ST 官方开发板 (且首次使用)

在 OpenOCD 目录新建对应芯片配置文件,如: .\OpenOCD-20240916-0.12.0\share\openocd\scripts\board\f103.cfg

# choose st-link/j-link/dap-link etc.
#adapter driver cmsis-dap
#transport select swd
source [find interface/stlink.cfg]
transport select hla_swd
source [find target/stm32f1x.cfg]
# download speed = 10MHz
adapter speed 10000
  1. source [find interface/stlink.cfg] 表示加载 STLink 配置
  2. transport select hla_swd 表示传输协议 hla_swd 为 STLink 协议,否则 swd
  3. source [find target/stm32f1x.cfg] 表示芯片为 F1 系列

3.2 创建项目

从现有的源创建

选择面板配置文件。ST 官方板一般都有支持: 比如 st_nucleo_l4.cfg ,非官方开发板选择 3.1 中创建的 cfg 文件就行

3.3 下载代码

下载和编写代码时应选中下面绿色的 OpenOCD 否则会标红一片

在这里插入图片描述

4 其他说明

4.1 代码编写

每次更改后在 CubeMX 中生成代码就相当于重新对项目进行生成,所以代码应该放在 CODE BEGIN 和 CODE END 中间,否则代码将会被覆盖

/* xxx CODE BEGIN n */
代码放这
/* xxx CODE END n */

4.2 重定向 printf

方便输出数字或者其他的,注意 printf 只有包含 \n 才会发送数据

4.2.1 CLion 操作

uart.c 最后的注释中,添加代码。这里只是示例,用其他 uart 或者中断 DMA 等方式都行

int __io_putchar (uint8_t ch) {
    HAL_UART_Transmit(&huart2, &ch, 1, 5);
    return 1;
}
4.2.2 Keil 操作

还是大概介绍一下友商,也是相同的位置。此外需要在 Output (魔法棒) 中勾选 use MicroLib

int fputc (int ch, FILE *f) {
    HAL_UART_Transmit(&huart2, (uint8_t*)&ch, 1,5);
    return ch;
}

4.3 C++支持

CLion 对这方面支持比较好,和平时写代码是一样的。友商仅支持 C99 (好像现在也能支持 C11)

4.3.1 自定义文件

新创建的文件在编译时会出现找不到编译规则的警告,应在 CubeMX 中重新生成代码,

C++不应引入过多特性 尤其是 STL 中的很多内容,很容易超内存。下面给出了 cppTest.hpp / cppTest.cpp 的示例

文件树:

f1Test
├── Core
│   ├── Inc
│   │   ├── cppTest.hpp
│   │   ...
│   ├── Src
│   │   ├── cppTest.cpp
│   └── ...
├── f1Test.ioc
├── ...
└── STM32F103C8TX_FLASH.ld

cppTest.hpp 头文件:

#ifndef CPPTEST_H
#define CPPTEST_H

// C 头文件开始
#include "stdlib.h"
// C 头文件结束

#ifdef __cplusplus
// C++ 头文件开始
#include "vector"
// C++ 头文件结束
#endif

#ifdef __cplusplus
extern "C"{
#endif
// C 开始
typedef struct structCppFeature {
    void *ptr;
} sCppFeature;
int cal (int);
// C 结束
#ifdef __cplusplus
}
#endif

#ifdef __cplusplus
// C++ 开始
class CppFeature {
    private:
        std::vector<int> base;
    public:
        void eat (sCppFeature food);
};
// C++ 结束
#endif

#endif //CPPTEST_H

cppTest.cpp 源文件:

#include "../Inc/cppTest.hpp"

void CppFeature::eat (sCppFeature food) {
    CppFeature *raw = static_cast<CppFeature*>(food.ptr);
}

int cal (const int a) {
    int b = 0;
    int c[]{0, 0, a};
    for (auto element : c) {
        b += a;
    }
    return b;
}

4.3.2 ETL库

类似于 STL 库,但更适合嵌入式资源受限的场景,官网

因为是仅头文件库,下载包后解压即可使用,在 CMakeLists_template.txt 中添加语句来引入

# project settings
project(${projectName} C CXX ASM)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 11)

include_directories(xxx/etl-20.40.0/include)

使用时:

#include "etl/vector.h"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2329159.html

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

相关文章

WebSocket 详解:构建一个复杂的实时聊天应用

文章目录 一、前言二、WebSocket 基础2.1 WebSocket 与 HTTP 的区别2.2 WebSocket 的优点 三、搭建 WebSocket 服务端3.1 安装 ws 和 redis 库3.2 创建 WebSocket 服务端3.3 创建用户身份验证 四、前端实现 WebSocket 客户端4.1 创建 Vue 3 项目4.2 实现 WebSocket 连接和用户注…

python爬虫:小程序逆向实战教程

根据我之前发表的文章&#xff0c;我们进行延伸实战https://blog.csdn.net/weixin_64809364/article/details/146981598?spm1001.2014.3001.5501 1. 想要爬取什么小程序&#xff0c;我们进行搜索 2. 找到我们vx小程序的文件地址&#xff0c;我们就可以进行破解 破解步骤强看…

day 8 TIM定时器

一、STM32 定时器概述 1. 定时器的概述定时器的基本功能&#xff0c;但是 STM32 的定时器除了具有定时功能之外&#xff0c;也具有定时器中断功能&#xff0c;还具有输入捕获&#xff08;检测外部信号&#xff09;以及输出比较功能&#xff08;输出不同的脉冲&#xff09;&…

全星 研发项目管理APQP 软件:驱动汽车及制造业研发升级的数字化引擎

全星 APQP 软件&#xff1a;驱动汽车及制造业研发升级的数字化引擎 在汽车及制造业竞争白热化的当下&#xff0c;如何高效推进研发项目&#xff0c;同时确保严格合规&#xff0c;成为企业亟待解决的难题。 全星研发项目管理 APQP 软件系统&#xff0c;凭借卓越的功能与显著优势…

【VUE】RuoYi-Vue3项目结构的分析

【VUE】RuoYi-Vue3项目结构的分析 1. 项目地址2. RuoYi-Vue3项目结构2.1 整体结构2.2 package.json2.2.1 &#x1f9fe; 基本信息2.2.2 &#x1f527; 脚本命令&#xff08;scripts&#xff09;2.2.3 &#x1f30d; 仓库信息2.2.4 &#x1f4e6; 项目依赖&#xff08;dependenc…

智能体和RPA都需要程序思维,如何使用影刀的变量?

欢迎来到涛涛聊AI&#xff0c; 不管AI还是RPA&#xff0c;都需要用到编程思想才能完成批量工作。今天研究了下影刀的变量。 变量类型 根据变量值选择相应的类型&#xff0c;可选择任意一种影刀所支持的数据类型 变量值 指定变量中保存的值&#xff0c;会根据不同的类型设置…

论文笔记(七十五)Auto-Encoding Variational Bayes

Auto-Encoding Variational Bayes 文章概括摘要1 引言2 方法2.1 问题场景2.2 变分下界2.3 SGVB估计器与AEVB算法2.4 重参数化技巧 3 示例&#xff1a;变分自编码器&#xff08;Variational Auto-Encoder&#xff09;4 相关工作5 实验6 结论7 未来工作 文章概括 引用&#xff1…

Sentinel[超详细讲解]-7 -之 -熔断降级[异常比例阈值]

&#x1f4d6; 主要讲解熔断降级之 --- 异常比例阈值 &#x1f680; 1️⃣ 背景 Sentinel 以流量作为切入点&#xff0c;提供了很多的丰富的功能&#xff0c;例如&#x1f917;&#xff1a; 流量控制&#xff0c;熔断降级等&#xff0c;它能够有效的适用各个复杂的业务场景&am…

C++11观察者模式示例

该示例代码采用C11标准&#xff0c;解决以下问题&#xff1a; 消除了类继承的强耦合方式&#xff1b;通知接口使用可变参数模板&#xff0c;支持任意参数&#xff1b; 示例代码 .h文件如下&#xff1a; #include <functional> #include <string> #include <…

win10 笔记本电脑安装 pytorch+cuda+gpu 大模型开发环境过程记录

win10 笔记本电脑安装 pytorchcudagpu 大模型开发环境过程记录 文章部分内容参考 deepseek。 以下使用命令行工具 mingw64。 安装 Anaconda 安装位置&#xff1a; /c/DEVPACK/Anaconda3 然后安装 Python 3.10.16 &#xff08;略&#xff09; $ conda create -n pytorch_…

Layout Inspector平替跨平台布局分析器のAppium Inspector

引言 因为我有一个api为26的设备&#xff0c;因为 Layout Inspector 无法在 API 26 以下设备上使用&#xff0c;并且现在AS的 Hierarchy Viewer 和Android Device Monitor 均已经在SDK中剔除&#xff0c;故想再搜一个pc版的布局查看器&#xff0c;发现Appium Inspector学习成本…

常见NLP指标PPL,F1,Rouge-L,Accuracy (CLS),Accuracy (EM)总结

常见NLP指标PPL&#xff0c;F1&#xff0c;Rouge-L总结 1.PPL 2.F1 3.Rouge-L 4.Accuracy (CLS) 5.Accuracy (EM)

Redis数据结构之ZSet

目录 1.概述2.常见操作2.1 ZADD2.2 ZRANGE2.3 ZREVRANGE2.4 ZRANGEBYSCORE2.5 ZSCORE2.6 ZCARD2.6 ZREM2.7 ZINCRBY2.8 ZCOUNT2.9 ZMPOP2.10 ZRANK2.11 ZREVRANK 3.总结 1.概述 ZSet和Set一样也是String类型元素的集合&#xff0c;且不允许重复的成员&#xff0c;不同的是ZSet…

磁盘分析工具合集:告别C盘焦虑!

今天李师傅带大家盘点五款硬盘空间分析利器&#xff0c;帮你精准定位那些"吃空间"的元凶&#xff0c;让C盘告别臃肿烦恼&#xff01; 一、WizTree 这款NTFS磁盘的"透视眼"堪称效率典范。它通过直接读取硬盘主文件表(MFT)实现秒级扫描&#xff0c;1TB机械…

20250405在荣品的PRO-RK3566开发板使用Rockchip原厂的buildroot系统来适配gmac1

【暂时还没有解决让PRO-RK3566的eth0/gmac1开机就启动】 PRO-RK3566作为iperf服务器&#xff1a; rootrk3566-buildroot:/# ifconfig rootrk3566-buildroot:/# ifconfig -a rootrk3566-buildroot:/# ifconfig eth0 up rootrk3566-buildroot:/# ifconfig rootrk3566-buildroot:/…

每日一题(小白)模拟娱乐篇14

直接理解题意&#xff0c;一分钟扩散一次&#xff0c;那么2020分钟也就是需要循环2020次&#xff0c;然后加入扩散后的条件&#xff0c;每一个次扩散使方格子的总量1&#xff08;只要有一个点扩散就无需看其他的点&#xff09;&#xff0c;若干次循环过后总数之和即所有黑色格子…

使用 Python 爬取并打印双色球近期 5 场开奖数据

使用 Python 爬取并打印双色球近期 5 场开奖数据 前期准备安装所需库 完整代码代码解析 1. 导入必要的库2. 定义函数 get_recent_five_ssq 3. 设置请求的 URL 和 Headers 4. 发送请求并处理响应5. 解析 HTML 内容6. 提取并打印数据7. 错误处理 首先看下运行的效果图&#xff1a…

再见VS Code!Google IDE 正颠覆传统开发体验

云端开发的革命&#xff1a;Google Project IDX 如何颠覆传统开发体验 在软件开发领域&#xff0c;Google 最新推出的 Project IDX 绝非仅仅是另一个“基于浏览器的 VS Code”——它是一次真正的范式转变。与 VS Code、Cursor 等传统工具不同&#xff0c;IDX 是一个完全云原生的…

AI+自动化测试:如何让测试编写效率提升10倍?

文章目录 摘要传统自动化测试的痛点编写测试用例太费时间测试覆盖率难以保证UI 测试维护成本高 AI 如何优化自动化测试&#xff1f;AI 生成单元测试&#xff1a;减少重复工作&#xff0c;提高覆盖率传统方法 VS AI 方法 使用 AI 生成 Python 单元测试自动补全边界情况传统方法 …

01-STM32(介绍、工具准备、新建工程)p1-4

文章目录 工具准备和介绍硬件设备stm32简介和arm简介stm32简介STM32命名规则STM32选型STM32F103C8T6最小系统板引脚定义STM32启动配置STM32最小系统电路ARM简介 软件安装注册器件支持包安装ST-LINK驱动安装USB转串口驱动 新建工程创建stm32工程STM32工程编译和下载型号分类及缩…