qq_30796265 2024-10-23 17:21 采纳率: 50%
浏览 144

stm32H7 Error: L6200E编译报错

用keil mdk5 软件在stm32h743的一个工程里添加了一个定时器的官方驱动文件,然后编译后报错如下错误,都是这一个文件导致的
检查了一下stm32h7xx_hal_conf.h和其他头文件暂时没发现有重复调用的地方 想问一下怎么定位这个错误?

STM32H743\STM32H743.axf: Error: L6200E: Symbol __asm___19_stm32h7xx_hal_tim_c____REV16 multiply defined (by stm32h7xx_hal_tim_1.o and stm32h7xx_hal_tim.o).

STM32H743\STM32H743.axf: Error: L6200E: Symbol __asm___19_stm32h7xx_hal_tim_c____REVSH multiply defined (by stm32h7xx_hal_tim_1.o and stm32h7xx_hal_tim.o).

STM32H743\STM32H743.axf: Error: L6200E: Symbol __asm___19_stm32h7xx_hal_tim_c____RRX multiply defined (by stm32h7xx_hal_tim_1.o and stm32h7xx_hal_tim.o).

  • 写回答

1条回答 默认 最新

  • 无疆76 2024-10-23 17:22
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    这个错误是因为编译器在链接过程中发现同一个符号在多个对象文件中被定义了,即符号被多重定义。在你提供的错误信息中,符号 __asm___19_stm32h7xx_hal_tim_c____REV16__asm___19_stm32h7xx_hal_tim_c____REVSH__asm___19_stm32h7xx_hal_tim_c____RRXstm32h7xx_hal_tim_1.ostm32h7xx_hal_tim.o 这两个对象文件中都被定义了。

    这可能是由于以下原因造成的:

    1. 你在项目中有两个地方都包含了相同的定时器驱动文件,可能是直接包含源文件或者通过头文件包含的,造成了这个符号在多个地方被定义。
    2. 你在一个源文件中使用了定时器的库函数,并且在另一个地方又以某种方式直接或者间接包含了相同的定时器库文件,导致了符号重复定义。

    为了解决这个问题,你可以按照以下步骤操作:

    1. 检查你的项目中是否重复包含了相同的定时器驱动文件。这可能是在不同的地方多次包含了同一个头文件,或者在两个不同的地方都添加了同一个源文件。删除重复的部分即可。
    2. 如果你使用的是库文件,确保只在项目的一个地方包含这个库文件。通常库文件会自带一些头文件,你只需要在你的项目中包含这些头文件就可以了,不需要再直接包含库文件的源文件。
    3. 使用Keil的依赖关系查看功能(Dependency Viewer),查看哪些文件包含了相同的头文件或者库文件,这样可以帮助你找到问题的根源。
    4. 检查你的 stm32h7xx_hal_conf.h 文件和其他相关头文件,确认没有重复的定义或者包含。有时候在头文件中定义了某些符号或者函数,然后在源文件中又定义了一遍,也会导致这个问题。

    一旦找到问题的根源并解决了符号重复定义的问题,编译错误就应该消失了。如果仍然存在问题,你可能需要进一步检查你的代码和项目配置。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月23日