在Clion使用CubeMX Stm32的步骤

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.mfbz.cn/a/759174.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Golang | Leetcode Golang题解之第199题二叉树的右视图

题目&#xff1a; 题解&#xff1a; /** 102. 二叉树的递归遍历*/ func levelOrder(root *TreeNode) [][]int {arr : [][]int{}depth : 0var order func(root *TreeNode, depth int)order func(root *TreeNode, depth int) {if root nil {return}if len(arr) depth {arr a…

3D Web轻量引擎HOOPS Web Platform赋能AEC行业数字化,高效渲染与多格式支持!

在建筑、工程和施工&#xff08;AEC&#xff09;行业&#xff0c;数字化转型和高效协作正变得越来越重要。为应对日益复杂的项目需求和不断提升的质量标准&#xff0c;AEC企业需要一种强大的工具来实现高效的3D可视化和数据管理。HOOPS Web Platform作为一款综合性3D开发平台&a…

金融科技如何多角度助力小微企业融资

一、引言 在全球化与数字化交织的时代背景下&#xff0c;金融科技&#xff08;FinTech&#xff09;作为新兴力量&#xff0c;正逐步改变传统的金融业态&#xff0c;尤其在助力小微企业融资方面&#xff0c;金融科技展现出了多元化的价值和优势。本文将从不同角度探讨金融科技如…

python操作elasticsearch

1、安装 首先&#xff0c;确保你已经安装了elasticsearch库。如果没有安装&#xff0c;可以使用pip进行安装&#xff1a; pip install elasticsearch 如下&#xff1a; 2、测试是否联通 输入 python 进入交互模式。然后依次输入一下命令。 from elasticsearch import Elas…

uniapp启动页面鉴权页面闪烁问题

在使用uni-app开发app 打包完成后如果没有token&#xff0c;那么就在onLaunch生命周期里面判断用户是否登录并跳转至登录页。 但是在app中页面会先进入首页然后再跳转至登录页&#xff0c;十分影响体验。 处理方法&#xff1a; 使用plus.navigator.closeSplashscreen() 官网…

Nginx网站服务详解(设置并发数、实现不同虚拟主机等)

一、nginx的最大并发数设置已经状态收集模块 [root192 nginx]# cat nginx.conf # For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/user ngin…

【仪器仪表】为什么要对线材做摇摆测试?

在工作中,我们可能会看到下图所示的机器。它就是线材弯折试验机,又叫线材弯折摇摆试验机、插头引线弯折试验机等。 线缆生产厂家和质检部门对电源线、DC线进行弯曲试验都需要这样的仪器,以便验证线缆是否符合设计标准。 线材弯折试验的作用 线材弯折试验机是线材的一种质检…

谷粒商城-个人笔记(集群部署篇一)

前言 ​学习视频&#xff1a;​Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强​学习文档&#xff1a; 谷粒商城-个人笔记(基础篇一)谷粒商城-个人笔记(基础篇二)谷粒商城-个人笔记(基础篇三)谷粒商城-个人笔记(高级篇一)谷粒商城-个…

顺序表应用——通讯录

在本篇之前的顺序表专题我们已经学习的顺序表的实现&#xff0c;了解了如何实现顺序表的插入和删除等功能&#xff0c;那么在本篇当中就要学习基于顺序表来实现通讯录&#xff0c;在通讯录当中能实现联系人的增、删、查改等功能&#xff0c;接下来就让我们一起来实现通讯录吧&a…

【SpringBoot】SpringBoot使用mail实现登录邮箱验证

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、前期准备 1 开启邮箱服务 2 SpringBoot导入依赖 3 创建application.yml配置文件 4 创建数据库文件 5 配置redis服务 二、验证邮件发送功能 三、注册功能实现邮箱验证 1 创建User实体类 2 创建UserPa…

java spring 拦截器和过滤器+过滤器处理数据

