前言

STM32CubeMX 简介

STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者,允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用,

提高开发效率。STM32CubeMX几乎覆盖了STM32 全系列芯片。

在CubeMX上,通过傻瓜化的操作便能实现相关配置,最终能够生成C语言代码,支持多种工具链,比如MDK、IAR For ARM、TrueStudio等 省去了我们配置各种外设的时间,大大的节省了时间。

并且随着 ST停止了标准库的更新,ST官方大力推荐CubeMX与HAL库的使用,虽然现在还是标准库的主场,但是CubeMX的使用率在逐年提高。

关于STM32CubeMx的安装教程,可以参考其他博主的博客,在这里不进行讲述,注意英文路径即可

本文将讲述 STM32Cube MX的界面介绍、基础设置配置、配置之后的简单使用,不同外设的使用将会在之后博客中详细介绍。

一、STM32CubeMx 界面介绍

首先先看一下STM32CubeMx 的主界面

image.png

新建工程一般选择中间的 ACCESS TO MCU SELECTOR

如果有其他需求也可以选择其他的


File 界面

image.png

Windows 界面

image.png

Help 界面

image.png


Updater Settings 界面

image.png

二、STM32CubeMx 使用教程

新建工程

首先新建工程,这里选择使用第一种新建工程的方式

image.png

如果芯片信息没有更新,会跳出更新界面,继续更新和跳过更新都行

接下来进入选择芯片界面

image.png

在(1)位置输入想要使用的芯片型号,在(2)位置选择详细的芯片类型,最后在(3)位置开始建立一个工程

创建完成之后进入下一个界面

image.png


在这个界面中有三个部分

(1)是MCU的外设选择界面,在这里选择使用的MCU外设资源

有两种排序方式: Categories 种类选择 、 A-Z 顺序选择

(2)是详细的外设配置界面,关于每个外设的详细参数都在这里配置

(3)是芯片设置预览界面,预览每个引脚在什么位置和配置了什么功能

另外 配置引脚相应的功能可以在(1)外设选择界面,也可以在(3)预览界面直接点击相应的引脚进行配置

例如想配置PC13引脚输出高电平,可以直接在(3)界面点击PC13引脚

image.png

由上图可知,PC13引脚可以配置为RTC时钟模式、输入模式、输出模式、以及中断模式等等,详细功能会在之后博客中介绍。


image.png

另外在配置界面,出现淡黄色表示为不可配置引脚,电源专用引脚以淡黄色突出显示。其引脚不可进行其他用途配置。


image.png

这种颜色表示配置了一个I/O口的功能,但是没有初始化相对应的外设功能 ,引脚处于no mode 状态,也就是引脚进行了资源分配,但是在详细配置界面没有初始化操作。

image.png

如果配置完成之后显示绿色,则表示配置成功。

接下来介绍一些工程中通用的配置操作:

配置RCC时钟参数

image.png

将外部高速时钟(HSE)配置为Crystal/Ceramic Resonator(晶体/陶瓷谐振器),也就是使用外部晶振作为时钟源,外部低速时钟(LSE)用不到,可以不配置。

如果不配置RCC时钟,则是默认使用内部高速时钟(HSI),这也将影响之后时钟树的配置。

推荐将RCC时钟配置外部晶振

配置SYS参数

image.png

Debug :

默认是关闭的,如果不使用调试器关闭即可,即No Debug;

在STM32CubeMX的SYS选项栏中有SW和JTAG协议选项,用户可以根据需要选择相应的协议;

JTAG调试接口(JTAG-DP)需要5个引脚;CubeMX中可选择5pin或4pin的JTAG,5pin比4pin多了一个复位引脚。

SW调试接口(SW-DP)需要2个引脚。二者之间有复用引脚。SW调试端口采用同步串行协议:SWCLK引脚为从主机到从机的时钟信号;SWDIO为双向数据信号。

ST-Link采用的是SW调试接口,选择Serial Wire ;

J-Link采用的是JTAG调试接口,根据实际要求选择 JTAG(4pin) 或者 JTAG(5pin) ;

如果使用J-Link 但是采用SWD协议,也可以选择Trace Asynchronous Sw ;

Trace Asynchronous Sw 模式有时候也可以解决使用ST-Link 烧录之后无法烧录和调试的情况

