在Clion使用CubeMX Stm32的步骤

news2024/11/25 0:29:49

Step1 准备软件,安装环境:
1. cubemx v6.5.0(可以兼容以前版本的project)

https://www.st.com.cn/zh/development-tools/stm32cubemx.html

STM32CubeMX 默认安装目录, 6.5版本可以兼容老版本
C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeMX
打开后选择help => 更新Firmware
里面的updater settings
reflash data
manage imbeded software packages 保留最新的一个

2. openocd
openocd-20231002.7z
https://gnutoolchains.com/arm-eabi/openocd/

解压缩到 D:\service\stm32\OpenOCD-20231002-0.12.0

3. arm-none-eabi
gcc-arm-none-eabi-5_4-2016q3-20160926-win32.zip
https://launchpad.net/gcc-arm-embedded/+download

解压缩到 D:\service\stm32\gcc-arm-none-eabi-5_4-2016q3-20160926-win32
 


4. Mingx64
ref: https://blog.csdn.net/m0_52559040/article/details/131603782

x86_64-13.2.0-release-posix-seh-ucrt-rt_v11-rev0.7z
https://github.com/niXman/mingw-builds-binaries/releases

- posix:这些压缩包适用于符合POSIX标准的操作系统,如Linux、UNIX等。
(我由于Linux和Windows经常切着用,所以选择posix,如果你只用Windows开发,那么选win32即可)

解压缩到 D:\service\stm32\mingw64

----------------------------------------------------------------------

Step2 环境变量:
我的电脑 => 关于 => 高级系统设置 =>环境变量
ARM_NONE_EABI_HOME  D:\service\stm32\arm-gnu-toolchain-13.2.Rel1-mingw-w64-i686-arm-none-eabi\arm-none-eabi
OpenOCD_HOME D:\service\stm32\OpenOCD-20231002-0.12.0
MINGW64_HOME D:\service\stm32\mingw64

path add the following:
%ARM_NONE_EABI_HOME%\bin
%OpenOCD_HOME%\bin
%MINGW64_HOME%\bin

----------------------------------------------------------------------

Step3:  验证
gcc -v
arm-none-eabi-gcc -v


----------------------------------------------------------------------

Step4 使用CubeMX创建工程

File 配置完成后

Project  => Generate Code  => Application Structure 选择Basic 不要选择Advanced

Toolchain/IDE =>SW4STM32(6.5以后的版本可能改成了Cmake)取消 generate under root

注意底下的Firmware Package Name and Version会是刚刚manage imbeded software packages保留的那个

Generate Code


新版本可能会要求登录后才能下载
 

---------------------------------------------------
Step5 用Clion打开项目,设定Clion的环境
在项目档案里右键 Open Folder as Clion Project

File =>Settings=>Build,Execution,Deployment=> Toolchains

Toolset: D:\service\stm32\mingw64
Build Tool: D:\service\mingw64\bin\mingw32-make.exe
C Compiler: D:\service\stm32\mingw64\bin\gcc.exe
C++ Compiler: D:\service\stm32\mingw64\bin\g++.exe
Debugger: D:\service\stm32\gcc-arm-none-eabi-5_4-2016q3-20160926-win32\bin\arm-none-eabi-gdb.exe


File =>Settings=>Build,Execution,Deployment=> Embedded Development
OpenOCD Location:D:\service\stm32\OpenOCD-20231002-0.12.0\bin\openocd.exe

Stm32CubeMax Location:

C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeMX\STM32CubeMX.exe


--------------------------------------------------------------------------------------------
Step6 在Clion里建立不会被覆盖的文件夹Core(之前的 Application Structure选择Basic)
在项目根目录建立Core文件夹,里面建立子文件夹CMakeFile,Config,Inc,Src
将根目录Src和Inc的档案移动到Core里

在根目录建立Middlewares,将FreeRTOS文件夹放入

将下面的CMakeLists.txt放入CMakeFile里,注意修改,其中.ld档案的路径会随着CubeMax的版本不同而改变

CMakelists.txt 范例

#THIS FILE IS AUTO GENERATED FROM THE TEMPLATE! DO NOT CHANGE!
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1)
cmake_minimum_required(VERSION 3.23)

# specify cross-compilers and tools
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set(CMAKE_ASM_COMPILER  arm-none-eabi-gcc)
set(CMAKE_AR arm-none-eabi-ar)
set(CMAKE_OBJCOPY arm-none-eabi-objcopy)
set(CMAKE_OBJDUMP arm-none-eabi-objdump)
set(SIZE arm-none-eabi-size)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)

