STM32CubeMX 新建工程详细步骤

2023-05-16

STM32CubeMX 新建工程详细步骤

  • 1.MPU/CPU选择
    • step1: 打开CubeMX 软件, 在主页面上 点击如下按钮,进入芯片选择界面
    • step2: 在Part Number Search 栏搜索我们需要用到的芯片型号,比如这里我们选择 STM32F103C8
  • 2.片内外设配置
    • 系统内核中的 RCC&SYS 项都必须要进行设置
    • 芯片引脚配置
  • 3.时钟配置
    • 选中时钟配置栏,进入时钟配置界面
  • 4.工程管理器
    • 4.1 Project
      • 4.1.1 Project Setting
      • 4.1.2 Linker Setting
      • 4.1.3 Mcu and Firmware Package (MCU和固件包信息)
    • 4.2 Code Generator
      • 4.2.1 STM32Cube Firmware Library Package固件包拷贝
      • 4.2.2 Generated files 生成文件
      • 4.2.3 HAL Settings HAL库设置
      • 4.2.4 Template Settings模板设置
    • 4.3 Advanced Settings
      • 4.3.1 驱动选择
      • 4.3.2 调用函数

1.MPU/CPU选择

step1: 打开CubeMX 软件, 在主页面上 点击如下按钮,进入芯片选择界面

在这里插入图片描述

step2: 在Part Number Search 栏搜索我们需要用到的芯片型号,比如这里我们选择 STM32F103C8

在这里插入图片描述
选中某一型号时,会在页面右边显示该芯片的详细参数和信息,其中 Features 可以查看该芯片的具体特点和外设, 还可以点击Datasheet 下载数据手册。在芯片选择页面的右下方有芯片的信息概要,比如这里包括该型号芯片的 引脚疯转,Flash, Ram, IO 数量, 主频等基本信息。确定了芯片型号之后,双击上图中我们选择的芯片,进入工程配置界面。

2.片内外设配置

在工程配置页面中有外设配置,时钟配置,和工程配置。这里我们先讲解如何配置这些片内外设CubeMX STM32所有外设都进行了分类,比如这里的 STM32F103C8T6 的所有外设就被分成了一共6类:系统内核、模拟、定时器、通信、计算、中间件.
在这里插入图片描述
上面的片内外设用户需要根据自己项目的使用情况而进行选择配置,但是对于绝大部分的项目来说 ,都需要配置时钟:

系统内核中的 RCC&SYS 项都必须要进行设置

RCC配置,如果需要用 LSE / HSE 就需要在这进行配置
在这里插入图片描述
SYS配置, 关于 debug 口子的配置,默认它是认为我们不需要 debug 口的,所以如果不更改的话生成代码下载进去后 debug 口就关闭了。
注意: STM32CubeMX 使用的 HAL 库有一个 delay 接口默认是使用 SysTick 定时器来实现的,如果我们选用了 FreeRTOS,它使用的心跳时钟在 Cortex 内核上的移植都是依赖于 SysTick 定时器,这里就会有冲突,这一点在点击生成代码按钮时 STM32CubeMX 也会发出警告,这里最好就把 HAL 库定时器使用的时基修改为 TIMER1 - TIMER4中的任一就行。

芯片引脚配置

一般根据需要对GPIO口进行相应配置,GPIO可配置为一般输入输出,复用为其他引脚功能等。绿色表示配置完成,橙色表示待配置。
在这里插入图片描述

3.时钟配置

选中时钟配置栏,进入时钟配置界面

