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

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 21: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月31日
  • 已采纳回答 5月23日
  • 创建了问题 5月22日

悬赏问题

  • ¥15 鼎捷t100或鼎捷E10生产模块与odoo17详细区别和鼎捷t100或鼎捷E10物料清单(BOM)可以在子级的子级在同一界面操作吗
  • ¥50 VS2019,xamarin框架串口调试报错Java.Lang.SecurityException: Exception of type
  • ¥20 QT如何判断QLineF线鼠标划过事件
  • ¥15 关于#phpstorm#的问题:phpstorm编辑工具 光标选中了就会自动复制到粘贴板上 这样我之前复制的内容就失效了
  • ¥15 pychram安装jupyter插件
  • ¥60 悬赏破解越狱iphone4s中360保险箱密码遗忘
  • ¥20 ARKts悬浮窗和快捷方式问题
  • ¥15 linux中nginx服务器提示not found on accelerator,如何解决?(语言-php|操作系统-linux)
  • ¥15 comparecluster没有办法kegg
  • ¥15 远程访问linux主机超时