STM32CubeMX入门教程(一)

01

STM32CubeMX软件简介

ABOUT STM32CubeMX

STM32CubeMX是ST公司推出的一种自动创建单片机工程及初始化代码的工具,适用于旗下所有STM32系列产品。此软件可以作为eclipse插件形式安装,也可以单独运行,需要安装JAVA运行环境。软件可以在ST官网上找到,安装过程非常简单,在此不详述。

建议采用管理员方式运行,因为ST对软件版本及其集成的库更新频繁,无管理员权限容易安装失败。

02

HAL库LL库简介

ABOUT HAL & LL

STM32CubeMX集成了HAL库和LL库,生成的代码也是基于这两个库。HAL库是ST标准库后推出的,设计采用高分层思想,当工程更改主控芯片后,所有函数几乎不需要任何更改。ST公司推出的F7系列32位单片机目前只有HAL库和LL库。

由于HAL库的高封装性,必然导致代码执行效率不高。如果编译器优化等级低,产生的二进制文件比较大。因此,ST又推出了LL库。LL库大多数API函数是直接调用寄存器,且很多函数写成宏形式,或者采用__INLINE内联函数,提高了代码执行效率。

HAL库和LL库按外设模块设计,配置时可选择响应模块用不同的库。

03

应用实例

Hello World

下面采用STM32F030C8T6这款芯片,简单配置一个工程。硬件电路如下所示。

设计要求:

芯片采用内部高速振荡器

主时钟配置成48MHz

采样SWD软件仿真下载接口

采用1路UART,配制成波特率2400,RS485通讯方式等。

控制LED0以1Hz闪烁(亮灭各500ms)。

1、软件界面

打开软件,显示界面如下。左下方三个选项,New Project用于创建一个芯片配置项目,Load Project用于加载以前的项目做修改,Help会打开软件安装目录下的一个帮助文档,有条件建议阅读一下。

2、新建配置工程

点击New Project创建一个新的配置工程,后面保存项目会在目录中生成一个.ioc文件,日后想修改工程可直接双击该文件。

首先软件需要我们选择一款开发芯片,其实就是一个STMCU Finder。STM32F030C8T6是一款STM32F0,F0x0 Value Line系列芯片。因此在“1”处勾选好。此时“2”处是具体芯片,选择STM32F030C8Tx双击确定。

另外,页面最上面,还有一个页。那是ST官方开发板评估板工程创建使用的。

3、管脚配置

选择芯片后,则进入配置界面。配置界面有4个页,从左到右分别是管脚及总体配置、时钟配置、外设配置、工程耗电量分析。

首先“1”处是可添加的第三方库,此处显示有两个FAT文件系统库和FreeRTOS实时操作系统。如果选择更高级的芯片,还会有其他相应的免费库。(真的太贴心了!老铁!)

再往下,“2”部分则是外设配置,相信都清楚是什么。右侧“3”处则是芯片总体显示。右侧芯片管脚配置会根据左侧设置自动变化,也可直接点击芯片管脚设置功能。将鼠标指针放在芯片区域,左键可拖动,滚轮可放大缩小。

首先,我们配置SWD仿真下载管脚,选择左侧SYS分栏,勾选debug serial wire。右侧两个管脚会自动选择相应功能。如下图。

再配置UART,选择USART1分栏,模式选择异步模式,勾选下面RS485硬件流控制,这样芯片在收发数据时,DE管脚会自动输出高低电平。此时,右侧相应管脚会自动变化。如下图。

最后,配置PB12管脚为推挽输出。直接单击PB12管脚,选择推挽输出即可。此时再右击该管脚,选择自定义标签,为该管脚命名为LED0。此处命名会在自动生成代码的main.h文件中宏形式定义。操作如图。

到此,管脚配置完成。

4、时钟配置

在选项页中选取第二个页Clock Configration,进行时钟配置。在主时钟处输入48,回车,确定。OK,配置完成!!

