CubeMX 新建工程详细步骤
1.MPU/CPU 选择
step1: 打开CubeMX 软件, 在主页面上 点击如下按钮,进入芯片选择界面
step2: 在Part Number Search 栏搜索我们需要用到的芯片型号,比如这里我们选择 STM32F103C8
选中某一型号时,会在页面右边显示该芯片的详细参数和信息,其中 Features 可以查看该芯片的具体特点和外设, 还可以点击Datasheet 下载数据手册
在芯片选择页面的右下方有芯片的信息概要,比如这里包括该型号芯片的 引脚疯转,Flash, Ram, IO 数量, 主频等基本信息
确定了芯片型号之后,双击上图中我们选择的芯片,进入工程配置界面
2.片内外设配置
在工程配置页面中有外设配置,时钟配置,和工程配置。这里我们先讲解如何配置这些片内外设
CubeMX STM32所有外设都进行了分类,比如这里的 STM32F103C8T6 的所有外设就被分成了一共5类:
1)系统内核
2)模拟类
3) 定时相关
4) 通信相关
5) 中间件
上面的片内外设用户需要根据自己项目的使用情况而进行选择配置,但是对于绝大部分的项目来说 1)系统内核 中的 RCC&SYS 项都必须要进行设置
RCC配置,如果需要用 LSE / HSE 就需要在这进行配置
SYS配置, 关于 debug 口子的配置,默认它是认为我们不需要 debug 口的,所以如果不更改的话生成代码下载进去后 debug 口就关闭了
所以一般这里需要修改为 JTAG(4pin)
3.时钟配置
step1:
选中时钟配置栏,进入时钟配置界面
首先我们在这里对单片机的系统时钟源做一个简单的解释,对于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等外设,那就还需要另外配置低速时钟。至此我们时钟配置也就基本完成了。。。
另外列举了一些常用的时钟配置参数,设计时可以作为参考:
1. STM32F407VETx 选择 外部高速时钟 HSE时,需要设置的具体参数
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:工程名称
比如:Demo.uvprojx,以及对应工程里面目标名称。
B.Project Location:工程存放路径
这个容易理解。如:D:\Desktop\Test.
C.Application Struture:应用程序结构
这里包含两个选项:Basic 和 Advanced。
Basic:是基础的结构,一般不包含中间件(RTOS、文件系统、USB设备等)。
Advanced:相反就是包含中间件,一般针对相对复杂一点的工程。当然,这两种生成的结构都比较基础,一般实际项目都会重新整理一遍软件架构。
D.Toolchain Folder Location:工具链文件夹路径
这个是根据上面Project Name和Project Location得出来的,用户不能修改。
E.Toolchain/IDE:工具链选择
·EWARM V7 和 V8
·MDK-ARM V4 和 V5
·TrueSTUDIO
·SW4STM32
·Makefile
·其它
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.7.0
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 re-generating 在重新生成时备份以前生成的文件
重新生成代码时,会在相关目录中生成一个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
选择一个模板来生成自定义代码代码自定义生成模板可以参看最新(V28版)用户手册6.3节 Custom code generation内容。
4.3 Advanced Settings
目前暂时只有两个选项:驱动选择和调用函数设置
4.3.1 驱动选择
目前主要就是针对工程中使用到的外设,选择HAL还是LL驱动(参看上图)。 提示:目前有些型号MCU的部分外设没有LL驱动。
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了。