背景

了解了 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. All in One:Prometheus 多实例数据统一管理最佳实践

    01 引言 Prometheus 作为目前最主流的可观测开源项目之一,已经成为云原生监控的事实标准,被众多企业广泛应用.在使用 Prometheus 的时候,我们经常会遇到全局视图的需求,但是数据确分 ...

  2. 07 mapping索引操作

    目录 版本 获取健康值 获取所有索引的信息 创建索引 1. 自动推导 2. 自定义 判断索引是否存在 新增字段 新增记录 查询记录 获取mapping信息 删除索引 添加别名 查看别名 索引备份数据 ...

  3. Could not find mimemagic-0.3.2 in any of the sources

    rails s报如下错误 Could not find mimemagic-0.3.2 in any of the sources Run `bundle install` to install mi ...

  4. three.js教程1-快速入门

    1.项目开发环境引入threeJs 如果采用的是Vue + threejs或React + threejs技术栈,threejs就是一个js库,直接通过npm命令行安装就行. npm安装特定版本thr ...

  5. Metabase 安装和使用教程

    Metabase 是一款开源的数据分析和商业智能工具,允许企业用户在几分钟内搭建起一个功能完善的数据探索和数据分析平台,不需要编写复杂的 SQL 查询语句或者使用专业的数据可视化工具,就可以轻松地探索 ...

  6. hadoop部署2

    完全分布式部署介绍 学习目标 完全分部式是真正利用多台Linux主机来进行部署Hadoop,对Linux机器集群进行规划,使得Hadoop各个模块分别 部署在不同的多台机器上. 能够了解完全分布式部署 ...

  7. ansible api调用及二次封装详解

    ansible 2.7调用 程序 import json from collections import namedtuple from ansible.parsing.dataloader impo ...

  8. Spring6 对 集成MyBatis 开发运用(附有详细的操作步骤)

    1. Spring6 对 集成MyBatis 开发运用(附有详细的操作步骤) @ 目录 1. Spring6 对 集成MyBatis 开发运用(附有详细的操作步骤) 每博一文案 2. 大概的实现步骤概 ...

  9. nginx优化实践与验证

    nginx优化实践 实践场景1: 单台nginx 2核4G 实践场景2: 三台nginx 2核4G 压测工具:WRK 初始安装的nginx压测: yum install -y nginx 安装WRK压 ...

  10. 用Python脚本迁移MongoDB数据到金仓-kingbase数据库

    1.首先需要明确MongoDB与kingbase的对应关系,collection相当于table,filed相当于字段,根据这个对应关系创建表: 此次迁移的MongoDB里的数据字段是:_id(自动生 ...