【STM32 HAL】HAL库和CubeMX

HAL库

  • 全称Hardware Abstraction Layer(抽象印象层)是高度抽象的库,提到抽象,不知道大家有什么想法,是不是觉得抽象就意味着难以理解,难以使用?如果有这种想法,说明你对抽象这一概念有所误解,我们来看一下百度百科对抽象这一词语的解释:

    抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。具体地说,抽象就是人们在实践的基础上,对于丰富的感性材料通过去粗取精、去伪存真、由此及彼、由表及里的加工制作,形成概念、判断、推理等思维形式,以反映事物的本质和规律的方法。

    由此可见,抽象并不意味着难以理解和使用,与之相反,抽象简化了代码的编写,减轻了开发者的负担,举个例子,同一个功能,使用用寄存器库或标准库需要编写几行十几行的代码,用HAL库只需一行代码就可以解决,这样大大节省了程序的开发的时期。

  • HAL库是ST公司主推的开发方式,也是未来STM32芯片开发的潮流。

  • HAL库支持CubeMX图形化配置工具,用户可以方便的使用CubeMX对外设进行初始化,对时钟进行配置。

CubeMX使用

  1. 选择创建工程的方式,这里根据芯片创建
    选择创建工程的方式2. 搜索并选择芯片,此处以STM32F103C8T6做演示

搜索并选择芯片3.找到SYS,Debug选择Serial Wire
一定要记得选Dubug,否则芯片只能烧录一次就会被锁死!
选Debug!!!
选Debug!!!
选Debug!!!
重要的事情说三遍!!!
找到SYS一定要记得选Dubug,否则芯片只能烧录一次就会被锁死!

4.根据需要在左侧选项卡选择或是点击芯片引脚进行初始化配置
初始化5.根据需要配置时钟
配置时钟6.配置生成工程STEP1

注意:名字和路径中不能包含中文和特殊符号!!!
IDE一般大家常用KEIL 5,选MDK-ARM,版本选5以上
KEIL 5

配置生成工程7.配置生成工程STEP2
配置生成工程STEP28.生成工程
点右上角GENERATE CODE生成工程
生成工程

CubeMX和HAL的关系辨析

  • 需要注意,CubeMX只是一个初始化工具,它只是帮你完成了HAL库外设和时钟的初始化,具体程序的编写还需要查阅HAL库的说明,使用相关函数实现你想实现的功能

  • CubeMX生成的代码包含了丰富的注释,为用户规范编程提供了参考,如果后期还需要使用CubeMX更改时钟或是添加新的外设,用户代码必须写在相应注释BEGIN和END之间,否则再次使用CubeMX生成代码时,未在指定位置的代码会被删除!!!

  • cubemx生成的代码

  • CubeMX可以帮助用户初始化外设,所做的操作在MX_XX_Init()中,但如果用户在代码中自行更改了MX_XX_Init()的内容,再次打开 CubeMX,图形化界面并不会同步用户在代码中对初始化部分所做的更改!!

  • 综上所述,如果用户希望在整个项目开发过程中一直使用CubeMX进行初始化和对外设参数进行修改,一是需要严格按照注释的位置编写代码,二是不要在代码层面改动MX_XX_Init()的内容,对外设初始化参数的修改要在CubeMX中进行。
    如果用户只是希望使用CubeMX生成一个工程模板,后期新加外设或修改时钟不再使用CubeMX工具,而是纯使用代码来实现,则不需考虑代码位置和CubeMX的初始化更改。

CubeMX生成工程的文件树简介

文件树

  • Application/MDK-ARM文件夹
    此文件夹下存放在.s启动文件,用户一般不需要进行更改
  • Drivers/CMSIS文件夹
    存放CMSIS接口文件,用户一般无需关心

以上两个文件夹中的文件用户一般不需要进行操作,无需关心,我们重点来看下面两个文件夹中的文件

  • Application/User/Core文件夹
    • main.c里面有main函数,用户程序从此处开始执行
    • XX.c关于外设的初始化函数MX_XX_Init()、外设结构体等就在此处被定义
    • stm32f1xx_it.c 中断服务函数在此处被定义(其实也支持在别处复定义),用户可以修改中断服务函数来实现用户需要的功能。
    • stm32f1xx_hal_msp.c 与初始化相关,如果用CubeMX进行初始化,一般也无需关心此文件
  • Drivers/STM32F1xx_HAL_Driver文件夹
    • HAL库文件夹,里面存放这各个外设相关函数的实现
    • 更重要的是,这里面也包含HAL库相关外设的使用说明书,以stm32f1xx_hal_gpio_ex.c为例,在库函数的前面会有大篇幅的介绍,介绍如何使用这个外设,实现什么功能需要调用什么函数,非常贴心
    • 说明书
    • 当我们需要实现外设的某个功能,但不知道该调用那个函数时,可以进入相应的stm32f1xx_hal_xx.c文件中查看说明书,先找到相关函数,然后再跳转去查函数对应的参数,使用查到的函数完成用户需要的功能。
      例:
      1.查到需要的函数,双击选中,右键Go To Definition Of xx
      说明2.跳转到函数定义处,查看说明和需要的参数
      参数3. 根据掌握到的函数信息进行开发
  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值