[野火]STM32HAL库开发实战指南-F7与H7系列
贡献与投稿
常见问题
·CPU:STM32F767IGT6·主频:216M
了解STM32的HAL库文件之后,我们就可以使用它来建立工程了,因为用库新建工程的步骤较多,我们一般是使用库建立一个空的工程,作为工程模板。以后直接复制一份工程模板,在它之上进行开发。
版本说明:MDK5.15(MDK即KEIL软件)
版本号可从MDK软件的“Help–>AboutuVision”选项中查询到。
教程文档用的是F767的配置,芯片配置可按板子所选
为了工程目录更加清晰,我们在本地电脑上新建一个“工程模板”文件夹,在它之下再新建6个文件夹,具体如下:
表111工程目录文件夹清单
名称
作用
Doc
用来存放程序说明的文件,由写程序的人添加
Libraries
存放的是库文件
Listing
存放编译器编译时候产生的C/汇编/链接的列表清单
Output
存放编译产生的调试信息、hex文件、预览信息、封装库等
Project
用来存放工程
User
用户编写的驱动文件
图111工程文件夹目录
在本地新建好文件夹后,把准备好的库文件添加到相应的文件夹下:
表112工程目录文件夹内容清单
工程说明.txt
CMSIS:里面放着跟CM7内核有关的库文件
STM32F7xx_HAL_Driver:STM32外设库文件
暂时为空
stm32f7xx_hal_conf.h:用来配置库的头文件
main.c:main函数文件
打开KEIL5,新建一个工程,工程名根据喜好命名,我这里取LED-LIB,保存在ProjectRVMDK(uv5)文件夹下。
图112在KEIL5中新建工程
这个根据你开发板使用的CPU具体的型号来选择,M7挑战者选STM32F767IGT型号。如果这里没有出现你想要的CPU型号,或者一个型号都没有,那么肯定是你的KEIL5没有添加device库,KEIL5不像KEIL4那样自带了很多MCU的型号,KEIL5需要自己添加,关于如何添加请参考《如何安装KEIL5》这一章。
图113选择具体的CPU型号
等下我们手动添加库文件,这里我们点击关掉。
图114库文件管理
在新建的工程中添加5个组文件夹,用来存放各种不同的文件,文件从本地建好的工程文件夹下获取,双击组文件夹就会出现添加文件的路径,然后选择文件即可。
表113工程内组文件夹内容清单
STARTUP
存放汇编的启动文件:startup_STM32F767xx.s
STM32F7xx_HAL_Driver
stm32f7xx_hal.c
stm32f7xx_hal_ppp.c(ppp代表外设名称)
USER
用户编写的文件:
main.c:main函数文件,暂时为空
stm32f7xx_it.c:跟中断有关的函数都放这个文件,暂时为空
DOC
工程说明.txt:程序说明文件,用于说明程序的功能和注意事项等
图115如何在工程中添加文件夹
先把上面提到的文件从STHAL库中复制到工程模版对应文件夹的目录下,然后在新建的工程中添加这些文件,双击组文件夹就会出现添加文件的路径,然后选择文件即可。
图116如何在工程中添加文件
图117设置文件是否加入编译
这一步的配置工作很重要,很多人串口用不了printf函数,编译有问题,下载有问题,都是这个步骤的配置出了错。
图118添加微库
图119配置Output选项卡
图1110配置Listing选项卡
图1111配置C/C++选项卡
在这个选项中添加宏,就相当于我们在文件中使用“#define”语句定义宏一样。在编译器中添加宏的好处就是,只要用了这个模版,就不用源文件中修改代码。
“IncludePaths”这里添加的是头文件的路径,如果编译的时候提示说找不到头文件,一般就是这里配置出了问题。你把头文件放到了哪个文件夹,就把该文件夹添加到这里即可。(请使用图中的方法用文件浏览器去添加路径,不要直接手打路径,容易出错)
本书使用的仿真器是Fire-Debugger,可下载和仿真程序。Fire-Debugger支持XP/WIN7/WIN8/WIN10这几个操作系统,无需安装驱动,免驱,使用非常方便,具体配置见如下图。
图1112Debug中选择CMSIS-DAPDebugger
图1113Utilities选择UseDebugDriver
图1114Settings选项配置
这一步的配置也不是配置一次之后完事,常常会因为各种原因需要重新选择,当你下载的时候,提示说找不到Device的时候,请确保该配置是否正确。有时候下载程序之后,不会自动运行,要手动复位的时候,也回来看看这里的“ResetandRun”配置是否失效。M7挑战者用的STM32的FLASH大小是1M,所以这里选择1M的容量,如果使用的是其他型号的,要根据实际情况选择。
图1115选择芯片型号
一个新的工程模版新建完毕。
下面对各个版本的差异进行讲解,除以下提到的差异外,工程的其它内容完全一致,在实际操作时请注意切换版本后进行配置。
在C/C++选项配置中的部分宏和代码优化等级是不一样的,其中代码优化等级通常根据自身的需要调整,此处不进行整理。具体见下图和表格。