写完代码后一直有这样的报错信息:
Error: L6218E: Undefined symbol assert_param (referred from misc.o).
Not enough information to list image symbols.
Not enough information to list load addresses in the image map. Finished: 2 information, 0 warning and 1 error messages.
直接先上解决策略:Define里要写上USE_STDPERIPH_DRIVER(使用标准外设库)的标签。如果你用的是最小系统板,就可以跟我一样再添加个stm32f0x_md。
一定要用大写!!!!我就是刚开始时偷懒用了小写,导致一直报错。原因在下面:
刚才那段报错的大意是链接器在链接阶段发现我的库文件里调用了assert_param指令,但它并没有在整个project里找到它的定义。
事实上assert_param并不是具体的某个函数,而是一个宏定义(用于参数检查),存在"stm32f10x_conf.h"里。
但是STM32的官方总文件中有一段“鸡贼”的逻辑代码:
#ifdef USE_STDPERIPH_DRIVER #include "stm32f10x_conf.h" #endif意思是除非你在全局给系统打一个叫 USE_STDPERIPH_DRIVER(使用标准外设库)的标签,否则编译器会直接无视(不包含) stm32f10x_conf.h 这个文件!当我们环境里少打了/打错了(就像我一样用了小写)这个标签后,编译器就会自作聪明以为这是一个没有写的外部函数,然后就报这个错误。
当然了,如果打上这个标签也不行,可以去stm32f10x_conf.h这个文件里,找到
#include USE_FULL_ASSERT这一行,给它注释掉就可以啦。
好了,今天就到此结束,我要赶紧去多邻国打卡浪漫风情的法语了,还有半个小时就断签了。
au revoir!