STM32创建HAL库工程文件

文章目录

1. HAL库

2. 下载源码安装包

3. 创建工程

4. KEIL配置工程文件

5. 可能的问题


1. HAL库

HAL库(Hardware Abstraction Layer)是STMicroelectronics提供的STM32微控制器的硬件抽象层库。它通过一套统一的API接口,简化了对STM32外设的配置和操作,使开发者能够更快速地进行嵌入式系统开发,而不必深入了解底层硬件细节。

HAL库的优点

  1. 高层次抽象:HAL库提供了高层次的抽象接口,简化了对硬件外设的操作。开发者可以通过调用库函数完成复杂的硬件配置,而不必直接操作寄存器。

  2. 易于使用:由于提供了丰富的库函数和示例代码,开发者可以快速上手进行开发,减少了开发时间。

  3. 一致性和移植性:HAL库在不同的STM32系列中保持了一致的API接口,增强了代码的移植性和重用性。如果需要更换STM32系列微控制器,代码的修改量较小。

  4. 简化调试:由于HAL库屏蔽了底层的寄存器操作,调试过程中更容易定位和解决问题,减少了开发和维护的复杂性。

  5. 代码维护性好:HAL库的高层次封装和良好的代码结构使得代码更容易维护和更新。

对比标准固件库的不同

  • 抽象层次

    • 标准固件库:直接操作寄存器,提供底层硬件访问,要求开发者对STM32微控制器的寄存器有较深入的理解。
    • HAL库:提供高层次的抽象接口,屏蔽底层寄存器操作,使开发者可以更快速地进行开发。
  • 代码复杂性

    • 标准固件库:代码较复杂,涉及大量的寄存器配置,开发者需要处理更多的细节。
    • HAL库:代码简洁易读,通过调用库函数进行配置和操作,减少了代码量和复杂性。
  • 学习曲线

    • 标准固件库:学习曲线较陡,需要花费较多时间了解和掌握硬件细节。
    • HAL库:学习曲线较缓,提供了丰富的示例代码和文档,开发者可以快速上手。
  • 开发效率

    • 标准固件库:适合对性能和功耗有严格要求的项目,但开发和调试时间较长。
    • HAL库:提高了开发效率,适合快速开发和原型设计,缩短了开发周期。
  • 移植性

    • 标准固件库:不同系列的STM32微控制器之间存在较大的差异,代码移植工作量较大。
    • HAL库:提供一致的API接口,增强了代码的移植性和重用性,不同系列之间的移植工作量较小。

2. 下载源码安装包

STM32Cube MCU和MPU包: 相关产品及其源码下载链接:

https://www.st.com.cn/zh/embedded-software/stm32cube-mcu-mpu-packages/products.html

点击产品选择器,这里选择了F1系列

点击打开新页面,然后下拉到最下面,选择第二个下载选项, 下载安装包。

3. 创建工程

这里使用的是手动创建,在实际应用中更推荐使用cubeMX,手动配置可以用于理解底层文件的逻辑。

总结为五个步骤

  1. 新建工程文件夹:四个文件夹
  2. 新建工程框架:keil
  3. 添加文件:分组并添加所需要的文件
  4. 魔术棒设置:相关配置
  5. 添加main.c:编写主函数代码。

首先创建一个文件夹myproject,然后在里面创建几个分组文件夹:

  • USER:存放HAL库用户配置文件、main.c、中断处理文件,以及分散加载文件。
  • HW: hardware 相关硬件的.c和.h文件
  • LIB: libary Hal库的源码和头文件
  • CMSIS:CM内核相关的文件

接下来从刚才官网下载的安装包来找所需要的文件。

 

首先按照下面的地址打开安装包文件,找到下面两个文件。

STM32Cube_FW_F1_V1.8.0\Projects\STM3210E_EVAL\Templates\Inc

然后将这两个文件复制到工程文件的USER文件夹中。

 

然后按照下面的地址打开安装包文件,找到下面这个文件。

STM32Cube_FW_F1_V1.8.0\Projects\STM3210E_EVAL\Templates\Src

然后将这个文件也复制到工程文件的USER文件夹中。

按照下面的地址打开安装包文件,找到Src和Inc,这是Hal库的头文件和源码。

STM32Cube_FW_F1_V1.8.0\Drivers\STM32F1xx_HAL_Driver

然后将这两个文件夹复制到工程文件的LIB文件夹中。

这里要注意,inc文件夹中同样包含 config文件,和刚刚在复制到USER中的一样,如果你像把config文件配置到这里就需要修改一下名字。如果前面已经添加了,这里就可以不添加了。

并且为了防止后面配置文件时出错,这里可以把config文件后面的”_template “给删掉。

 

 

按照下面的地址打开安装包文件,找到Include,这是Hal库的CM内核文件。

STM32Cube_FW_F1_V1.8.0\Drivers\CMSIS

然后将这个文件夹复制到工程文件的CMSIS文件夹中。

 

按照下面的地址打开安装包文件,找到Include,这是Hal库中单片机及系统文件。

STM32Cube_FW_F1_V1.8.0\Drivers\CMSIS\Device\ST\STM32F1xx\Include

然后将Include这个文件夹中的文件复制到工程文件的CMSIS中刚刚保存的Include文件夹中。

 

接着在工程文件的CMSIS文件夹中再创建一个Source文件

然后按照下面的地址打开安装包文件,找到system_stm32f1xx 这个文件

STM32Cube_FW_F1_V1.8.0\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates

然后将这个文件复制到工程文件的CMSIS中刚刚创建的Source文件夹中。

然后按照下面的地址打开安装包文件,找到arm这个文件,这是汇编启动文件。

STM32Cube_FW_F1_V1.8.0\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm

然后将arm中的文件也都复制到工程文件的CMSIS中刚刚创建的Source文件夹中。

这里例如C8T6,使用的就是最下面这个f103xb启动文件。

到这里文件就复制完了,其实和标准库的方法类似。

4. KEIL配置工程文件

打开Kiel5,创建一个新工程

将启动文件创建到USER目录下

然后选择C8T6

 

打开管理,然后如图所示创建几个分组。

 

首先添加LIB中的文件,打开LIB中的Src文件夹。

下面两个是必备的文件,其他的根据需要添加,当然全部添加也可以。

然后是CMSIS,打开CMSIS文件夹,在Source中添加系统文件。

 

然后在下面的文件类型中选择.S文件,然后选择汇编启动文件:f103xb.S

 

然后新建一个文件,取名main.c保存到USER中

 接着双击keil中的USER,将刚刚创建的mian文件添加进去。

接着打开小锤子,点击C/C++, 将定义写为STM32F103xB,也就是告诉编译器我们用的是什么启动文件

 

接着点击下面的添加启动文件路径,将我们创建的分组的头文件夹路径添加进去。

 接下来在main.C文件中打入下面的代码

#include "stm32f1xx_hal.h"

int main(void){
	
	
}

启动编译,如果没有错误就代表配置完成了。

5. 可能的问题

1. 如果发现编译找不到config文件,看一下刚才创建工程中有一个修改config文件名的步骤是不是没有完成

2. 如果发现错误很多,可能是ARM编译器的版本问题。

随便打开一个hal库的.C文件,如果库引用前面有红叉,大概率是你的keil mdk 编译器不兼容,点击魔术棒,在Target中找到 code generation,选择build 960可以解决这个问题。

3. hex文件

工程输出的所有文件都在Objects文件夹中,默认在USER中,也可以在kei中使用魔术棒的Output选项进行修改。

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TENET-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值