关于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灯,某个引脚接蜂鸣器啥的

时间: 2024-10-25 04:52:35

关于STM32 MDK中USE_STDPERIPH_DRIVER问题的解释的相关文章

STM32工程中出现 error: A1163E: Unknown opcode R0, , expecting opcode or Macro错误分析及处理

最近测试以前的一个程序,一般都是打开以前写的程序修改参数直接测试 但是发现以前的编译后出现错误. 奇怪了,以前的出现都是调试好了的啊,一般都是没有错误的,迅速找问题 跳转到错误代码行 代码区域 1 Heap_Size EQU 0x00000000 2 3 AREA HEAP, NOINIT, READWRITE, ALIGN=3 4 __heap_base 5 Heap_Mem SPACE Heap_Size 6 __heap_limit 7 8 PRESERVE8 9 THUMB ;指定为TH

在MDK中如何生成*.bin格式的文件?

在Realview MDK的集成开发环境中,默认情况下可以生成*.axf格式的调试文件和*.hex格式的可执行文件.虽然这两个格式的文件非常有利于ULINK2仿真器的下载和调试,但是ADS的用户更习惯于使用*.bin格式的文件,甚至有些嵌入式软件开发者已经拥有了*.bin格式文件的调试或烧写工具.为了充分地利用现有的工具,同时发挥Realview MDK集成开发环境的优势,将*.axf格式文件或*.hex格式文件转换成*.bin格式的文件是十分自然的想法.本文将详细的探讨这种转换方法. 在详细的

SQL语句中常用关键词及其解释如下.pdf

SQL语句中常用关键词及其解释如下.pdf 路径 C:\Users\Administrator\Desktop\ 大小 1.18 MB 类型 PDF 文件 修改日期 2016年12月1日 16:50:15 文件被导入 2016年12月1日 17:02:34 附件列表

C#中static void Main(string[ ] args)中的作用及解释

C#中static void Main(string[ ] args)中的作用及解释 static 表示方法是静态的就是说方法在程序被编译的时候就被分配了内存,使用的时候不用生成某个类型的对象,知道程序退出才释放. void 表示方法没有返回值,就是方法没有renturn 关键字. main 是方法名,当然这个方法是特殊的方法,是Main()就是说是主函数,就是整个程序的入口,程序被编译后从这里开始执行,这也是main方法要是static的原因,因为在啥都没做的时候这个函数就得存在. strin

关于DPM(Deformable Part Model)算法中模型可视化的解释

DPM源码(voc-release)中的模型可视化做的还算相当炫酷的,可以让我们直观的看到训练好的模型,甚至我们不用去做模型的评价,直接根据肉眼的观察,就能大致了解一个目标训练的好不好,比如我训练一个人体模型,那他的可视化图当然就是越接近人体越好. 下面是对DPM源码中有关模型可视化部分代码的分析,通过分析这些代码,有助于更好的理解DPM模型. 注意:我的源码版本是voc-release3.1,第4版往后的模型变得更复杂,这里不讨论. 有关模型可视化的代码主要在visualizemodel.m,

Objective-C中的@Property具体解释

Objective-C中的@Property具体解释 @Property (属性) class vairs 这个属性有nonatomic. strong. weak, retain. copy等等 我把它们分为三类,各自是:原子性.存取器控制,内存管理. 原子性 atomic(默认):atomic意为操作是原子的,意味着仅仅有一个线程訪问实例变量.atomic是线程安全的.至少在当前的存取器上是安全的. 它是一个默认的特性,可是非常少使用,由于比較影响效率,这跟ARM平台和内部锁机制有关. no

在MDK中怎样生成*.bin格式的文件?

在Realview MDK的集成开发环境中.默认情况下能够生成*.axf格式的调试文件和*.hex格式的可运行文件. 尽管这两个格式的文件很有利于ULINK2仿真器的下载和调试,可是ADS的用户更习惯于使用*.bin格式的文件.甚至有些嵌入式软件开发人员已经拥有了*.bin格式文件的调试或烧写工具.为了充分地利用现有的工具.同一时候发挥Realview MDK集成开发环境的优势,将*.axf格式文件或*.hex格式文件转换成*.bin格式的文件是十分自然的想法.本文将具体的探讨这样的转换方法.

STM32F103学习2:使用J-LINK在MDK中烧录程序

在上一篇博文中,使用了USB转串口的方式通过串口烧录了程序.但是在实际调试程序过程中,从调试效率的角度考虑,往往会用到JTAG接口在线烧录和调试程序. 一.首先,我们安装一下J-LINK v8的驱动,并设置好MDK中使用J-LINK的选项 1.下载并安装j-link 4.34版本的驱动程序,4.5以上版本在淘宝上买到的“兼容版”j-link上无法使用. 2.下面这篇文章详细描述了,在MDK中使用J-LINK烧录程序和debug设置哪些必要的选项.在这里不复述了 http://blog.csdn.

AD域中常见属性名词解释

AD域中常见属性名词解释 Active Directory(AD)活动目录 schema对象模型 Organizational Unit(OU)组织单位 Distinguished name(DN)识别名 Canonical Name(CN)正式名称 Domain Controllers(DC)域控制器 displayname显示名称 homephone住宅电话 家庭电话(M) givenname名(F) samaccounttype账号类型 mobile手机 primarygroupid分组I