# 这里不要重新定义PROJECT_SOURCE_DIR,要另外立一个新的名字,PROJECT_ROOT_DIR
set(PROJECT_ROOT_DIR "D:/wks_freeRTOS/mininal_h743_stm32BK0510/mininal_h743_stm32")
set(PROJECT_BINARY_DIR "${PROJECT_ROOT_DIR}/cmake-build-debug")


# project settings
project(mininal_h743_stm32 C CXX ASM)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 11)

#Uncomment for hardware floating point
add_compile_definitions(ARM_MATH_CM4;ARM_MATH_MATRIX_CHECK;ARM_MATH_ROUNDING)
add_compile_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
add_link_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)

#Uncomment for software floating point
#add_compile_options(-mfloat-abi=soft)

add_compile_options(-mcpu=cortex-m7 -mthumb -mthumb-interwork)
add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length=0)

# uncomment to mitigate c++17 absolute addresses warnings
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-register")

# Enable assembler files preprocessing
add_compile_options($<$<COMPILE_LANGUAGE:ASM>:-x$<SEMICOLON>assembler-with-cpp>)

if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
    message(STATUS "Maximum optimization for speed")
    add_compile_options(-Ofast)
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
    message(STATUS "Maximum optimization for speed, debug info included")
    add_compile_options(-Ofast -g)
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel")
    message(STATUS "Maximum optimization for size")
    add_compile_options(-Os)
else ()
    message(STATUS "Minimal optimization, debug info included")
    add_compile_options(-Og -g)
endif ()

include_directories(

        # Driver
        ${PROJECT_ROOT_DIR}/Drivers/STM32H7xx_HAL_Driver/Inc
        ${PROJECT_ROOT_DIR}/Drivers/STM32H7xx_HAL_Driver/Inc/Legacy
        ${PROJECT_ROOT_DIR}/Drivers/CMSIS/Device/ST/STM32H7xx/Include
        ${PROJECT_ROOT_DIR}/Drivers/CMSIS/Include

        # Middlewares
        ${PROJECT_ROOT_DIR}/Middlewares
        ${PROJECT_ROOT_DIR}/Middlewares/FreeRTOS/Source/include
        ${PROJECT_ROOT_DIR}/Middlewares/FreeRTOS/Source/portable/GCC/ARM_CM4F
        ${PROJECT_ROOT_DIR}/Middlewares/canfestival/include
        ${PROJECT_ROOT_DIR}/Middlewares/canfestival/src
        ${PROJECT_ROOT_DIR}/Middlewares/canfestival/include/cm4
        ${PROJECT_ROOT_DIR}/Middlewares/canfestival/include/win32
        ${PROJECT_ROOT_DIR}/Middlewares/canfestival/include/AVR
        ${PROJECT_ROOT_DIR}/Middlewares/canfestival/include/none



        ${PROJECT_ROOT_DIR}/Middlewares/can-slave



        ${PROJECT_ROOT_DIR}/Middlewares/delay

        # Config
        ${PROJECT_ROOT_DIR}/Core/Config/
        ${PROJECT_ROOT_DIR}/Core/Config/bsp
        ${PROJECT_ROOT_DIR}/Core/Config/bsp/tim
        ${PROJECT_ROOT_DIR}/Core/Config/bsp/usart
        ${PROJECT_ROOT_DIR}/Core/Config/bsp/can
        ${PROJECT_ROOT_DIR}/Core/Config/system

        # My Inc
        ${PROJECT_ROOT_DIR}/Core/Inc
        ${PROJECT_ROOT_DIR}/Core/Inc/bsp

        ${PROJECT_ROOT_DIR}/Core/Inc/bsp/tim/common

)

add_definitions(-DUSE_HAL_DRIVER -DSTM32H743xx)

file(GLOB_RECURSE SOURCES
        # driver
        "${PROJECT_ROOT_DIR}/startup/*.*"
        "${PROJECT_ROOT_DIR}/Drivers/*.*"

        # Middlewares
        "${PROJECT_ROOT_DIR}/Middlewares/canfestival/*.*"
#        "${PROJECT_ROOT_DIR}/Middlewares/canfestival_original/*.*"
        "${PROJECT_ROOT_DIR}/Middlewares/can-slave/*.*"
        "${PROJECT_ROOT_DIR}/Middlewares/delay/*.*"

        # My Config
        "${PROJECT_ROOT_DIR}/Core/Config/*.*"

        # My Src
        "${PROJECT_ROOT_DIR}/Core/Inc/*.*"
        "${PROJECT_ROOT_DIR}/Core/Src/*.*"

        )



