SW4STM32使用SPL库开发STM32F407出现HSE_VALUE编译报错
问题解决指南
错误根源分析
1. HSE_VALUE相关报错原因
预处理器在处理#if条件判断时仅做纯文本替换,不支持C语言的类型强制转换语法。board_def.h中#if HSE_VALUE != 8000000展开后会得到#if ((uint32_t)8000000) != 8000000,预处理器无法识别uint32_t类型声明,就会抛出缺少运算符的错误。
你删除校验逻辑属于掩盖问题而非解决问题,会直接引发后续设备识别相关的连锁报错。
2. 设备型号未识别报错原因
你手动在stm32f4xx.h中添加的STM32F4XX定义生效时机晚于启动文件、子家族识别头文件的检查逻辑,所以相关校验代码还是检测不到设备宏定义。
解决步骤
注意:请先恢复你之前删除的board_def.h、startup_stm32.c中的校验代码,删除校验逻辑只会掩盖配置错误,反而会引发后续运行时异常
- 右键点击项目名称,选择
Properties进入项目配置页 - 依次展开
C/C++ Build->Settings->Tool Settings->MCU GCC Compiler->Preprocessor - 在
Defined symbols (-D)一栏点击添加按钮,依次新增3个全局预定义符号:HSE_VALUE=8000000STM32F4XXSTM32F407xx
- 保存配置后,点击
Project->Clean清理之前的编译缓存,再重新编译即可正常通过。
全局预定义的宏会在所有头文件解析前生效,既可以覆盖stm32f4xx.h中带类型转换的默认HSE_VALUE定义,解决预编译判断报错,也可以提前声明设备型号,满足SPL库的设备识别要求。
内容的提问来源于stack exchange,提问作者Neptun
相关产品推荐
相关产品推荐

