1 问题说明
1.1 问题回顾
学习自己手动搭建一个STM32HAL库工程模板文件的时候,我发现了有6个错误,6个错误的类型是一样的,其中有3个通过添加hal_rcc.h和hal_gpio.c文件得以解决。所以另外3个我也想到了时缺少了对应的.c文件导致的错误。
但是在STM32F1xx_HAL_Driver文件夹中,我没有找到类似如有“rcc”和“GPIO”这样的标志性符号。这3个错误如下:
分别是HAL_NVIC_SetPriority,HAL_NVIC_SetProtityGrouping和HAL_SYSTICK_Config。
在STM32F1xx_HAL_Driver文件夹中未找到类似于“NVIC”或者“SYSTICK”的.c文件。
copy了问题在网上也没有找到合适的回答,因为我根本不知道如何描述我的问题。找了一个学长问了之后,他只用了5分钟就帮我解决了问题
1.2 寻找解答所犯的错误
这个问题的解决,在互联网上是无法找打解答的,因为无法描述其问题。打个比方就是:
一个人要煮方便面,但是家里没有锅。于是,这个在网上搜索为什么这个面煮不开。这个问题在互联网上无法回答。
但是,因为煮面过程中,先放调料还是先放面,影响了最后的口感,这个时候是可以在网上询问:怎么煮面更好吃。其他网友才能回复自己的煮面方法。方法并不包括考虑这个提问者是不是家里有锅。
2 解决办法(试用于一系列问题)
2.1 重审问题
…\Output\Template.axf: Error: L6218E: Undefined symbol HAL_NVIC_SetPriority (referred from stm32f1xx_hal.o).
问题中有两个关键词,我们一个一个看
2.1.1 Undefined symbol xxx.c
含义是:“xxx.c”这个符号,没有被定义
2.1.2 referred from xxxx.o
含义是:上面的“xxx.c”文件在xxxx.o中被调用过
“.o”文件是什么?
.o文件在工程里面是没有的,它是在编译过程中由.c文件生成的。所以我们只需要找到工程里面的.c文件即可,这里对应这个名字的就是 xxxx.c 了
2.2 解决步骤
2.2.1 如何寻找xxxx.c的位置?
step1:Ctrl+F弹出搜索框
step2:在Find in Files选项卡中搜索xxxx.c文件
step3:在keil下方会返回在整个工程文件中找到该文件的位置
step4:从左侧任务栏中会找到,这个xxxx.c文件已经存在
2.2.2 相同办法全局搜索没有定义的“xxx.c”符号
得到了以下回复:
出现了HAL_NVIC_SetPriority的.c文件和.h文件有:hal_gpio.c、hal.c和cortex.h
2.2.3 继续分析
从左侧任务栏,可知hal_gpio.c和hal.c已经添加进入工程文件了
寻找一下hal_cortex.h文件
可见,在hal_cortex.h文件中,我们找到了对应函数的声明,缺少了定义,因此需要把hal_cortex.c的文件添加进入工程文件中。
2.2.4 再次编译
发现所有错误全部解决,说明问题“HAL_SYSTICK_Config”的声明和定义也是在“cortex.h”和“cortex.c”中完成的。
至此,问题解决了。
3 一点说明
3.1 为什么全局域搜索可以找到“cortex.h”中也存在这个函数?
原因有两个:
1、打开魔术棒,打开C/C++选项卡,按步骤打开,会发现,我们在之前已经把存储的路径保存了
2、虽然我们没有把“cortex.c”文件放进工程文件,目的是节约编译时间不用把所有hal库文件都放进工程中,但是在“stm32fxx_hal.c”中又调用了所有hal库的“.h”文件。所以在检索的时候,keil可以发现并找到搜索的函数和位置
文章来源:https://www.toymoban.com/news/detail-416469.html
3.2 我为什么写这篇博客?
1、这个问题是一个非常意外的问题,在互联网上,我暂时还没找到。
2、这种解决问题的思路是我的一个学长教给我的,以前遇到问题我只会在网络检索,现在需要学习直接解决问题的办法和方式步骤。因此,我把它进行了梳理并整理了出来。
3、如何手动搭建一个hal库的工程模板,而不使用cubemx,在之后的博客中,我会再次分享我的经验。(已经写完了: 库函数版的工程模板的搭建(HAL库版本))文章来源地址https://www.toymoban.com/news/detail-416469.html
到了这里,关于[STM32问题解决(1)]一类问题的解决办法——编译错误:XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!