首先我们在这里对单片机的系统时钟源做一个简单的解释,对于STM32来说总共有4个时钟源。
STM32的四个时钟源高速外部时钟(HSE):外部时钟源,晶振频率可取范围为4~16MHz,我们一般采用8MHz的晶振。低速外部时钟(LSE):外部时钟源,主要提供给实时时钟模块,所以一般采用32.768KHz。高速内部时钟(HSI):由内部RC振荡器产生,频率为8MHz,但不稳定。低速内部时钟(LSI):由内部RC振荡器产生,也主要提供给实时时钟模块,频率大约为40KHz。
在这里插入图片描述
对于单片机的系统主时钟。我们一般选用高速时钟 HSE或者HSI(系统默认), 上图中时钟配置为 HSE,HSE时钟配置流程主要分为以下几步:
1)HSE直接分频后作为 PLL Source Mux选择器的输入 ,
2)之后通过锁相环 9倍频 后输入到 System Clock Mux
3) System Clock Mux 直接输出得到系统主时钟 SYSCLK 72Mhz
4) SYSCLK 经过分频器得到高速时钟 HCLK (这里分频系数为1 所以HCLK也为72MHZ)
5) HCLK 后面又分为了5条路径

  • a.直接作为 AHB总线时钟,作为 内核,内存,DMA等的时钟
  • b. 分频后作为 Cortex 系统定时器的时钟源
  • c.直接作为 FCLK时钟
  • d.分频后作为 APB1总线的时钟 (包括分频后 作为APB1外设时钟 也叫做PCLK1 , 分频后再倍频作为 APB1总线上定时器的时钟)
  • e.分频后作为 APB2总线的时钟 (包括分频后作为APB2外设时钟 也叫做PCLK2, 分频后再倍频作为APB2总线上定时器的时钟, 以及分频后再分频作为ADC的时钟)

通过上面配置就完成了从 HSE 到 系统主时钟全部过程的配置, 若板子上面没有提供外部高速晶振,我们就只有使用内部高速晶振了,其配置过程的原理也是类似的,这里就不再赘述了。
如果项目中还用到了 RTC,IWDG等外设,那就还需要另外配置低速时钟。至此我们时钟配置也就基本完成了。

4.工程管理器

最后通过工程管理器 Project Manager 来对整个CubeMx工程来进行最后的配置
STM32CubeMX的 Project Manager工程管理器包含:Project 工程管理、Code Generator 代码生成、Advanced Settings 高级设置。

4.1 Project

Project工程管理包含三部分内容:
Projcet Settings工程设置、
Linker Settings堆栈设置、
Mcu and Firmware Package MCU和固件包信息。
在这里插入图片描述

4.1.1 Project Setting

  • A.Project Name:工程名称比如:MotorControl.uvprojx,以及对应工程里面目标名称。
  • B.Project Location:工程存放路径这个容易理解。如:E:\Proteus
  • C.Application Struture:应用程序结构这里包含两个选项:Basic 和 Advanced。Basic:是基础的结构,一般不包含中间件(RTOS、文件系统、USB设备等)。Advanced:相反就是包含中间件,一般针对相对复杂一点的工程。当然,这两种生成的结构都比较基础,一般实际项目都会重新整理一遍软件架构。
  • D.Toolchain Folder Location:工具链文件夹路径这个是根据上面Project Name和Project Location得出来的,用户不能修改。
  • E.Toolchain/IDE:工具链选择·EWARM ,MDK-ARM和TrueSTUDIO,STM32CubeIDE,Makefile等,如果配合使用Keil IDE,此处就选择MDK-ARM。

4.1.2 Linker Setting

在这里插入图片描述
这里的选项一看就明白,主要就是堆和栈大小的设置,默认缺省值:Heap堆为0x200,Stack栈为0x400.

4.1.3 Mcu and Firmware Package (MCU和固件包信息)

这里有三个选项,关于MCU类型和固件包版本信息,一般默认配置。

  • A.Mcu Reference:MCU参考型号这个是根据你选择的MCU型号决定的,用户不能修改。
  • B.Firmware Package Name and Version:固件包名称和版本信息这个容易理解,如:STM32Cube_FW_F1_V1.8.4.
  • C.Use Default Firmware Location:使用默认固件包这里勾选上就会根据系统进行默认匹配固件包,一般建议默认。当然,不勾选,可以自己选择指定固件包。

4.2 Code Generator

在这里插入图片描述
如上图,主要包含四项内容:固件包拷贝、生成文件、HAL设置、模板设置。