为了避免一次烧录之后无法下一次烧录或者调试的情况, 推荐选择Serial Wire

如果在STM32CubeMX中选择SW协议,MDK 也必须 选择SW协议。JTAG协议配置也同理。否则会造成下载和调试失败。在实际项目中SW协议使用使用的比较多,速度更快,占用的引脚更少,推荐配置成SW协议,即Serial Wire模式;

System Wake-Up :

设置低功耗模式下的自动唤醒功能,通过引脚PA0。

Timebase Source :

一般指HAL的时基,即HAL库中的uwTick,用于实现HAL_Delay()以及作为各种timeout时钟的基准。一般情况下直接选择默认的Sys Tick(嘀嗒定时器)来维护SYS Timebase Source即可,即直接放在SysTick_Handler()中断服务函数中,

也就是下面的HAL_IncTick()函数。

配置时钟树

image.png


如果在前面RCC时钟配置中,选择使用外部晶振,在这里选择使用外部高速时钟模式(HSE);如果没有配置RCC时钟,则使用默认的内部高速时钟(HSI);

然后配置PLL锁相环,之后倍频更改系统主时钟;

推荐使用最大时钟频率,这里是72M

如果不清楚RCC时钟树,可以参考我之前写的一篇博客,STM32基础知识(三)– 系统时钟RCC详解


快速配置最大时钟频率,可以直接修改(3)系统时钟,直接改成72M,然后回车就行


Project(工程设置)

image.png

注意:项目路径和项目名称最好使用英文,否则后期可能会存在一些奇奇怪怪的错误

Code Generator(代码生成器)

image.png

Copy all used libraries into the project folder

将HAL库的所有.C和.H都复制到所建工程中

优点:这样如果后续需要新增其他外设又可能不再用STM32CubeMX的时候便会很方便

缺点: 体积大,编译时间相比于其他选项非常长

Copy only the necessary library files

只复制所需要的.C和.H

优点:体积相对小,编译时间短,并且工程可复制拷贝

缺点: 新增外设时需要重新用STM32CubeMX导入

Add necessary library files as reference in the toolchain project configuration file

不复制文件,直接从软件包存放位置导入.C和.H

优点:体积小,比较节约硬盘空间

缺点: 复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径

根据自己需求选择就行,一般来说第一个和第二个都行;

工程创建

image.png

三、结合Keil 的使用教程

首先在上一个界面,打开文件夹和打开工程都可以;

打开工程文件以后,首先点击魔术棒进行设置;

image.png

在魔术棒设置界面,进入(1)Debug界面,在(2)位置选择自己使用的下载器,然后进入(3)Settings界面;

image.png

在Settings界面 ,根据之前在STM32CubeMx里面SYS设置的,进行选择这里使用的SW还是JTAG协议;

注意STM32CubeMx 和 MKD 里面协议要一致,否则无法进行调试

代码书写

image.png


代码要写在 /* XX CODE BEGIN*/ 和 /* XX CODE END*/ 之间,否则下次再STM32CubeMx里面加东西,再生成工程的时候,就会把不在这个区域里面的代码删掉。


补充

STM32的三种开发模式

1、STM32能基于寄存器开发,直接对寄存器进行编程。基于寄存器编写的代码简练、执行效率高。但由于 STM32 微控制器的片上外设和寄存器数量太多,这种编程方式移植性差,寄存器编程比较复杂。

2、基于ST官方的固件库进行开发。现在大部分STM32教程教的都是这种库函数开发,如正点原子,野火等。他相比寄存器开发更加简单,不需要记住每个寄存器的地址和名称,只要会调用ST官方封装好的库函数进行编程就可以了。

3、基于STM32CubeMx进行开发,使用的是ST官方新推出的HAL库,可以通过软件内设计好的图形化界面进行配置,软件自动生成生成配置代码,然后我们再在IDE上面代码编写。

单片机的三种烧录模式

ICP:使用SWD接口进行烧录,如J-Link烧录器和J-Flash软件配合使用。

ISP:使用引导程序(Bootload)加上外围UART/USB等接口进行烧录。

IAP:软件自身实现在线电擦除和编程的方法,不使用任何工具。程序通常分成两块,分别为引导程序和应用程序。

————————————————

版权声明:本文为CSDN博主「Dir_xr」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Dir_x/article/details/128846252