背景

了解了 STM32 标准库以后,为了紧跟发展的潮流,我们以 CubeMx为基础 开始进行 Hal(Hardware Abstract Layer, 硬件抽象层)库的学习。

CubeMx 是一个 由 ST 推出的芯片图形化配置工具,为了使开发者尽可能地可以不再关心底层,允许用户使用图形化向导生成C初始化代码。

  • 直观的STM32微控制器的选择和时钟树配置
  • 微控制器图形化配置外围设备和中间件的功能模式和初始化参数
  • C代码生成项目覆盖STM32微控制器的初始化符合IAR,Keil的和GCC编译器。

对于新的产品设计,我们强烈推荐使用STM32Cube来加速你的开发过程,并为以后的产品平台移植打下良好的基础。

HOST-OS : Windows-10

STM32 Cube :v5.6

MCU : STM32F429

LIB : stm32cube_fw_f4_v1250

软件安装

使用 CubeMx 进行的开发是这样的: CubeMx 生成 代码 + 使用其他工具链进行修改与编译。

像我自己就用过以下2种方式:

  • CubeMx + Keil5 + STM32F429(真机)
  • CubeMx + Makefile + arm-none-eabi-gcc + GNU MCU Eclipse QEMU (仿真)

使用 CubuMx 时需要先安装好 JAVA 环境,需要安装 JRE 即可。

STM32-CubeMx:下载地址

软件的使用

好了,相信看到这里的读者已经安装好了CubeMx。

如果是第一次安装的话,也要把HAL的包下载好:

下载包(包的位置可以通过: Help -> Updater Settings中的Repository Folder重新指定)

1)打开软件

2)Alt + U 或者 Help --> Manage embeded software packages

3)勾选对应型号的包,Install now (stm32cube_fw_f4_v1250.zip)

Step 1

1)新建工程

Ctrl+L 或者 File -> New Project

2)可以根据 芯片型号\底板 进行选择;选定以后,还可以在Peripheral调节外设。

  1. 点击右上角的Start Project

Step 2

顶部的选择夹依次有4个子夹:Pinout & ConfigurationClock ConfigurationProject ManageTools

Pinout & Configuration

我们会看到软件有3个竖栏。

对于 芯片功能的选择可以 通过2种方式分类:CategoriesA->Z

  • Categories : 根据功能的不同进行分类
  • A->Z : 根据 功能的 英文排序进行分类

第一列

不管怎么样,我们注意到 SYS属性中有Debug设置,为了能够重复下载,我们不能选择"No Debug",建议选择Serial Wire

为了STM32能够合理地工作,我们需要在RCC中,做出这样的设置(此后我们需要根据时钟树直观地配置时钟):

  • High Speed Clock(HSE) : 选择Crystal/Ceramic Resonator

STM32CubeMX中外部时钟配置可选类型为 DisableBYPASS Clock Source(旁路时钟源)Crystal/Ceramic Resonator(石英/陶瓷 晶振) 三种类型。

旁路时钟源:指无需使用外部晶体时所需的芯片内部时钟驱动组件,直接从外界导入时钟信号。犹如芯片内部的驱动组件被旁路了。只需要外部提供时钟接入OSC_IN引脚,而OSC_OUT引脚悬空。

外部晶体/陶瓷谐振器(HSE晶体)模式:该时钟源是由外部无源晶体与MCU内部时钟驱动电路共同配合形成,有一定的启动时间,精度较高。OSC_IN 与 OSC_OUT引脚都要连接。

时钟的来源确定后需要配置芯片内部的多个时钟线,进入Clock Configuration页面,可以根据时钟树直观地配置时钟。

一般来说,stm32系统初始化要初始化:时钟>中断>外设;但因为是第一次新建工程,我们暂时不选择其他的东西。

最后一列

我们看到这里是一个芯片管脚的预览框。不同的引脚由不同的颜色显示其当前状态:

  • 黄色引脚为该功能的GPIO已被用作其他功能,可以忽略。
  • 绿色表示管脚已使用
  • 灰色代表该引脚没有被初始化

左键点击:点击引脚可以配置其功能

右键点击:可以为其添加自定义标签(类似注释)

配置以后的引脚可以根据配置的不同的功能,在左边看到配置属性,例如:

配置了GPIO以后,可以在第一列GPIO中看到有关的设置,我们可以在这里将其配置为推挽(Output Push Pull),上拉输入模式(Pull-up);或者配置为低速推挽输出模式,以及初始化输出(GPIO output level)高(High)。

Clock Configuration

时钟配置采用图形配置,直观简单。各个外设时钟一目了然:

  • 开启外部时钟8MHz、PLL Source Mux时钟来源于HSE
  • System Clock Mux时钟来源选择PLLCLK
  • 经过PLL(Phase locked loop, 锁相环)的分频与倍频后得到168MHz时钟
  • AHB Prescaler分频器设置1分频(不分频),得到168MHz的主频时钟,HCLK = 168MHz。