4.2.1 STM32Cube Firmware Library Package固件包拷贝

  • 1.Copy all used libraries into the project folder 将所有使用过的库复制到项目文件夹中不管你用,还是没有用到,都拷贝到你工程目录下。这样一来,你工程下文件就比较多,不建议使用。
  • 2.Copy only the necessary library files 只复制必要的库文件。这个相比上一个减少了很多文件。比如你没有使用CAN、SPI…等外设,就不会拷贝相关库文件到你工程下。建议使用此项,这样工程路径改变不影响编译。
  • 3.Add necessary library files as reference in the toolchain project configuration file 在工具链项目配置文件中添加必要的库文件作为参考。这里没有复制HAL库文件,只添加了必要文件(如main.c)。相比上面,没有Drivers相关文件。

4.2.2 Generated files 生成文件

这里可以多选,每项可选择:是or不是。

  • 1.Generate peripheral initialization as a pair of’.c/.h’ files per peripheral 每个外设生成独立的’.c/.h’文件不勾:所有初始化代码都生成在main.c勾选:初始化代码生成在对应的外设文件。 如UART初始化代码生成在uart.c中。
  • 2.Backup previously generated files when regenerating 在重新生成时备份以前生成的文件重新生成代码时,会在相关目录中生成一个Backup文件夹,将之前源文件拷贝到其中。
  • 3.Keep User Code when re-generating 在重新生成时保留用户代码比如:我在main.c中添加了一段代码,重新生成时,会在main.c中保留你之前自己添加的这段代码。注意:前提是这段代码写在规定的位置。也就是BEGIN和END之间。否则同样会删除。
  • 4.Delete previously generated files when not re-generated 删除以前生成,但现在没有生成的文件比如:之前生成了spi.c,现在重新配置没有spi.c,则会删除之前的spi.c文件

4.2.3 HAL Settings HAL库设置

  • 1.Set all free pins as analog (to optimize the power consumption) 将所有空闲引脚设置为模拟(以优化功耗)这个做低功耗产品时这个选项有必要勾选。
  • 2.Enable Full Assert 使能所有断言

4.2.4 Template Settings模板设置

1.Select a template to generate customized code
选择一个模板来生成自定义代码代码自定义生成模板。

第一项和第二项设置好,其他一般默认选项。

4.3 Advanced Settings

目前暂时只有两个选项:驱动选择和调用函数设置
在这里插入图片描述

4.3.1 驱动选择

目前主要就是针对工程中使用到的外设,选择HAL还是LL驱动(参看上图)。 提示:目前有些型号MCU的部分外设没有LL驱动。
注:ST公司提供了一套固件库函数包括ST标准库、LL库和HAL库,ST公司主推HAL库。

  • ST标准库:ST官方首先推出对底层寄存器封装的库,库思想是面向过程的,仅对寄存器进行了一层封装操作,适于初学STM32的人群。
  • LL库:操作底层硬件的库,配合CubeMX开发,适于追求效率需要加快开发周期的人群。(新推出,配合HAL库,可以认为是ST库移植到Cube下的实现。)
  • HAL库:面向对象的,操作抽象层的,经过多层封装对功能进行集成,对硬件要求不高,适于开发应用人群。

4.3.2 调用函数

主要关心后面两个选项:Not Generate Function Call 和 Visibility (Static)。

  • a. Not Generate Function Call不生成函数调用也就是你代码不调用对应初始化函数。比如:你GPIO项勾选Not Generate Function Call,你main.c函数中就不会调用MX_GPIO_Init这个函数。
  • b. Visibility (Static)可见性(静态)这个就是初始化代码声明为static。
    注意:A.有些选项是是默认值,不能修改。如SystemClock_Config配置不声明为ststic.
    B.使用static是配合上面Code Generator代码生成章节中Generated files生成文件使用。如果都生成.c .h独立文件了,就不会生成static了。

