必威体育Betway必威体育官网
当前位置:首页 > IT技术

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

时间:2019-10-04 08:44:23来源:IT技术作者:seo实验室小编阅读:69次「手机版」
 

hal

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

相关阅读

Pandas学习笔记八——数据透视表

数据透视表 数据透视表是一种类似于Groupby的操作方法,常见于Excel与类似的表格应用中。数据透视表将每一列作为输入,输出将数据不

教育文库新秀:豆知网收购老牌文档网站缺少网

9月16日消息:教育文库新秀豆知网(https://www.doczhi.com)与缺少网今天共同宣布达成战略合作,豆知网全资收购老牌教育科研文档平台

HTTP学习(一)网络分层与HTTP协议

部分摘自 http://www.ruanyifeng.com/blog/2012/06/ 阮一峰博客 1. 什么是HTTP协议 百度百科解释为 超文本传输协议(HTTP,HyperTex

深度学习---GoogLeNet

一、文介绍的是著名的网络结构GoogLeNet及其延伸版本,目的是试图领会其中的思想而不是单纯关注结构。GoogLeNet Incepetion V1Moti

LabVIEW学习笔记(十一)——利用VISA进行串口通信

前言: 在1993年,为了确保多厂商的仪器具有协同工作的能力以及降低包含了多厂商仪器的完整测试系统的开发时间,NI 联合许多大公司开

分享到:

栏目导航

推荐阅读

热门阅读