KeilMDK4.22 编译STM32工程警告:warning: #223-D: function " *** " declared implicitly
建立工程,编译大量报错和警告:
..\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”
如下图: