keil引用HAL驱动库,C文件如何引用部分驱动库h文件

板子是野火的STMH743,用的是HAL驱动库产生的工程。我在自己工程想使用定时器,又懒得去弄初始化代码,于是想要把野火关于定时器例程代码直接拷贝过来。就是下面两个文件。
在这里插入图片描述
把文件弄进自己工程,修改了一下,编译显示bsp_basic_tim.c的某些HAL库函数没有声明。我想,这些库函数不都在driver文件夹全部都有吗?为什么会显示没有声明。如下图。
在这里插入图片描述
在这里插入图片描述
定时器相关的驱动库文件主要是这个,报错的函数也是在这个文件里面定义的。
在这里插入图片描述
点开bsp_basic_tim.c,发现确实没有stm32h7_hal_tim.h,但是有其他外设的h文件。观察一下c文件,发现文件内也没有引用这些库h文件,那为什么c文件会包含部分驱动库h文件,反而没有包含我需要的time驱动库h文件呢?HAL工程是如何实现引用需要的h文件。
在这里插入图片描述
查询了诸多资料,发现HAL是这样实现的。每个外设对应的h文件(一般包含自己定义的宏、变量、函数),会引用“stm32h7xx.h”这个文件。
在这里插入图片描述
在“stm32h7xx.h”这个文件内部又包含了“stm327xx_hal.h”。
在这里插入图片描述
在“stm327xx_hal.h”文件包含了"stm32h7xx_hal_conf.h"。
在这里插入图片描述
在"stm32h7xx_hal_conf.h"文件中,我们可以看到以下部分,如果定义了HAL_TIM_MODULE_ENABLED,那就引用stm32h7_hal_tim.h头文件,这就是工程只包含需要的驱动库的原因。
在这里插入图片描述
那问题是,这个HAL_TIM_MODULE_ENABLED是哪里定义的?就在conf文件的
最开始部分。可以看到有些定义define被注释掉了,这是注释掉了不需要使用的外设头文件,这样可以减少编译时间。如果是在STM32CubeMX自动生成的工程,这一部分是会自动弄好的。但因为我定时器文件是其他工程拷贝过来的,所以这里就需要手动取消注释,把定时器的HAL驱动头文件include进来。
在这里插入图片描述

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值