5、外设配置

选择第三项外设配置。红框中出现的外设根据第一页配置,因为我们只简单选择了USART1,因此只出现这个。

点击USART1按钮。首先基础参数配置,才最顶端波特率改成2400,其他不变。其他参数包括校验方式、数据位、停止位、溢出检测等,学习完USART功能后都会明白。

然后配置一下中断。此处我们希望采用DMA接收。选择DMA配置页。“1”点击添加,“2”选择串口接收,“3”配置地址增长,因为接收寄存器不变,所以只让DMA传输的存储地址增长,“4”传输数据宽度设置,“5”DMA传输模式设置。此处默认即可,具体功能在选完USART和DMA即完全明白。最后点击OK。

配置完USART,再配置NVIC。右侧可选择相应中断等级。注意!HAL库默认Systick中断最高优先级且不允许更改,即软件运行时,会产生1ms时基中断,在基于状态机编程模型中,这个太方便了!

最后,我们配置一下GPIO。界面如下。根据电路,初始化不希望LED点亮,因此,配置初始输出高电平。模式推挽输出。无上下拉。速度选择Low即可。最后点击OK。

04

生成工程配置

Config Project

最后一个页,模拟仿真芯片耗电,在此不做讲诉了。想学习的朋友可以打开Help文档进行学习。

配置完成,现在开始配置生成的工程。点击Project菜单,选择Setting。界面如下。

我们从上倒下详细讲解。

项目名称,即Project名称,建议用英文。因为在项目目录下会自动创建一个相应名称的文件夹存放编译中间文件。有些时候中文文件夹识别失败,调试时会出问题。

项目地址。软件会在选择的地址下创建一个项目名文件夹,工程文件全部在里面。

工具链地址。其实就是最后工程配置文件编译中间文件保存地址。会自动填写。

IDE类型。里面包含IAR、Keil MDK4、Keil MDK5、ST4STM、Makefile等开发软件。此处我用的Keil MDK5。

堆栈大小设置。采用默认值。

下面是Cube库(HAL和LL)文件位置,此处模式。MX软件会自动更新此处库文件为最新版本。

下一步,设置代码生成要求。

最上面是选择加入工程的文件,可以把全部库文件加入,也可只加入用到的文件。

Generated File处,第一个是让每一个外设有单独的.c和.h文件,模块化编程嘛。我一般喜欢勾选。第二个是如果日后更改配置重新生成文件是,是否备份以前的所有文件。第三个是当重新配置后,不更改用户自己编写的代码。这个我们勾选上,具体自己编写代码要写在正确位置才不会被擦除,后面再详述。

HAL Settings。第一个是自动配置所有没用到的GPIO为模式输入,为了省电。第二个使能断言。建议开发阶段使能断言,发布阶段取消,防止代码运行效率低。(断言说白了就是检测函数输入参数合理不)

最后是代码生成模版,默认即可。

最后一页配置。配置相应外设选择不同的库。此处我们就让GPIO选择LL库,其他选择HAL库,进行演示。

OK!配置完成啦!点击Project菜单选择Generate Code或者直接点击快捷按钮,那个齿轮按钮,生成工程。最后打开工程。

05

编程

CODE

打开工程后,配置Output、Listing、仿真器等,在此就不说了。另外,头文件也不用自己配置,软件已经配置完成。我们打开main.c文件,看一下主函数。

其中MX开头的几个函数是自动生成的初始化函数,外设已经被初始化配置完毕。

/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

类似上面两行注释,到处都是。用户必须在BEGIN和END之间编写代码,重新生成工程时才不会被覆盖掉。

下面编写UART接收5个字节缓存,LED0闪烁。代码如下。日后再详细讲解。

定义接收缓存:

开始UART DMA方式接收,编写LED驱动代码:

HAL开头函数是HAL库函数,LL开头函数是LL库函数。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171209G0PF8E00?refer=cp_1026

扫码关注云+社区