java spring 拦截器和过滤器过滤器处理数据 介绍Spring拦截器&#xff08;Interceptor&#xff09;导入依赖完整代码 Java过滤器&#xff08;Filter&#xff09;完整代码分为 2 个文件&#xff0c;请看下面BodyReaderHttpServletRequestWrapper.javaMyFilter.java Spring过滤器…

初识HTML

HTML语法规范 1、HTML标签是由尖括号包围的关键字&#xff0c;例如<html>。 2、HTML标签通常成对出现&#xff0c;例如<html></html>&#xff0c;此为双标签&#xff0c;标签对的第一个标签是开始标签&#xff0c;第二个标签是结束标签。 3、有些特殊标签…

揭秘多年免费听音乐、直播、影视的自用方案:手机、电视、电脑多平台0成本实现媒体自由(内含相关资源)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 多媒体自由 📒🎧 音乐资源📱安卓平台🍎 苹果平台💻 PC平台🎥 影视资源📱 安卓平台🍎 苹果平台📺 电视盒子💻 PC平台📥 电影下载📺 直播资源📱 手机平台💻 PC平台📺 电视盒子⚓️ 相关链接 ⚓️�…

【Python实战因果推断】9_元学习器4

目录 Double/Debiased Machine Learning Double/Debiased Machine Learning Double/Debiased ML 或 R-learner 可以看作是 FrischWaugh-Lovell 定理的改进版。其思路非常简单--在构建结果和治疗残差时使用 ML 模型 结果和干预残差&#xff1a; , 预估&#xff0c;预估 由于 …

Golang-slice理解

slice golang-slice语雀笔记整理 slicego为何设计slice&#xff1f;引用传递实现扩容机制 go为何设计slice&#xff1f; 切片对标其他语言的动态数组&#xff0c;底层通过数组实现&#xff0c;可以说是对数组的抽象&#xff0c;底层的内存是连续分配的所以效率高&#xff0c;可…

【操作系统】进程管理——进程控制和进程通信(个人笔记)

学习日期&#xff1a;2024.6.30 内容摘要&#xff1a;进程控制的概念&#xff0c;进程控制相关的“原语”&#xff0c;进程通信 进程控制 原语 进程控制用“原语”实现。原语是一种特殊的程序&#xff0c;它的执行具有原子性&#xff0c;也就是说&#xff0c;这段程序的执行…

计算机网络原理及应用

第一章 计算机网络概述 【1】局域网 局域网是指在某一区域内由多台计算机互联而成的计算机通信网络。 【1】互通 两个网络之间可以交换数据。 第二章 计算机网络的体系结构 【1】语义 何时发出何种控制信息&#xff0c;完成何种动作以及做出何种响应。 【2】简述网络协…

【Linux】性能分析器 perf 详解(一):简介、安装、stat命令演示

1、简介 perf 是由 Linux 官方提供的系统性能分析工具 。它包含两部分: perf_events ,Linux 内核中的一个子系统perf 命令,用户空间的应用程序内核子系统 perf_events 提供了性能计数器(hardware performance counters)和性能事件的支持,它以事件驱动型的方式工作,通过…

DarkGPT:基于GPT-4-200k设计的人工智能OSINT助手

关于DarkGPT DarkGPT是一款功能强大的人工智能安全助手&#xff0c;该工具基于GPT-4-200k设计并实现其功能&#xff0c;可以帮助广大研究人员针对泄露数据库进行安全分析和数据查询相关的OSINT操作。 工具要求 openai1.13.3 requests python-dotenv pydantic1.10.12 工具安装 …

【机器学习】在【Pycharm】中的应用:【线性回归模型】进行【房价预测】

专栏&#xff1a;机器学习笔记 pycharm专业版免费激活教程见资源&#xff0c;私信我给你发 python相关库的安装&#xff1a;pandas,numpy,matplotlib&#xff0c;statsmodels 1. 引言 线性回归&#xff08;Linear Regression&#xff09;是一种常见的统计方法和机器学习算法&a…