1 问题描述
新建STM32的keil工程,在编译时出现警告“..FWLIBsrcstm32f10x_rcc.c(273): warning: #223-D: function “assert_param” declared implicitly”,接下来一堆警告和错误。
出错的原因:函数“assert_param”未声明。assert_param
2 问题分析
函数assert_param是STM32官方库文件中用到的。
对于我采用的《STM32F10x_StdPeriph_Lib_V3.5.0》库文件来说,assert_param函数在文件“stm32f10x_conf.h”的第59-73行。

查看函数说明可知,assert_param是一个条件表达式宏定义,主要作用是对函数的输入参数进行检查。仔细查看程序段,不管是否定义USE_FULL_ASSERT,函数assert_param均有定义,编译时不应该出现上述警告。
还有一种可能,那就是虽然定义了函数assert_param,但是包含定义的文件“stm32f10x_conf.h”没有被编译。
在工程文件中搜索字符“stm32f10x_conf.h”,在文件“stm32f10x.h”的第8301-8303行找到程序段。

这段代码的意思:如果定义USE_STDPERIPH_DRIVER,则包含文件“stm32f10x_conf.h”。同样的,如果没定义则不包含。
在工程中搜索文本USE_STDPERIPH_DRIVER,没有找到有关 USE_STDPERIPH_DRIVER的宏定义,因此也就没有包含stm32f10x_conf.h文件,工程中也就没有assert_param的声明。
文本“USE_STDPERIPH_DRIVER”的字面意思:使用标准外设驱动。也就是说如果需要使用ST官方提供的外设驱动库则需要定义“USE_STDPERIPH_DRIVER”。
很明显问题出在使用了官方的标准外设库又没有定义“USE_STDPERIPH_DRIVER”。
3 问题解决
解决问题的办法就是在工程中定义“USE_STDPERIPH_DRIVER”。这有两种方法。
方法一:标准宏定义
在工程中定义USE_STDPERIPH_DRIVER。通过上面的分析,在“stm32f10x.h”文件的起始位置定义USE_STDPERIPH_DRIVER即可。
先修改“stm32f10x.h”的只读属性。在工程文件中找到文件后,把文件属性修改为可读写的。
然后在Keil打开“stm32f10x.h”文件,在文件头添加代码“#define USE_STDPERIPH_DRIVER”。

重新编译工程,问题解决。
方法二:工程参数设置
在Keil工程中,点击“options for Target…”,在弹出窗口中点击“C/C++”,在“Preprocessor Symbols”的“Define”栏输入“USE_STDPERIPH_DRIVER”。
Preprocessor Symbols 就是预处理符号,输入“USE_STDPERIPH_DRIVER”就是向工程中添加预处理标号“USE_STDPERIPH_DRIVER”,等同于在代码中添加宏定义“#define USE_STDPERIPH_DRIVER”。

设置完后,编译工程,问题解决。
上一篇:STM32之RCC库函数介绍2
下一篇:GPIO库函数配置方法
推荐阅读最新更新时间:2026-03-25 04:36
- LTC3630IDHC 4.5V 至 65V 输入至 3.3V 输出、1.5A 稳压器的典型应用电路
- 持续气道正压通气 (CPAP) 通过保持肺泡张开并防止它们在呼气阶段完全塌陷来帮助患者呼吸
- DS51669A、MCP4725 SOT-23-6 评估板
- 使用 Analog Devices 的 ADP1871ACPZ 的参考设计
- MIC2098-2YMT限流配电开关典型应用
- EVAL-AD5560EBUZ,AD5560 器件电源评估板
- RDR-866 - 2.5 W 非隔离电源,使用 LinkSwitch-TNZ 无损生成交流过零信号
- MC34072AMTTBG 高输入阻抗差分放大器的典型应用
- 使用 Analog Devices 的 LTC1261LCS8 的参考设计
- LT3972 的典型应用 - 具有 75uA 静态电流的 33V、3.5A、2.4MHz 降压型开关稳压器

【2025 DigiKey创意大赛】地漏自动水封补水系统 源码
FollowMe3-1 代码合集
STM32实现双向BuckBoost电路设计资料(keil程序+原理图+环路设计资料)
现代雷达系统的信号设计
EL5724IRE-T7







京公网安备 11010802033920号