更正
2022.07.03
发现2.4一节中代码位置有问题, 没有添加到*USER CODE BEGIN …和USER CODE END…*之间,这样对代码的运行不会产生影响,但是如果更新CubeMX配置会导致代码丢失,更正如下:
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
STM32CubeMX+HAL手摸手教学
这个系列的博客主要是从0开始讲解STM32CubeMX和HAL库,需要有C语言的基础和一定标准库的基础。笔者也是刚入门,希望把我走过的弯路分享给大家,让大家少走一些弯路。如果有问题可以一起讨论、互相学习,也希望大佬们能给予指点,提出宝贵的意见。
目前该系列的博客如下(本帖长期更新):
STM32CubeMX+HAL(1)实现跑马灯_芜湖_的博客-CSDN博客
STM32CubeMX+HAL(2)实现基础按键_芜湖_的博客-CSDN博客
STM32CubeMX+HAL(3)实现简单串口通信_芜湖_的博客-CSDN博客
STM32CubeMX+HAL(4)实现外部中断_芜湖_的博客-CSDN博客
以下为原文
STM32CubeMX快速入门
前一阵用正点原子的mini板写了个初代指纹锁,然而由于自己的年少无知,代码几乎都是用寄存器来写的,导致代码的可移植性非常的差。因此决定学习一下CubeMX和HAL库。
文章目录
1.软件下载
1.1.更新JRE
如果你的电脑上已经有JRE则可以跳过这一步,如果不是最新版的还是建议更新至新版,不是最新版可能会导致CubeMX卡顿。
由于 STM32CubeMX 软件是基于JAVA环境运行的,所以需要安装 JRE (Java Runtime Environment)才能使用。安装JRE也非常简单,直接在官网Java | Oracle下载即可。在下载的同时可以把电脑上原先的老版JRE卸载,搜索java进行卸载即可:
下载好后安装即可。
1.2.配置CubeMX
1.2.1.下载CubeMX
在ST官网即可找到CubeMX的下载链接,具体访问STM32CubeMX - STM32Cube initialization code generator - STMicroelectronics即可。
在这里选择需要的版本即可,以windows为例。版本可以直接选最新版本的,如果有什么特殊的需求也可以选老版。下载这个ST会给你发一个邮件,收到邮件后即可完成下载。
1.2.2.安装CubeMX
安装的过程中有几步需要注意一下。
第一条必须选,是阅读须知;第二条的话可选可不选,内容大概是是否同意ST公司收集你的个人使用信息等。
创建快捷方式勾上就可以。
1.2.3.配置CubeMX
打开CubeMX,点击Help,选择Manage embedded software packages:
然后找到你使用的芯片系列即可,笔者使用的是正点原子mini板,芯片是STM32F103RCT6,因此下载F1系列的安装包:
版本下载最新的这个即可。
2.用CubeMX点个灯
正点原子mini板的芯片是STM32F103RCT6,两个LED分别为PA8和PD2,其他不同的硬件平台还需自己看一下原理图。
2.1.选择芯片
打开CubeMX,在File里面选择New Project,搜索想要的芯片:
如果这个芯片常用,可以添加到收藏,点一下五角星即可。这样在以后用这款芯片开发时,不需要再搜索,只需要点左上角的五角星即可,笔者这里收藏了F103RCT6和F103ZET6两款:
此外,还可以按需筛选芯片,点击左侧展开即可筛选,这里不再介绍,读者可以自己探索。
2.2.点灯相关配置
左侧可以更换两种显示方式,一种是按类别,一种是按A-Z显示,笔者选择的是A-Z:
2.2.1.SYS
在SYS中要选择Debug,如果不选的话则只可以烧录一次。或者严谨地说,也可以烧录,但是比较麻烦,为了少点麻烦最好选上。笔者使用的是ST-Link,选择如下:
在SDIO中选择Disable即可:
ST-Link虽然有两大排线,但是其实只用其中4根即可,一个VCC,一个GND,另外两个如图中所示:SWCLK和SWDIO。这部分先挖个坑,以后单独写一篇博客简单介绍一下,这里就不浪费篇幅了。
2.2.2.RCC
HSE选择Crystal/Ceramic Resonnatorm,使用外部晶振:
然后点击上方的Clock Configuration,进行如下时钟源配置:
2.2.3.LED
以PA8为例(LED0),点击PA8,选择GPIO_Output:
点击左侧GPIO,然后点击PA8的这一行表格:
在下方就可以进行配置了。进行如下配置:
第一行是IO口输出高电平,这是为了让LED灭,具体原因查看mini板原理图即可;
第二行是模式,设置为推挽输出;
第三行是选择上拉/下拉,这里选上拉,原因同样查看原理图;
第四行是速度,在标准库里是具体到多少MHZ,如50MHZ、10MHZ,而在HAL库中是LOW、MEDIUM、HIGH三种,这里选低就可以。
还可以取个名字,如LED0:
LED1配置同理。配置好后如下所示:
此时左边会有警告,这些都可以暂时不管:
2.3.生成工程
点击Project Manager进行如下配置:
第一行是工程名;
第二行是地址,地址不要包含中文;
第五行是IDE选择和版本号选择,按需选择即可。
然后在左侧点击Code Generater,笔者是这样配置的:
第一个框中是三选一:
第一行是将HAL库的所有.C和.H都复制到所建工程中,这样体积大,但不需要后续再加;
第二行是只复制所需要的.C和.H,这样体积小,但后续需要再加;
第三行是不复制文件,直接从软件包存放位置导入.C和.H,这样体积更小,但是复制到别的电脑上的话可能会有麻烦。
第二个框中是多选:
第一行是每个外设生成一对.c、.h文件作为外设初始化;
第二行是重新生成时备份以前生成的文件;
第三行是重新生成时保留用户代码;
第四行是当没有重新生成时,删除以前生成的文件。
读者可以自己决定。
配置完后即可在右上角点击生成代码:
2.4.在MDK中添加相关代码点灯
打开gpio.c,可以看到用HAL库设置高电平是用了如下的函数:
打开函数的定义,可以知道,如果设置低电平只需要将SET换成RESET即可。在main函数while循环中添加如下代码:
注意添加代码的时候都要添加到 USER CODE BEGIN … 和 USER CODE END… 之间,这样如果后期再更改CubeMX中的设置的话不会丢掉自己写的代码。
(已于2022.07.03更正)
2.5.烧录
笔者使用的是ST-Link,别忘了在Debug这里配置:
配置好后Download一下即可点灯成功: