微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32外设库文件分析(V3.5)

STM32外设库文件分析(V3.5)

时间:11-17 来源:互联网 点击:

被大括号包含的指令或一对空括号.术语“__asm 块”在这里是任意一个指令或一组指令无论是否在括号内。

以下代码片段是在括号内的一个简单的__asm块。

__asm

{

mov al, 2

mov dx, 0xD007

out al, dx

}

另一种方法是,你可以在每个汇编指令前放置__asm

__asm mov al, 2

__asm mov dx, 0xD007

__asm out al, dx

因为__asm关键字是一个语句分隔符,你也可以将汇编指令放在同一行:

__asm mov al, 2 __asm mov dx, 0xD007 __asm out al, dx

以上三个的例子产生相同的代码,但是第一种风格(把__asm块用括号括起来)有一些优势。

括号可以清晰的将C或C++代码和汇编代码分开,并且避免了不必要的重复__asm关键字。括号也能避免模糊性。

如果你想在__asm块的同一行放置一个C或C++语句,你必须将块用括号括起来。

没有括号,编译器不能告诉汇编代码在哪里停止而C或C++代码在哪里开始。

最后,因为在括号的文字有和原始MASM一样的格式,你能轻松的从一个已有的MASM源文件里剪切和黏贴文字到文件来。

不同于C和C++的括号,包含__asm块的括号对变量的作用域并没有效果。你也能嵌套__asm块,嵌套对变量作用域也没有效果。

core_cm3.h:里面包含了一些内联函数,数据结构,这些数据结构都是核心的外设数据结构,大概包括:NVIC,SCB,ITM,CoreDebug,SysTick.

对以上设备进行设置的函数也在这个头文件里,以静态内联函数的形式出现,例如 static __INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn),

其中,__INLINE 是__inline 的替代。 静态函数 static 声明。

Core_cm3.c 文件中定义的函数声明也在这个文件中。

invlude包含指令不仅仅限于.h头文件,可以包含任何编译器能识别的C/C++代码文件,包括.c,.hpp,.cpp,.hxx,.cxx等,甚至.txt,.abc等等都可以。

预处理器发现 #include 指令后,就会寻找后跟的文件名并把这个文件的内容包含到当前文件中。

被包含文件中的文本将替换源代码文件中的#include 指令,

就像你把被包含文件中的全部内容键入到源文件中的这个位置一样。

DeviceSupport

stm32f10x.h:

新版的固件库V3.0以上 main等源文件中不再直接包含stm32f10x_conf.h,

而是stm32f10x.h,stm32f10x.h则定义了启动设置,以及所有寄存器宏定义,

此文件中需要注意的有:

1、device选择

#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD)

&& !defined (STM32F10X_MD_VL)&& !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL)

&& !defined (STM32F10X_XL) && !defined (STM32F10X_CL)

/* #define STM32F10X_LD */ /*!< STM32F10X_LD: STM32 Low density devices */

/* #define STM32F10X_LD_VL */ /*!< STM32F10X_LD_VL: STM32 Low density Value Line devices */

/* #define STM32F10X_MD */ /*!< STM32F10X_MD: STM32 Medium density devices */

/* #define STM32F10X_MD_VL */ /*!< STM32F10X_MD_VL: STM32 Medium density Value Line devices */

/* #define STM32F10X_HD */ /*!< STM32F10X_HD: STM32 High density devices */

/* #define STM32F10X_HD_VL */ /*!< STM32F10X_HD_VL: STM32 High density value line devices */

/* #define STM32F10X_XL */ /*!< STM32F10X_XL: STM32 XL-density devices */

/* #define STM32F10X_CL */ /*!< STM32F10X_CL: STM32 Connectivity line devices */

#endif

#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL)

&& !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL)

&& !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL)

&& !defined (STM32F10X_XL) && !defined (STM32F10X_CL)

#error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"

#endif

如果都没有定义,编译器会报错。

2、外设宏定义USE_STDPERIPH_DRIVER

#if !defined USE_STDPERIPH_DRIVER

#endif

注意stm32f10x.h文件的后面有这样的代码,大概8300行左右:

#ifdef USE_STDPERIPH_DRIVER

#include "stm32f10x_conf.h"

#endif

stm32f10x_conf.h中包含了所有外设的头文件,因此任意源文件只要包含了stm32f10x.h,就可以在源文件调用任意外设的函数。

3、外部时钟频率选择

#if !defined HSE_VALUE

#ifdef STM32F10X_CL

#define HSE_VALUE ((uint32_t)25000000)

#else

#define HSE_VALUE ((uint

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top