错误提示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编译。F103确实只有CAN1,你得确认stm32f10x.h里选的芯片型号是不是103系列。 我之前用F103编译也遇到这个,解决办法是定义STM32F10X_HD或者STM32F10X_MD宏。 stm32f10x.h里会根据宏来判断是否定义CAN2,最好检查下project里有没有定义错芯片。 CAN2是F105/F107才有的,你这个错误说明库文件是为大容量F105配置的。 最好不要直接改库代码,定义合适的宏让库自己屏蔽掉CAN2相关内容才是正解。 建议你在project settings的Preprocessor里加上STM32F10X_MD或你对应的型号宏。 你是不是把F105的模板工程直接移过来了?那里面肯定启用了CAN2。 看下工程的startup文件和链接脚本是不是F103的,不然编译时也会乱指向。 其实标准库是支持F1整个系列的,只是得定义好目标芯片对应的宏。 如果不想动库代码,那就用宏定义让编译器自动跳过CAN2那部分就行了。 修改链接器脚本。 用条件编译屏蔽CAN2相关代码,在项目配置中,通过定义宏来排除CAN2相关的代码。
页:
[1]