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

[复制链接]
 楼主| zhouyou99 发表于 2025-6-22 22:46 | 显示全部楼层 |阅读模式
正在使用标准外设库将一个项目从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相关的代码。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

38

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部