初学STM32,在RealView MDK 环境中使用STM32固件库建立工程时,初学者可能会遇到编译不通过的问题。出现如下警告或错误提示:

  warning: #223-D: function "assert_param" declared implicitly;assert_param(IS_GPIO_ALL_PERIPH(GPIOx));

  这时候我们需要在“Target Options”中的“C/C++”选项卡中如图-2所示红框中添加USE_STDPERIPH_DRIVER、STM32F10X_HD。这样才能使编顺利通过。

图-2

  知其然了,我们还得知其所以然。下面就听Herison给大家一一道来。我们知道,程序的执行是从“main.c”文件开始的,其中必须包含有头文件“stm32f10x.h”。我们打开“stm32f10x.h”,按下“Ctrl+F”键,查找USE_STDPERIPH_DRIVER,在“Find What”栏中输入“USE_STDPERIPH_DRIVER”。如图-3所示。点击“Find Next”,出现“USE_STDPERIPH_DRIVER”对应的代码行,重复上边操作三次,第三次的时候我们能在第8296-8298行找到如图-4所示代码段。

图-3

图-4

  这段代码的意思是,只有用预编译指令预定义了“USE_STDPERIPH_DRIVER”,才会将"stm32f10x_conf.h"包含进“stm32f10x.h”中,从而被"main.c"用到。这就解释了,为什么我们没有在“main.c”中包含"stm32f10x_conf.h",而在编译之后却被包含进了"main.c"中,出现如图-5所示的情况。        "stm32f10x_conf.h"文件相当于一个开关文件,如果要用到STM32固件库驱动标准外设,则外设驱动头文件是必不可少的,如“stm32f10x_gpio.h”。在"stm32f10x_conf.h"中我们通过代码#include "stm32f10x_gpio.h"来实现这个操作。

图-5

  说到这儿估计大家已经对“USE_STDPERIPH_DRIVER”的来龙去脉有个清晰的认识了吧?其实单从字面意思理解就是“使用标准外设驱动”,在C/C++预定义中加入“USE_STDPERIPH_DRIVER”就是允许“使用标准外设驱动”了。至于加入的“STM32F10X_HD“同样能在文件”stm32f10x.h“通过如上所述的方法通过功能查找来进行解释,其实它也是对于对应硬件的某些定义起开关作用罢了。

最新文章

  1. Code[VS] 2370 LCA 题解
  2. Zxing二维码重复扫描,不退出。
  3. 10 个迅速提升你 Git 水平的提示【转】
  4. user模式下编译android 代码被proguard优化导致类和变量丢失
  5. BZOJ1123: [POI2008]BLO
  6. JSP(二)
  7. Ural 1450 求最长路 SPFA
  8. memcached内存分配及回收初探
  9. chapter11_2 Lua链表与队列
  10. Linux修改主机名脚本-不重启-支持RedHat、SUSE
  11. FontAwesome 图标字体库的使用
  12. 【C语言编程练习】5.12 兔子产仔问题
  13. Spring Cloud 2-Hystrix 断路容错保护(四)
  14. TopCoder Div2
  15. JavaSE_坚持读源码_ClassLoader对象_Java1.7
  16. 最简单的HashMap底层原理介绍
  17. 开源IDE code blocks黑色主题
  18. BZOJ3129 SDOI2013方程(容斥原理+扩展lucas)
  19. Java获取路径(getResource)
  20. 微服务之springCloud-docker-feign-hystrix-ribbon(七)

热门文章

  1. Linux下安装破解JIRA 6.3.6 并连接MYSQL5
  2. 实现全屏轮播,并且轮播div中的文字盒子一直自动垂直居中
  3. 记录python学习过程中的一些小心得
  4. Linux命令每日一个
  5. 韩顺平教学资源java、oracle、linux
  6. 在Eclipse中查看JDK源码的方法
  7. python重试装饰器的简单实现
  8. Netty之多用户的聊天室(三)
  9. 讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(下)- block中任性用self
  10. javascript瀑布流