zhouyou99 发表于 2025-6-22 22:46

错误提示error: 'CAN2' undeclared in standard peripheral library for STM32F103

正在使用标准外设库将一个项目从STM32F105移植到STM32F103。在编译过程中,出现以下错误:In file included from ../Drivers/STM32F10x_StdPeriph_Driver/src/stm32f10x_can.c:23:0:../Drivers/STM32F10x_StdPeriph_Driver/inc/stm32f10x_can.h:47:49: error: 'CAN2' undeclared (first use in this function); did you mean 'CANx'?                                    ((PERIPH) == CAN2))在stm32f10x_can.h文件,可以找到:#define IS_CAN_ALL_PERIPH(PERIPH) (((PERIPH) == CAN1) || \                                 ((PERIPH) == CAN2))但是STM32F103仅在stm32f103xe.h中定义了CAN1。问题是如何编译STM32F103的标准库?一种解决方法是删除所有对CAN2的引用,标准外设库应该是F1系列中所有MCU的标准。怎么操作能够实现不需要修改库的源代码就可以为这些mcu编译。

公羊子丹 发表于 2025-6-24 07:23

F103确实只有CAN1,你得确认stm32f10x.h里选的芯片型号是不是103系列。

周半梅 发表于 2025-6-24 07:24

我之前用F103编译也遇到这个,解决办法是定义STM32F10X_HD或者STM32F10X_MD宏。

帛灿灿 发表于 2025-6-24 07:25

stm32f10x.h里会根据宏来判断是否定义CAN2,最好检查下project里有没有定义错芯片。

童雨竹 发表于 2025-6-24 07:25

CAN2是F105/F107才有的,你这个错误说明库文件是为大容量F105配置的。

万图 发表于 2025-6-24 07:26

最好不要直接改库代码,定义合适的宏让库自己屏蔽掉CAN2相关内容才是正解。

Wordsworth 发表于 2025-6-24 07:27

建议你在project settings的Preprocessor里加上STM32F10X_MD或你对应的型号宏。

Bblythe 发表于 2025-6-24 07:28

你是不是把F105的模板工程直接移过来了?那里面肯定启用了CAN2。

Pulitzer 发表于 2025-6-24 07:29

看下工程的startup文件和链接脚本是不是F103的,不然编译时也会乱指向。

Uriah 发表于 2025-6-24 07:30

其实标准库是支持F1整个系列的,只是得定义好目标芯片对应的宏。

Clyde011 发表于 2025-6-24 07:30

如果不想动库代码,那就用宏定义让编译器自动跳过CAN2那部分就行了。

stormwind123 发表于 2025-6-24 10:54

修改链接器脚本。

probedog 发表于 2025-6-24 12:55

用条件编译屏蔽CAN2相关代码,在项目配置中,通过定义宏来排除CAN2相关的代码。
页: [1]
查看完整版本: 错误提示error: 'CAN2' undeclared in standard peripheral library for STM32F103