STM32HAL库学习(一) 搭建工程模板

STM32HAL库学习(一) 

—— 搭建工程模板

一.简介

    众所周知STM32开发需要用到库函数,除了寄存器版本,还有标准库和HAL库。然而,标准库已经不在更新支持,ST官方推荐使用HAL库。而HAL库开发,比较常见的也是官方推荐使用CubeMx进行初始化的配置,无论是MDK还是IAR只要改一下设置都可以生成工程。然而对于像我这样初识STM32标准库都不怎么会用的小白,使用Cube固然会迅速很多,但也会有很多疑问。况且目前Cube并不十分完善,而每个人在建立工程时都会有各自的风格,因此,通过学习搭建工程模板一方面加强对HAL库认知,一方面学习STM32的开发。

    本人手头上有一块STM32F042 Nucleo-32开发板,而关于Nucleo开发也有Mbed等十分方便的方案,这里不在累述。因为该板子上集成了ST-Link,因此在下载程序时非常方便。本文以该板子为例子搭建工程模板,并让板载LED3闪烁。


Nucleo-32 

二.准备

    关于搭建工程模板,首先需要有HAL库以及开发环境。为了方便,本人使用MDK5开发,库文件直接从Cube下载包进行复制。



如何安装、和谐不再详述,网上一堆教程。

三.复制模板文件

1.新建文件夹准备文件位置

    首先我们先确定工程目录。这里,我以 HAL_Nucleo 为文件名,在该目录下新建5个文件夹。


CORE  启动文件以及关键头文件

HALLIB 主要驱动文件

OBJ 编译文件目录

Pro MDK工程文件目录

USER 用户文件目录

2.复制启动文件

    找到库文件目录,以F0为例,该板子使用STM32F042K6芯片,故需要该系列芯片启动文件。

    在目录 \STM32Cube_FW_F0_V1.9.0\Drivers\CMSIS\Device\ST\STM32F0xx\Source\Templates\arm 下,寻找需要的型号,也可为了方便移植全部复制。


    接着复制关键头文件 cmsis_armcc.h core_cm0.h core_cmFunc.h core_cmInstr.h core_cmSimd.h 。注意F0使用M0内核所以使用cm0而不选择其他。

    这些文件在目录 \STM32Cube_FW_F0_V1.9.0\Drivers\CMSIS\Include 下,该目录下还有很多其他文件,不太清楚具体功能根据探索者的教程复制以上文件即可。


3.复制驱动文件

    驱动文件大体分三类:

        1.HAL库资源

        2.对应芯片型号头文件

        3.板级支持包BSP

    其中BSP非必须文件,仅仅因为该板子为官方板,该文件提供板上资源的支持,若自行设计板子或不使用板载资源可不复制。


(1)STM32F0xx_HAL_Driver目录:

        \STM32Cube_FW_F0_V1.9.0\Drivers\STM32F0xx_HAL_Driver

    复制该目录下的.h文件夹Inc和.c文件夹Src

    (2)对应芯片型号

        该板子为f0系列,f042k6。故把相关文件复制即可。若为了方便移植也可全部复制。文件在一下目录:

        \STM32Cube_FW_F0_V1.9.0\Drivers\CMSIS\Device\ST\STM32F0xx\Include


    (3)BSP资源

        \STM32Cube_FW_F0_V1.9.0\Drivers\BSP\STM32F0xx_Nucleo_32


3.复制用户文件

    用户文件为用户自行编写的文件,但main文件、中断服务文件可以从官方模板中复制,减轻开发压力。

    目录:\STM32Cube_FW_F0_V1.9.0\Projects\STM32F042K6-Nucleo\Templates


    至此模板文件复制结束。

四.建立工程

    使用MDK5新建工程,注意保存在Pro目录下。

1.新建工程

    注意首先选择对应芯片。


    之后环境配置直接跳过即可,我们自行配置。


2.管理文件

    下面选择管理文件,如图所示:


    之后将所有.c文件与启动文件包含进来。如图所示操作即可



    注意:STM32F0xx_HAL_Driver目录下有些文件是不需要的,需要将其删除!

(1)所有ll文件


    *ll为HAL库的一个简洁版的库,这里我们不讨论,有关ll都删除即可

(2)有关template文件:


3.工程配置

      点开魔法棒工具:


(1)时钟设置(貌似没什么用),选择8M


(2)输出文件配置,将输出文件全部放入OBJ目录下


(3)头文件配置

包括编译预处理和头文件。

Define下填写:

    STM32F042x6,USE_STM32F0XX_NUCLEO_32,USE_HAL_DRIVER

以此确定使用哪些函数,对应芯片型号

其次将所有的.h目录全部包含,注意\HALLIB\STM32F0xx_HAL_Driver\Inc\Legacy目录不要落下!



(4)下载配置

    配置为ST-Link下载,并注意F0Flash(一般默认即可)


    选择Setting


*Reset and Run 方便调试

最后,编译、下载即可。


五.LED闪烁测试

    以上已经将工程模板配置结束。但是此刻我们无法保证该模板是否有效,因此使用板载LED3(LD3)闪烁来验证。

    由于模板已经做好初始化的工作,因此我们只需配置与LD3相关内容即可。这里涉及到板载资源,因此可以从stm32f0xx_nucleo_32.h文件查询,

int main(void)
{

  /* STM32F0xx HAL library initialization:
       - Configure the Flash prefetch
       - Systick timer is configured by default as source of time base, but user 
             can eventually implement his proper time base source (a general purpose 
             timer for example or other time source), keeping in mind that Time base 
             duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and 
             handled in milliseconds basis.
       - Low Level Initialization
     */
  HAL_Init();

  /* Configure the system clock to 48 MHz */
  SystemClock_Config();


  /* Add your application code here */
  BSP_LED_Init(LED3);

  /* Infinite loop */
  while (1)
  {
		BSP_LED_Toggle(LED3);
		HAL_Delay(1000);
  }
}

    这里,仅自己加了三个函数调用:

BSP_LED_Init(LED3);
BSP_LED_Toggle(LED3);
HAL_Delay(1000);

    功能不再累述,翻译即可。

六.总结

    本文虽然以F0为例,其他型号建立工程模板方法相似。

七.参考资料

http://bbs.21ic.com/icview-1627428-1-1.html

http://forum.eepw.com.cn/thread/278299/1

https://blog.csdn.net/hxkrrzq/article/details/52808372

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值