#这里修改过
set(LINKER_SCRIPT ${PROJECT_ROOT_DIR}/STM32H743IITx_FLASH.ld)

add_link_options(-Wl,-gc-sections,--print-memory-usage,-Map=${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map)
add_link_options(-mcpu=cortex-m7 -mthumb -mthumb-interwork)
add_link_options(-T ${LINKER_SCRIPT})

add_executable(${PROJECT_NAME}.elf
        ${SOURCES}
        ${LINKER_SCRIPT})

#这里重定义过PROJECT_BINARY_DIR
set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex)
set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin)

add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD
        COMMAND ${CMAKE_OBJCOPY} -Oihex $<TARGET_FILE:${PROJECT_NAME}.elf> ${HEX_FILE}
        COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${PROJECT_NAME}.elf> ${BIN_FILE}
        COMMENT "Building ${HEX_FILE}
Building ${BIN_FILE}")

--------------------------------------------------------------------------------------------

Step 7 Run

右上角 Edit Configuration
新建 OpenOCD Download & Run
Target: 项目名称
Executable binary: 项目名称
Debugger: arm-none-eabi-gdb.exe
Board config file: 点击Assist 选择最接近的,以h743为例,选择st_nucleo_h743zi.cfg
选择Copy to Project & Use 将文件拷贝到项目根目录,点击OK

连接板子,打开电源,Run

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

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

相关文章

关于响应式编程的理解与SpringCloudGateway的理解

关于响应式编程的理解与SpringCloudGateway的理解 一. 响应式编程与函数式编程的区别二. 响应式编程中常用的组件2.1 RxJava定义2.2 Rxjava基本概念2.3 RxJava 用法 三 SpringcloudGateway四 常见的四种限流规则 一. 响应式编程与函数式编程的区别 总的来说&#xff0c;响应式编…

WEB攻防【4】——JavaWeb项目/JWT身份攻击/组件安全/访问控制

一、知识点 1、Javaweb常见安全及代码逻辑 Javaweb的架构&#xff1a; 如何通过包查找到文件&#xff0c;通过URL对应源码的文件&#xff0c;或者通过源码文件对应URL地址。 2、目录遍历&身份验证&逻辑&JWT Javaweb里面有身份认证的JWT的技术&#xff0c;pyth…

ctfshow-web入门-命令执行(web66-web70)

目录 1、web66 2、web67 3、web68 4、web69 5、web70 1、web66 show_source 被禁用 highlight_file 发现 flag 不在 flag.php 里面 先使用 scandir() 进行目录扫描&#xff1a; cprint_r(scandir("./")); 当前目录下只有 index.php 和 flag.php 扫一下根目…

DAMA学习笔记(三)-数据架构

1.引言 架构是构建一个系统&#xff08;如可居住型建筑&#xff09;的艺术和科学&#xff0c;以及在此过程中形成的成果——系统本身。用通俗的话说&#xff0c;架构是对组件要素有组织的设计&#xff0c;旨在优化整个结构或系统的功能、性能、可行性、成本和用户体验。 对于架…

树莓派安装windows系统

第1步&#xff1a; https://uupdump.net/下载对应的系统文件&#xff0c;所有选择项都默认选择。 第2步&#xff1a; 解压下载后的文件&#xff0c;双击运行下面文件。等待下载完成&#xff0c;等待过程很漫长&#xff0c;很考验耐心。 第3步&#xff1a; 提示已经finish了&…

GBJ406-ASEMI无人机专用整流桥GBJ406

编辑&#xff1a;ll GBJ406-ASEMI无人机专用整流桥GBJ406 型号&#xff1a;GBJ406 品牌&#xff1a;ASEMI 封装&#xff1a;GBJ-4 最大重复峰值反向电压&#xff1a;600V 最大正向平均整流电流(Vdss)&#xff1a;4A 功率(Pd)&#xff1a;中小功率 芯片个数&#xff1a;…

Java代码基础算法练习-判断密码是否符合要求-2024.06.30

任务描述&#xff1a; 用户密码常常要求密码的长度大于等于6个字符&#xff0c;且必须包含大小写字母和数字。请写 一个函数validatePassword 来验证密码是否有效 解决思路&#xff1a; 输入密码为字符串&#xff0c;函数 validatePassword 对字符串进行 for 循环其中的每个的…

硬核!大佬通过Intel CPU的JTAG接口,DUMP微软原始Xbox的加密BootROM。

