【STM32】STM32标准库与HAL库对照学习教程二--库函数模板创建
STM32全部教程
:【STM32】标准库与HAL库对照学习系列教程大全
一、前言
本章内容是使用库函数开发STM32的前提,以STM32F103zet6为例,本章分标准库配置和cubemx配置HAL库两部分,可以在目录中选择自己想要看的部分,点击跳转就行了。
二、标准库函数模板创建
标准库函数建立所需要的文件我放在了网盘链接里,可以自行下载。
网盘链接:https://pan.baidu.com/s/1bYdnK9j6b8ze4wAFs0FRd
密码:6muu
1、新建模板文件
(1) 新建一个文件夹,命名为“标准库函数模板文件” 。
(2)在新建文件夹下, 在新建三个文件夹,命名为:“Obj 文件夹”、“User 文 件 夹”、“Libraries 文件夹”。
- Libraries 文件夹:用于存放CMSIS标准和STM32外设驱动文件。
- Obj 文件夹:用于存放keil编译产生的 c/汇编/链接的列表清单、调试信息、 hex 文件、预览信息、封装库等文件。
- User 文 件 夹: 用 于 存 放用 户 编 写的 main.c 、stm32f10x.h 头 文 件、 stm32f10x_conf.h配置文件、stm32f10x_it.c和stm32f10x_it.h中断函数文件。
(3)在Libraries 文件夹下新建两个文件命名为:CMSIS、STM32F10x_StdPeriph_Driver。
- CMSIS文件夹:用于存放 一 些CMSIS标准文件和启动文件 。
- STM32F10x_StdPeriph_Driver文件夹:用于存放STM32 外设驱动文件。
(4)在CMSIS文件夹下放置以下文件:
文件在我给的网盘链接文件:STM32最新固件库v3.5\Libraries\CMSIS\CM3\CoreSupport 路径下
文件在我给的网盘链接文件:STM32最新固件库v3.5\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm路径下
文件在我给的网盘链接文件:STM32最新固件库v3.5\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x路径下
汇总图
(5)在STM32F10x_StdPeriph_Driver文件夹下放置以下文件:
两文件直接从我给的网盘链接文件:STM32最新固件库v3.5\Libraries\STM32F10x_StdPeriph_Driver路径下复制
inc文件夹里有:
src文件夹下有:
可以知道两文件夹下放的是各类外设的驱动文件。
(6)在User文件夹下放置以下文件:
文件在我给的网盘链接文件:STM32最新固件库v3.5\Project\STM32F10x_StdPeriph_Template路径下
文件在我给的网盘链接文件:STM32最新固件库v3.5\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x路径下
汇总图
到此文件建立完毕。
2、新建工程添加文件
(1)打开keil5软件新建工程
(2)工程名根据喜好命名,但是要注意使用英文,如果使用中文名可能会出现一些奇怪的错误,这里我们命名为 Template,文件点击保存在最开始创建的 “标准库函数模板文件”的文件夹下。
(3)选择芯片类型,这里我们选择STM32F103ZE,点击OK。
(4)随后点击Cancel
(5)根据文件类型创建目录,点击OK
- 这样做为了工程目录更加清晰及方便文件查找,新建User、Startup、StdPeriph_Driver和CMSIS工程组。
- User组用于存放User文件夹下的源文件,Startup组用于存放STM32的启动文件,StdPeriph_Driver组用于存放STM32外设的驱动源文件,CMSIS组用于存放CMSIS标准文件。
(6)添加文件到目录下
- 我们发现这里我们只创建了User、Obj、Libraries文件夹,却多出了另外2个文件夹Objects和Listings,这是因为使用KEIL5创建工程时默认会产生这两个文件夹用于存放程序编译后的列表文件及HEX等文件,这里我们将这两个文件夹删除。
- 文件类型我们需要选择为“All files(.)”,这样我们才看到所有类型的文件
所有文件添加到对应目录下后,如图所示:
(7)双击main.c文件,删除里面所有内容后,修改为:
3、配置魔术棒
(1)打开魔术棒,点击Target,勾选微库“UseMicroLib”。主要是为了后面printf重定向输出使用,不然会出现各种奇怪的现象。配置如下:
(2)点击Output,点击Select Folder for Objects 把输出文件夹定位到我们工程目录下的Obj文件夹下,勾选CreateHEXFile,使编译的过程中生成hex文件配置如下:
(3)点击Listing,点击Select Folder for Objects ,把输出文件夹定位到我们工程目录下的Obj文件夹下,配置如图:
(4)C/C++配置(重点)
- 点击C/C++因为创建的是标准库函数模板,所以需要在对处理器类型和库进行宏定义,在Define这里复制这两个宏:USE_STDPERIPH_DRIVER,STM32F10X_HD,如图所示:
- 点击Include Paths设置文件路径
配置好的路径如下
(5)配置Debug,我用的是普中官方给的串口下载软件,不用配置Debug,但还是给大家讲一下。
- 当你的仿真器安装好驱动并且连接了电脑和板子,那么就可以开始配置了。具体的配置如下:
- 点击Settings,选择Port,选择“SW”。配置如下:
SW与JTAG是仿真方式,建议大家使用SW模式,如果使用JTAG模式的话,后面有些例程是占用了一部分管脚的,这个在cubemx中有配置如:
- 点击Flash Download,勾选Reset and Run。配置如图:
Reset and Run选项中,如果勾上的话,当程序下载进去后自动复位运行,如果不勾上,程序下载进去后需按下开发板上复位键才能运行。通常我们选择勾上。
4、编译运行
点击编译
可以从左下角看出,是0错误,0警告。
图标1中
- 第一个编译是对单个文件编译。
- 第二个编译是对工程中修改过的文件进行编译。
- 第三个编译是对工程中所有文件进行编译。
通常我们使用的是中间那个编译,效率比较高。
到这里整个标准库模板创建结束。
三、使用cubemx创建HAL库函数模板
1、cubemx功能介绍
cubemx主界面
(1)已建立的工程
Open Existing Projects:打开项目工程。
(2)新建工程
- Start My project from MCU:从MCU开始新建项目。(经常用)
- Start My project from STBoard:从ST开发板开始新建项目。
- project from Cross Selector:从交叉选择器启动我的项目。
(3)软件包管理 - CHECK FOR UPDATE:检查更新软件和软件包。
- INSTALL/REMOVE:安装或移除软件包。
(4)关于STM32和外部工具 - About STM32:STM32芯片与以及相关图标。
- External Tools:相关ST公司推出的工具。
(5)相关网站
包括ST官网、YOUTube网等。
(6)菜单栏
File
- New Project:新建工程(Ctrl + N)
- Load Project:导入工程(Ctrl + L)
- Import Project:引入项目(Ctrl + I)
- Save Project:保存工程(Ctrl + S)
- Save Project As:另存工程(Ctrl + A)
- Close Project:关闭工程(Ctrl + C)
- Generate Report:生成报告(Ctrl + R)
- Recent Projects:最近工程
- Exit:退出软件(Ctrl + X)
- Window
- Outputs:输出信息
- Font size :设置字体大小,设置完成之后需要重新启动
- Help
- Help:帮助(F1)STM32CubeMX的用户手册。
- About:关于(Alt + A)STM32CubeMX的版本信息。
- Docs & Resources:文档和资源(Alt + D)。
- Refresh Data:更新数据(Alt + R) 更新MCU/BOARD数据,HAL库版本信息。
- User Preferences:用户设定,是否允许ST公司获取你的使用数据。
- Check for Updates:检测更新(Alt + C)。
- Manage embedded…:软件包管理(Alt + U)。
- Updater Settings:更新设置(Alt + S)。
2、cubemx配置生成文件
(1)点击ACCESS TO MCU SELECYOR,搜索要配置的芯片,双击确认。
页面功能如下:
(2)点击System Core,点击RCC,选择外部高速时钟HSE。
(3)点击SYS,点击Debug选项,选择SW调试(用到引脚要少一些,上面讲过)。
(4)点击Clock Configuration进行时钟树配置。
有关时钟树不懂的,可以看:【STM32】STM32标准库与HAL库对照学习教程特别篇–系统时钟RCC详讲
(5)点击Project Manager,选择配置。
这里有问题,文件路径不要有中文,要不然要报错。
点击Code Generator,选择配置
(6)点击GENERATE CODE,生成工程,点击close。
3、写程序的要求
(1)找到生成的文件,点击MDK-ARM文件,打开工程。
(2)打开main.c
(2)书写代码区。
对于没有强迫症的盆友,其实不用按什么区来写代码,只要代码写在BNEGIN与END之间,使用cubemx重新生成工程时,自己写的代码都不会被删除,分区只是为了方便自己找到对应代码区。
到这里使用cubemx生成HAL库模板工程就完成啦。
四、两文件对比
(1)文件结构对比。
标准库
HAL库
- 外设与核心驱动文件,标准库是在Libraries文件内,HAL库是在Drivers文件内。
- 用户使用文件,标准库是在User文件内,HAL库是在Core文件内。
- hex生成位置,标准库是在Obj文件内,HAL库是在MDK-ARM内的命名文件内。
(2)程序书写规则对比 - 标准库模板工程·中,可以在C语法使用正确的情况下,按自己的风格写。
- cubemx生成的工程中,需要在对应区域内写代码,否则重新使用cubemx生成工程时,会将自己写的程序删除。
(3)编译速度 - 标准库模板工程编译速度较快,可以根据需要添加对应的外设驱动文件。
- cubemx生成的工程编译较慢,因为其包含了所有的外设驱动文件,程序编译时要将这些文件都编译一下。
到这里库函数模板创建就介绍完了,重要的还是自己要多多练习,自己去发现问题,解决问题才行。