KeilMDK4.22 编译STM32工程警告:warning: #223-D: function " *** " declared implicitly

时间:2021-02-22 14:53:02

建立工程,编译大量报错和警告:

..\FWlib\src\stm32f10x_usart.c(135): warning:  #223-D: function "assert_param" declared implicitly

..\FWlib\src\stm32f10x_usart.c:     assert_param(IS_USART_ALL_PERIPH(USARTx));

..\FWlib\src\stm32f10x_usart.c:     ^

..\FWlib\src\stm32f10x_usart.c(184): warning:  #223-D: function "assert_param" declared implicitly

..\FWlib\src\stm32f10x_usart.c:     assert_param(IS_USART_ALL_PERIPH(USARTx));

..\FWlib\src\stm32f10x_usart.c:     ^

..\FWlib\src\stm32f10x_usart.c(278): warning:  #223-D: function "assert_param" declared implicitly

..\FWlib\src\stm32f10x_usart.c:     assert_param(IS_USART_123_PERIPH(USARTx));

..\FWlib\src\stm32f10x_usart.c:     ^

..\FWlib\src\stm32f10x_usart.c(326): warning:  #223-D: function "assert_param" declared implicitly

..\FWlib\src\stm32f10x_usart.c:     assert_param(IS_USART_ALL_PERIPH(USARTx));

..\FWlib\src\stm32f10x_usart.c:     ^

……………………………………………………………………

以上SHOW出的只是一部分,


原因分析:

一点一点跟踪,发现大部分的头文件都包含在stm32f10x_conf.h中,而这个文件又出现在stm32f10x.h中,其中有这样的一段:

#ifdef USE_STDPERIPH_DRIVER   #include "stm32f10x_conf.h" #endif


原来是这个USE_STDPERIPH_DRIVER没有被定义,stm32f10x_conf.h 头文件不能被编译进工程,导致的报错。

从网上搜索发现解决办法,

MDK的在工程上点右键,选择options,选择C/C++选项,在defined的框里填上USE_STDPERIPH_DRIVER就可以了。

还要根据自己所用芯片在defined填上如STM32F10X_HD,这样就编译就不会出错了。

在那个define中加入USE_STDPERIPH_DRIVER,STM32F10X_HD

如下图:

KeilMDK4.22 编译STM32工程警告:warning: #223-D: function " *** " declared implicitly