当前位置: 首页 > news >正文

关于STM32 MDK中USE_STDPERIPH_DRIVER问题的解释

初学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)USE_STDPERIPH_DRIVER:预编译有他的话,程序可包含"stm32f10x_conf.h"

(2)STM32F10X_HD :

#ifdef STM32F10X_HD
  ADC1_2_IRQn                 = 18,     /*!< ADC1 and ADC2 global Interrupt                       */
  USB_HP_CAN1_TX_IRQn         = 19,     /*!< USB Device High Priority or CAN1 TX Interrupts       */
  USB_LP_CAN1_RX0_IRQn        = 20,     /*!< USB Device Low Priority or CAN1 RX0 Interrupts       */
  CAN1_RX1_IRQn               = 21,     /*!< CAN1 RX1 Interrupt                                   */
  CAN1_SCE_IRQn               = 22,     /*!< CAN1 SCE Interrupt                                   */
  EXTI9_5_IRQn                = 23,     /*!< External Line[9:5] Interrupts                        */

启动文件,对应的编译对象不一样

(3)USE_STM3210B_EVAL 是给st的开发板来说的,如果用USE_STM3210B_EVAL,那么它的许多资源定义就确定了,比如某个引脚用的led灯,某个引脚接蜂鸣器啥的

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/Ph-one/p/4079398.html

相关文章:

  • 鬼谷子七十二术(完整版)值得永久收藏!终生研读!
  • assert_param
  • stm32时钟树讲解
  • STM32系统时钟为什么没有定义呢
  • 鬼谷子原文
  • PN结讲解
  • .Family_物联网
  • STM32唯一的ID
  • STM32串口中断
  • Zigbee学习
  • 模电之运放篇
  • STM32.SPI(25Q16)
  • STM32.定时器
  • CAN通信(STM32)
  • 触摸屏
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 《Java编程思想》读书笔记-对象导论
  • 【译】理解JavaScript:new 关键字
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • HTML中设置input等文本框为不可操作
  • LintCode 31. partitionArray 数组划分
  • Map集合、散列表、红黑树介绍
  • Material Design
  • Redis字符串类型内部编码剖析
  • SegmentFault 2015 Top Rank
  • TypeScript实现数据结构(一)栈,队列,链表
  • vuex 笔记整理
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 欢迎参加第二届中国游戏开发者大会
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 驱动程序原理
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 微服务入门【系列视频课程】
  • 微信支付JSAPI,实测!终极方案
  • 学习JavaScript数据结构与算法 — 树
  • 学习笔记:对象,原型和继承(1)
  • 一个完整Java Web项目背后的密码
  • 用简单代码看卷积组块发展
  • ​io --- 处理流的核心工具​
  • ​卜东波研究员:高观点下的少儿计算思维
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (10)ATF MMU转换表
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (十三)Maven插件解析运行机制
  • (转)LINQ之路
  • (转)linux 命令大全
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .a文件和.so文件
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .net6 webapi log4net完整配置使用流程
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .Net小白的大学四年,内含面经
  • /etc/sudoer文件配置简析