参考:https://xw.qq.com/cmsid/20211108A05SFS00

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32CubeMX 新建工程详细步骤 的相关文章

  • 使用 STM32CubeMx + VSCode 开发 STM32

    使用 STM32CubeMx 43 VSCode 开发 STM32 目的 1 使用 STM32CubeMX配置STM32开发板 xff0c 生成Makefile工程 2 使用 VSCode 开发并调试 环境及工具 1 STM32CubeMx
  • STM32CubeMX 新建工程详细步骤

    STM32CubeMX 新建工程详细步骤 1 MPU CPU选择step1 打开CubeMX 软件 xff0c 在主页面上 点击如下按钮 xff0c 进入芯片选择界面step2 在Part Number Search 栏搜索我们需要用到的芯
  • STM32F767+STM32CubeMX I2C通信读写EEPROM数据(采用轮询、DMA、中断三种方式)

    STM32F767 43 STM32CubeMX I2C通信读写EEPROM数据 xff08 采用轮询 DMA 中断三种方式 xff09 摘要 前言 作为一名STM32的初学者 xff0c 在学习过程中会遇到很多问题 xff0c 解决过程中
  • STM32CubeMX之定时器PWM输出

    STM32CubeMX之定时器PWM输出 知识百科 PWM简介 PWM是一种对模拟信号电平进行 数字编码 的方法 通过高 分辨率 计数器的使用 xff0c 方波的占空比被调制用来对一个具体 模拟信号 的电平进行编码 PWM信号仍然是数字的
  • STM32CubeMX代码第一次烧录后无法再识别STM32

    本文记录的是我在烧录时出现的问题 xff0c 具体细节会因为使用的软件或者STM32不同而不同 在使用STM32CubeMX生成的代码 xff0c 经过keil5编写后 xff0c 使用usb接口烧录进STM32然后发现keil5中再也识别
  • STM32CUBEMX的freertos一般使用方法笔记

    一 使用STM32CubeMX创建FreeRTOS操作系统 LED闪烁的配置 接下来配置时钟 xff0c 点击生成 此处为用户代码编写处 xff1b 开启这个选项便可以使用更加精确的延时 在代码区添加 便可以 xff01 二 任务挂起和取消
  • 用Stm32CubeMX在STM32F107上移植LWIP(PHY:DM9161A)

    背景 有一块吃灰7年的神州IV号开发板 xff0c 主控芯片STM32F107VCT6 xff0c PHY芯片DM9161A xff0c 配套的资料都是当年ST的标准库 这个开发板应该是因为当年上市太匆忙 xff0c 资料和代码的细节部分做
  • stm32cubeMX+FreeRTOS(4)—— main函数while循环

    0 发现 想在主函数中打印一下串口数据 xff0c 发现一直打印不出来 xff0c 试了下开关小灯 xff0c 发现没有进main函数的while循环 xff0c 阿西吧 xff0c 我大概要重新看一下CubeMX的rtos架构了 本来打算
  • 【stm32CubeMX】基于STM32F103C8T6的LED闪烁并用Keil的软件仿真逻辑分析仪功能观察

    stm32CubeMX 基于STM32F103C8T6的LED闪烁并用Keil的软件仿真逻辑分析仪功能观察 一 安装STM32CubeMX二 安装HAL库三 新建项目四 keil仿真调试五 实现六 总结七 参考资料 一 安装STM32Cub
  • STM32Cube IDE与MX区别?STM32CubeMX介绍、下载与安装

    一 STM32Cube IDE与MX区别 xff1f cubeIDE 61 cubeMX 43 Keil 如您用 keil cubeIDE 61 cubeMX 43 IAR 如您用 IAR cubeIDE 61 cubeMX 43 STUD
  • STM32CubeMX的下载以及安装

    第一步 xff1a 安装应用软件 下载STM32CubeMX软件并安装 xff1b 第二步 xff1a 安装MCU固件包 在线安装用户所选的STM32微控制器对应的MCU固件包 具体操作步骤如下 xff1a 软件的下载地址 xff1a ht
  • STM32CubeMX在FreeRTOS下使用串口进行数据收发(不定长度)

    STM32CubeMX gt FreeRTOS 43 USART接收不定长数据 由于本人做的一个项目功能相对复杂 xff0c 要求使用操作系统 xff0c 且项目工程中有很多需要串口操作的外设 xff0c 所以需要对串口设计不定长的收发功能
  • 【STM32CubeMX】使用STM32F103C8T6输出PWM波形实现呼吸灯

    STM32CubeMX 使用STM32F103C8T6输出PWM波形实现呼吸灯 一 关于PWM二 Cube MX创建工程三 修改代码四 效果展示五 总结六 参考与代码下载 一 关于PWM 1 关于PWM 含义 PWM xff08 Pulse
  • STM32CubeMX配置串口DMA传输实现不定长数据收发

    串口简介 串口是全双工的串行通信协议 串口通信指串口按位 xff08 bit xff09 发送和接收字节 xff08 一个字节有8位 xff09 尽管比特字节 xff08 byte xff09 的串行通信慢 xff0c 但是串口可以在使用一
  • STM32CubeMX串口通讯

    串口的简单介绍 RS 232与TTL 根据通讯使用的电平标准不同 xff0c 串口通讯可分为 TTL 标准及 RS 232 标准 而STM32的串口是TTL电平标准的 如果需要使用到RS 232则需要一个电平转换芯片 单工通信 半双工通信和
  • Keil编辑和STM32cubemx配置STM32控制步进电机

    使用Keil ARM V5 IDE编程和STM32CUBEMX代码配置实现STM32F103和步进电机驱动器模块A4988控制步进电机 Keil和Stm32cubemx 安装 安装Keil IDE非常简单 下载包含Keil IDE的MDK
  • STM32CUBEMX F103 HAL库开发 两路定时器的Encoder编码器模式

    机器人开发过程中 对于直流电机来说 编码器至关重要 它不仅可以使我们对电极进行精确的速度闭环 位置闭环 还可以通过时间积分 根据运动学关系 获得速度 位置等信息 STM32的定时器有编码器模式 大大的方便我们的开发 使用STM32cubeM
  • STM32CubeMX时钟源的选择

    使用STM32CubeMX进行时钟源RCC配置的时候 可以选择使用内部时钟或外部时钟 当程序对时钟精度要求较高时 通常使用外部时钟 下拉选框如下图 Disable 禁用外部时钟 BYPASS Clock Resource 外部有源晶振 旁路
  • STM32CubeMX配置GPIO外部中断

    前言 用PA0来检测按键的输入信号 当按键按下时会由低电平变为高电平 1 配置RCC时钟 将RCC的High Speed Clock HSE 配置为Crystal Ceramic Resonator 将主频设置为72MHz 2 配置GPIO
  • VS Code 有没有办法导入 Makefile 项目?

    正如标题所说 我可以从现有的 Makefile 自动填充 c cpp properties json 吗 Edit 对于其他尝试导入 makefile 的人 我找到了一组脚本 它们完全可以实现我想要实现的目标 即通过 VS Code 管理

