板子是野火的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进来。
keil引用HAL驱动库,C文件如何引用部分驱动库h文件
最新推荐文章于 2024-06-12 14:29:47 发布