这是一篇记录如何通过Intel CPU的JTAG接口,DUMP微软原始Xbox的加密BootROM的文章,内容也记录了老哥如何设计实现JTAG调试器的过程,非常硬核! 原文:JTAG ‘Hacking’ the Original Xbox in 2023 Using Intel CPU JTAG to dump the secret bootrom in Microsoft’s original…

vb6多线程异步,VB.NET 全用API实现:CreateThread创建多线程,等待线程完成任务

在VB.NET中&#xff0c;你可以使用API函数来创建多线程并等待线程完成任务。以下是一个示例代码&#xff0c;展示如何使用API函数来实现这个功能&#xff1a; Imports System.Runtime.InteropServices Imports System.ThreadingPublic Class Form1Private Delegate Sub ThreadC…

mybatis#号和$区别

在MyBatis中&#xff0c;#{}和${}都是用于实现动态SQL的占位符&#xff0c;但它们在使用场景和安全性上有明显的区别&#xff1a; 用途区别&#xff1a; #{}主要用于传递接口传输过来的具体数据&#xff0c;如参数值&#xff0c;它可以防止SQL注入&#xff0c;因为MyBatis会…

gin数据解析,绑定和渲染

一. 数据解析和绑定 1.1 Json数据解析和绑定 html文件&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0&quo…

【从零开始学架构 架构基础】四 架构设计的复杂度来源:可扩展性复杂度来源

架构设计的复杂度来源其实就是架构设计要解决的问题&#xff0c;主要有如下几个&#xff1a;高性能、高可用、可扩展、低成本、安全、规模。复杂度的关键&#xff0c;就是新旧技术之间不是完全的替代关系&#xff0c;有交叉&#xff0c;有各自的特点&#xff0c;所以才需要具体…

Solidworke学习(装配体3)

目录 本节学习内容&#xff1a; 一、高级配合 &#xff08;1&#xff09;对称配合 &#xff08;2&#xff09;宽度配合 &#xff08;3&#xff09;距离配合 二、机械配合 &#xff08;1&#xff09;凸轮配合 &#xff08;2&#xff09;槽口配合 三、快捷菜单 本节学习…

折半查找详解

一&#xff1a;折半查找概念 折半查找&#xff08;也称为二分查找&#xff09;是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始&#xff0c;如果中间元素正好是目标值&#xff0c;则搜索过程结束&#xff1b;如果目标值大于或小于中间元素&#x…

Uniapp 默认demo安装到手机里启动只能看得到底tab无法看到加载内容解决方案

Uniapp 默认demo安装到手机里以后&#xff0c;启动APP只能看到底tab栏&#xff0c;无法看到每个tab页对应的内容&#xff0c;HBuilder会有一些这样的报错信息&#xff1a; Waiting to navigate to: /pages/tabBar/API/API, do not operate continuously: 解决方案&#xff1a;…

FastAPI教程III

本文参考FastAPI教程https://fastapi.tiangolo.com/zh/tutorial 这部分暂无需求的没有记录&#xff0c;仅放置标题。 依赖项 安全性 中间件 你可以向FastAPI应用添加中间件。 ”中间件“是一个函数&#xff0c;它在每个请求被特定的路径操作处理之前&#xff0c;以及在每个…

SpringBoot:使用Spring Batch实现批处理任务

引言 在企业级应用中&#xff0c;批处理任务是不可或缺的一部分。它们通常用于处理大量数据&#xff0c;如数据迁移、数据清洗、生成报告等。Spring Batch是Spring框架的一部分&#xff0c;专为批处理任务设计&#xff0c;提供了简化的配置和强大的功能。本文将介绍如何使用Spr…

cpu,缓存,辅存,主存之间的关系及特点

关系图 示意图&#xff1a; ------------------- | CPU | | ------------- | | | 寄存器 | | | ------------- | | | L1缓存 | | | ------------- | | | L2缓存 | | | ------------- | | | L3缓存 | | | ------------- | ----…

test——认识测试

目录 前言 一什么是测试 1测试场景 2为什么需要测试 3测试定义 二测试的岗位 1测开与测试 2测试与开发的区别 a工作内容 b难易程度 c其它不同 三测试人员具备的素质 1综合能力 a沟通能力 b快速学习能力 c开发能力 d文字能力 2掌握自动化测试技术 前言 互联⽹…

Python基于决策树分类模型、随机森林分类模型、KNN分类模型和GBDT分类模型完成收入预测项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 在全球化的今天&#xff0c;收入不平等已经成为各国政府和社会关注的焦点问题之一。了解居民收入状况&…