随机推荐

  • Opencv之边界跟踪

    问题描述 一般是将二值化后的图像进行边界的提取 需要说明的是这个提取不是简单的找到边界 xff0c 而是按照顺序的找出来 即边界上的点是按照邻接关系依次给出 相关算法 xff08 1 xff09 这里解释 xff1a https blog
  • OpenCV之滤波

    图像滤波 xff0c 指在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制 xff0c 是图像预处理中不可缺少的操作 xff0c 其处理效果的好坏将直接影响后续图像处理和分析的准确性 这里有个概述 xff0c 很好的 xff1a Ope
  • C++文件读写

    这个不错 xff1a C 43 43 文件读写详解 xff08 ofstream ifstream fstream xff09 C 43 43 文件读写详解 xff08 ofstream ifstream fstream xff09 c 4
  • python及其工具

    目录 1 conda xff1a 包管理器2 Anoconda xff1a 开源的包 环境管理器3 labelme4 tensorflow5 cuda和cudnn6 使用yml文件创建环境并安装文件6 1 yml文件由来6 2 如何获得ym
  • C++之文件操作移动、复制、重命名

    1 C 43 43 笔记之CopyFile和MoveFile的使用 2 删除和重命名 include lt fstream gt include lt windows h gt 与opencv的命名空间CV有冲突 xff0c 不能在一个文件
  • (转)C#数字转固定长度的字符串

    转 C 数字转固定长度的字符串
  • 进程监视工具

    Process Monitor 搜索能下到 xff0c 记下 xff0c 以后用 Process Monitor分析某个应用行为 Process Monitor 系统进程监视器 介绍教程 Using Process Monitor 帮助文档
  • UML建模工具Enterprise Architect(EA) -- 安装及简单使用

    目录 一 什么是EA xff1f 二 安装EA 三 为什么要学会用EA 四 创建EA工程 五 创建类视图 xff0c 构建类和接口 六 选中模型目录 xff0c 自动检出Java代码 七 构建内部类 八 趁热打铁 xff0c 构建数据表视图
  • SVN目录结构与分支等

    TortoiseSVN打分支 合并分支 切换分支 SVN创建分支 合并分支 切换分支
  • WPF上下标

    这里有个介绍的文章 xff1a 定义显示的上标和下标 里面介绍了三种方法 我之前有的是这个方法 xff1a Typography Variants 61 Superscript xff0c 如下所示 xff1a lt TextBlock g
  • [WPF] HamburgerMenu

    有两个库支持的 xff1a Metro App库中的 VS自己的控件 xff1a https docs microsoft com zh cn windows communitytoolkit archive hamburgermenu
  • 面积误差三种计算表达的比较

    引自 xff1a 面积误差三种计算表达的比较 有三种理论 xff0c 最基本的经典的 xff0c 引用一个吧 xff1a 网上有个题目 xff0c 求桌面面积的测量结果 桌面为矩形 用米尺测量 xff0c 长L为100 0 cm xff0c
  • 【转】WPF:Canvas中元素的定位

    概述 xff1a Canvas中的元素的大小和位置都是相对于Canvas容器的 xff0c 他的左上角为原点 xff0c 长度也是相对于他的 WPF xff1a Canvas中元素的定位 https blog csdn net chz cs
  • 【转】C#中计时

    一般可以用Environment TickCount xff0c 但是25天后会翻转 有很多 xff0c 见下面两个转的 C 中精确计时的一点收获 https www cnblogs com jintianhu archive 2010 0
  • 利用python分析微信聊天记录

    文章目录 前言一 任务分析二 工具三 步骤1 数据获取获取DB计算密码导出数据库 2 数据清洗 xff08 具体方法以后补充 xff09 3 数据分析 前言 昨天跟女朋友讨论谁给对方发的消息比较多 xff0c 两人各执一词 xff0c 事实
  • C++学习之模板

    文章目录 xff1a 一 模板 二 函数模板 三 类模板 一 模板 模板 也称泛型编程 泛型编程 xff1a 编写与类型无关的通用代码 xff0c 是代码复用的一种手段 模板是泛型编程的基础 在这之前我们可以利用C 43 43 的函数重载来
  • ROS2 创建python包

    1 创建python包 ros2 pkg create build type ament python span class token string 39 demo 39 span dependencies rclpy 以上指令为创建一个
  • Springboot集成SpringSecurity过程中遇到的问题

    Spring Security 开发文档 xff1a https www springcloud cc spring security zhcn html 一 配置的免登录访问接口不生效 span class token annotatio
  • 在sublime text3中配置c/c++运行环境

    在参考网上诸多大神配置sublime text3后 xff0c 自己也想写一篇有关在sublime中配置c c 43 43 的运行环境的文章 xff0c 顺便总结一下 安装sublime text3 xff1a 下载地址 xff08 官方地
  • STM32CubeMX 新建工程详细步骤

    STM32CubeMX 新建工程详细步骤 1 MPU CPU选择step1 打开CubeMX 软件 xff0c 在主页面上 点击如下按钮 xff0c 进入芯片选择界面step2 在Part Number Search 栏搜索我们需要用到的芯