Project Manage

我们可以看到:ProjectCode GeneratorAdvanced Settings

Project

Project Setting 项目设置,填写以下内容:(注意不要出现中文,否则可能出错)

  • Project Name : 项目名称
  • Project Location : 项目位置
  • Toolchain Folder Location: 对应的工具链所在的目录,默认不改
  • Application Struture:应用程序结构(包含两个选项:Basic和Advanced。)

Basic:是基础的结构,一般不包含中间件(RTOS、文件系统、USB设备等)。

Advanced:相反就是包含中间件,一般针对相对复杂一点的工程。

当然,这两种生成的结构都比较基础,一般实际项目都会重新整理一遍软件架构。

  • Toolchain / IDE:根据需要选择即可(Keil 是 MDKARM)

Linker Settings 链接设置:可设置堆栈大小,此处默认不作修改。

Mcu and Firmware Package 微处理器与固件包:默认即可。

Code Generator

STM32Cube Firmware Library Package Cube固件包拷贝选项

A)Copy all used libraries into the project folder: 将所有使用过的库复制到项目文件夹中。

不管你用,还是没有用到,都拷贝到你工程目录下。这样一来,你工程下文件就比较多。

B) Copy only the necessary library file:只复制必要的库文件。

这个相比上一个减少了很多文件。比如你没有使用CAN、SPI...等外设,就不会拷贝相关库文件到你工程下。

C)Add necessary library files as reference in the toolchain project configuration file:在工具链项目配置文件中添加必要的库文件作为参考。

没有复制HAL库文件,只添加了必要文件(如main.c)。相比上面,没有Drivers相关文件。

Generated files 生成文件

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文件。

HAL Settings

1)Set all free pins as analog (to optimize the power consumption):将所有空闲引脚设置为模拟(以优化功耗)

做低功耗产品时这个选项有必要勾选。

2)Enable Full Assert:使能所有断言,相当于参数检查。

Advanced Settings

上下有两个选项:Driver Selector(驱动选择器)和Cenerated Funcution Calls(调用函数设置)。

Driver Selector 驱动选择器:可以选择 HAL 或者 LL (提示:目前有些型号MCU的部分外设没有LL驱动)

在CubeMx 的固件包中,LL库(Low Layer)是ST新增的库,与HAL捆绑发布的,由于它直接操作寄存器,更接近硬件层,对需要复杂上层协议栈的外设不适用。

Generate Function Call 生成函数调用

这里能够操作的只有两个选项:Not Generate Function Call、和Visibility (Static)

1)Not Generate Function Call 不生成函数调用 : 代码不调用对应初始化函数。

比如:你GPIO项勾选Not Generate Function Call,你main.c函数中就不会调用MX_GPIO_Init这个函数。

2)Visibility (Static) 可见性(静态):指 初始化代码声明为static。

提示:

A.有些选项是默认值,不能修改。如SystemClock_Config配置不声明为ststic.

B.使用static是配合上面Code Generator代码生成章节中Generated files生成文件使用。如果都生成.c .h独立文件了,就不会生成static了。

Tool 工具

这一个界面是与 分析有关的。初学者可以暂时跳过不理会。

注意事项

CubeMX 生成的代码 会有一些特殊的注释,这些注释对于 CubeMx 是有意义的,用户的代码只能写在位于 USER CODE BEGIN ...USER CODE END ...之间(自己建立的源码文件不受影响)。否则,当对于 CubeMx 进行重新配置的时候,代码可能会因为被覆盖而消失。例如:

int main(void)
{
/* USER CODE BEGIN 1 */
用户可编写的代码区
/* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init(); /* USER CODE BEGIN Init */
用户可编写的代码区
/* USER CODE END Init */ /* Configure the system clock */
SystemClock_Config(); /* USER CODE BEGIN SysInit */
用户可编写的代码区
/* USER CODE END SysInit */ /* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
用户可编写的代码区
/* USER CODE END 2 */ /* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
用户可编写的代码区
/* USER CODE END WHILE */ /* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}

STM32 CubeMX 学习:000-搭建开发环境的更多相关文章

  1. Java Learning 000 搭建开发环境

    Java Learning 000 搭建开发环境 你需要两个软件: * JDK (Java Develop Kit :Java开发工具包) * eclipse (eclipse 集成开发环境软件) 安 ...

  2. android学习一---搭建开发环境

    android基于Java并运行Linux内核上的轻量级操作系统.由于是基于java的,学习起来也不是太难,对java有一定了解并知道一些基本的图形用户界面,入门就很简单了. 一.了解JDK ,SDK ...

  3. perl学习笔记--搭建开发环境

    windows下perl开发环境搭建 perl下载地址:http://www.activestate.com/developer-tools 各个插件的安装方法:(通过代理上网的方法) 方法一:pad ...

  4. Scala - 快速学习02 - 搭建开发环境

    1- 下载与安装 下载链接:http://www.scala-lang.org/download/ CMD To run Scala from the command-line, simply dow ...

  5. Android开发学习——搭建开发环境

    在学校开课学习了android的一些简单的UI组件,布局,四大组件学习了2个,数据存储及网络通信,都是一些简单的概念,入门而已.许多东西需要自己去学习. 学习一下 Android开发环境的搭建,两种方 ...

  6. 【转】Esp8266学习之旅① 搭建开发环境,开始一个“hellow world”串口打印。

    @2019-02-28 [小记] Esp8266学习之旅① 搭建开发环境,开始一个“hellow world”串口打印.

  7. Hadoop学习笔记(4) ——搭建开发环境及编写Hello World

    Hadoop学习笔记(4) ——搭建开发环境及编写Hello World 整个Hadoop是基于Java开发的,所以要开发Hadoop相应的程序就得用JAVA.在linux下开发JAVA还数eclip ...

  8. Android开发系列之搭建开发环境

    接触Android好久了,记得09年刚在中国大陆有点苗头的时候,我就知道了google有个Android,它是智能机操作系统.后来在Android出1.5版本之后,我第一时间下载了eclipse开发工 ...

  9. 物理引擎Havok教程(一)搭建开发环境

    物理引擎Havok教程(一)搭建开发环境 网上关于Havok的教程实在不多,并且Havok学习起来还是有一定难度的,所以这里写了一个系列教程,希望可以帮到读者.这是第一期. 一.Havok物理引擎简单 ...

  10. ios搭建开发环境

    ios搭建开发环境 好久就想试水IOS开发了,由于开发环境限制,一直局限于理论和虚拟机,近来入手了MacBook Pro,也来尝尝鲜,笔者也是现学现总结,如果有不足,请指正. IOS开发必备MAC O ...

随机推荐

  1. Solution Set - 线段树

    A[洛谷P5787]无向图,每条边有一个出现时段,求每个单位时段图是否是二分图. B[洛谷P5227]无向图,询问删除一个边集后是否连通. C[洛谷P3733]连通无向图,边有权,加边.修改(增加的边 ...

  2. IDEA不能搜索插件解决方案

    前言 平时在idea中搜索插件的时候,总是加载半天都不出,最后加载好久什么也没搜到,看到一篇大佬的解决博客,完美解决现将解决步骤分享如下: 1.首先打开系统设置,选择 Pligins,点击设置按钮(用 ...

  3. 原生微信小程序

    new Date 跨平台兼容性问题 在 Andriod 使用 new Date("2018-05-30 00:00:00")木有问题,但是在ios 下面识别不出来.因为 IOS 下 ...

  4. 助力抗疫 Splashtop 远程控制软件限时免费

    近期国内疫情又有抬头趋势,给我们的工作.生活带来诸多不便.面对疫情,居家办公是一个兼顾安全健康和保持生产力的好办法.据了解,很多广州的企业现在已经在关注或开始部署远程办公方案. 为了帮助疫情中高风险地 ...

  5. 用 C 语言开发一门编程语言 — 异常处理

    目录 文章目录 目录 前文列表 异常捕获 定义 Lisp Value 函数 前文列表 <用 C 语言开发一门编程语言 - 交互式解析器l> <用 C 语言开发一门编程语言 - 跨平台 ...

  6. Git 合并冲突

    目录 文章目录 目录 合并冲突 合并分支 合并最近的两次提交 合并冲突 步骤: git status 找到冲突的文件 将冲突去除 将冲突文件重新加入临时区 git add egis/api/v1/ro ...

  7. FFmpeg开发笔记(二十一)Windows环境给FFmpeg集成AVS3解码器

    ​AVS3是中国AVS工作组制定的第三代音视频编解码技术标准,也是全球首个已推出的面向8K及5G产业应用的视频编码标准.AVS工作组于2019年3月9日完成第三代AVS视频标准(AVS3)基准档次的制 ...

  8. C# 根据波形图片,提取测试数据点 Winform

    其主要思路就是提取图片每个1px宽度上面的像素点,每个宽度只提取一个,并用Point记录这个像素点的 x和y.这样做的前提是图片除了波形有明显颜色以外,其他地方的像素点都能被排除,最方便的就是把排除区 ...

  9. mysql in不走索引可能的情况

    在MySQL 5.7.3以及之前的版本中,eq_range_index_dive_limit的默认值为10,之 后的版本默认值为200.所以如果大家采用的是5.7.3以及之前的版本的话,很容易采用索引 ...

  10. windows下载安装ipopt求解器 可用于pyomo调用

    方案一:采用官方编译的应用程序 官方对windows下有已经编译好的应用程序,只需要下载下来,并将ipopt的应用程序所在文件夹路径添加到系统全局环境变量就可以了.这样在利用pyomo或者其他建模工具 ...