nana_7654321 2024-05-22 13:31 采纳率: 100%
浏览 1775
已结题

STM32代码编译中出现错误.\Objects\1.axf: Error: L6218E: Undefined symbol assert_param (referred from misc.o).

img


编译上述代码时出现以下错误:.\Objects\1.axf: Error: L6218E: Undefined symbol assert_param (referred from misc.o).
根据CSDN上的建议修改了设置C/C++如下:

img


也在stm32f10x.h文件中添加了#define USE_STDPERIPH_DRIVER,图片如下:

img

但是再次运行还是出现上述问题,求解答

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-22 13:31
    关注

    引自免费微信小程序:皆我百晓生

    根据您提供的信息,这个错误是由于在您的STM32项目中尝试使用了assert_param()函数,但没有正确包含定义这个函数的库。assert_param()通常位于stm32f1xx_hal_common.hstm32f1xx_hal.h这样的HAL库头文件中。

    首先,确保您已经正确包含了STM32 HAL库。这应该在您的main.c或其他启动文件(例如system_stm32f10x.c)中完成。如果还没有包含,需要在适当的位置添加以下行:

    #include "stm32f1xx_hal.h"
    

    然后,检查您的项目配置是否正确。按照您提供的截图,看起来您已经设置了USE_STDPERIPH_DRIVER宏,这是正确的。不过,还需要确认链接器设置是否包括了相应的HAL库。在Keil uVision中,您可以按照以下步骤操作:

    1. 打开项目管理器(Project Manager),找到并打开您的项目。
    2. 展开“Target 1”,然后展开“Linker”。
    3. 在“Libraries”部分,确保有“STM32F1xx_HAL_Driver”和“STM32F1xx_HAL_Compiler_AutoInit”这两个库被选中。

    如果您使用的是旧版的STM32标准外设驱动(Standard Peripheral Drivers,简称SPD),那么可能需要包含stm32f10x_conf.h并确保USE_FULL_ASSERT被定义为1。在main.c顶部添加以下内容:

    #include "stm32f10x_conf.h"
    
    #ifndef USE_FULL_ASSERT
    #define USE_FULL_ASSERT
    #endif
    
    #include "stm32f10x.h"
    

    如果您不确定使用哪种驱动,可以查看STM32CubeMX生成的工程或者从STM32官方文档中获取指导。

    完成这些更改后,重新构建项目,应该就可以解决undefined symbol assert_param的错误。如果仍然有问题,可能是路径设置、库版本不匹配或其他配置问题,这可能需要进一步排查。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 5月30日
  • 已采纳回答 5月23日
  • 创建了问题 5月22日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部