详细分析stm32f10x.h

发布者:数字奇迹最新更新时间:2019-11-28 来源: eefocus关键字:stm32f10x  硬件抽象层  头文件 手机看文章 扫描二维码
随时随地手机看文章

/**这里是STM32比较重要的头文件 
  ******************************************************************************
  * @file    stm32f10x.h                  ST 标准的头文件
  * @author  MCD Application Team     微控制器开发小组。
  * @version V3.5.0                               版本
  * @date    11-March-2011                    2011年3月11
  * @brief   CMSIS Cortex-M3 Device Peripheral Access Layer Header File.(CMSIS:Cortex Microcontroller Software Interface Standard) 是 Cortex-M 处理器系列的与供应商无关的硬件抽象层。  
  *          This file contains all the peripheral register's definitions, bits    
  *          definitions and memory mapping for STM32F10x Connectivity line, 
  *          High density, High density value line, Medium density, 
  *          Medium density Value line, Low density, Low density Value line 
  *          and XL-density devices.
  * 这个文件包含了芯片STM32F10X(接口增强型)内部的寄存器定义,位定义,内存地址变换定义,还有一些相应的高密度,低密度产品线的设备。
  
*          The file is the unique include file that the application programmer
  *          is using in the C source code, usually in main.c. This file contains:
  *           - Configuration section that allows to select:
  *              - The device used in the target application
  *              - To use or not the peripherals drivers in application code(i.e. 
  *                code will be based on direct access to peripherals registers 
  *                rather than drivers API), this option is controlled by 
  *                "#define USE_STDPERIPH_DRIVER"
  *              - To change few application-specific parameters such as the HSE 
  *                crystal frequency
  *           - Data structures and the address mapping for all peripherals
  *           - Peripheral's registers declarations and bits definition
  *           - Macros to access peripheral registers hardware
  *这个文件在应用程序中是至关重要的头文件,它是用C代码编写而成。通常包括在MAIN主程序中。它包括:1 设备中使用的目标应用程序。
2 决定是否使用外部设备的代码(例如使用基于寄存器的代码,而不是我们所熟悉的API应用程序接口代码)。这一设备可以通过设置 "#define USE_STDPERIPH_DRIVER" 来实现。
3  通过这一文件可以改变诸如外部设备的频率参数。
4 可以了解程序的数据结构以及外设的地址映射。
5  外设的寄存器声明和位定义可以在这个文件里面了解到。

  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *注意:这一文件代码供应给用户,旨在帮助用户提升效率节约时间。ST将不会提供任何对于用户自己代码的解释和帮助。也不会解决其在代码中的任何BUG。
  *

© COPYRIGHT 2011 STMicroelectronics


  ******************************************************************************
  */

/** @addtogroup CMSIS
  * @{
  */这个不需要关心,只是说明这个文件的作者,公司产品等等,你贴出来的估计是小小的广而告之,这也是程序员的一点小小的特权嘛

/** @addtogroup stm32f10x
  * @{
  */

#ifndef __STM32F10x_H//如果没有定义__STM32F10x_H ,则定义__STM32F10x_H 
#define __STM32F10x_H

#ifdef __cplusplus//   
extern "C" {
#endif 
   这里是一种条件编译。extern "C"指令非常有用,因为C和C++的近亲关系。注意:extern "C"指令中的C,表示的一种编译和连接规约,而不是一种语言。C表示符合C语言的编译和连接规约的任何语言,如Fortran、assembler等。

还有要说明的是,extern "C"指令仅指定编译和连接规约,但不影响语义。例如在函数声明中,指定了extern "C",仍然要遵守C++的类型检测、参数转换规则。/** @addtogroup Library_configuration_section
  * @{
  */

/* Uncomment the line below according to the target STM32 device used in your
   application 
  */

#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
STM32启动文件选择:
- startup_stm32f10x_ld_vl.s: for STM32 Low density Value line devices - startup_stm32f10x_ld.s: for STM32 Low density devices  - startup_stm32f10x_md_vl.s: for STM32 Medium density Value line devices - startup_stm32f10x_md.s: for STM32 Medium density devices - startup_stm32f10x_hd.s: for STM32 High density devices - startup_stm32f10x_xl.s: for STM32 XL density devices  - startup_stm32f10x_cl.s: for STM32 Connectivity line devices 
  cl:互联型产品,stm32f105/107系列
vl:超值型产品,stm32f100系列 
xl:超高密度产品,stm32f101/103系列
ld:低密度产品,FLASH小于64K 
md:中等密度产品,FLASH=64 or 128
hd:高密度产品,FLASH大于128    
/*  Tip: To avoid modifying this file each time you need to switch between these
        devices, you can define the device in your toolchain compiler preprocessor.
提示:为了避免每次编译都要修改这些文件,意思是可以使用编译器的preprocessor选项来定义芯片型号等,免得反复更新这个文件。...
- Low-density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers
   where the Flash memory density ranges between 16 and 32 Kbytes.
- Low-density value line devices are STM32F100xx microcontrollers where the Flash
   memory density ranges between 16 and 32 Kbytes.
- Medium-density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers这里定义的是各种产品线的FLASH的大小。
   where the Flash memory density ranges between 64 and 128 Kbytes.
- Medium-density value line devices are STM32F100xx microcontrollers where the 
   Flash memory density ranges between 64 and 128 Kbytes.   
- High-density devices are STM32F101xx and STM32F103xx microcontrollers where
   the Flash memory density ranges between 256 and 512 Kbytes.
- High-density value line devices are STM32F100xx microcontrollers where the 
   Flash memory density ranges between 256 and 512 Kbytes.   
- XL-density devices are STM32F101xx and STM32F103xx microcontrollers where
   the Flash memory density ranges between 512 and 1024 Kbytes.
- Connectivity line devices are STM32F105xx and STM32F107xx microcontrollers.
  */

#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   如果设备类型选择不正确,这里会报错的。

#if !defined  USE_STDPERIPH_DRIVER
/**
* @brief Comment the line below if you will not use the peripherals drivers.
   In this case, these drivers will not be included and the application code will 
   be based on direct access to peripherals registers 
   */
  /*#define USE_STDPERIPH_DRIVER*/
#endif

/**
* @brief In the following line adjust the value of External High Speed oscillator (HSE)
   used in your application 

   Tip: To avoid modifying this file each time you need to use different HSE, you
        can define the HSE value in your toolchain compiler preprocessor.
提示:为了避免每次编译都要修改这些文件,意思是可以使用编译器的preprocessor选项来定义芯片型号等,免得反复更新这个文件。... 
  */           
#if !defined  HSE_VALUE
#ifdef STM32F10X_CL   
  #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
#else 
  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* STM32F10X_CL */
#endif /* HSE_VALUE */


/**
* @brief In the following line adjust the External High Speed oscillator (HSE) Startup 
   Timeout value 
   */①、HSI是高速内部时钟,RC振荡器,频率为8MHz。  ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
  ③、LSI是低速内部时钟,RC振荡器,频率为40kHz。
  ④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
  ⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。
#define HSE_STARTUP_TIMEOUT   ((uint16_t)0x0500) /*!< Time out for HSE start up */
高速外部时钟启动时间
#define HSI_VALUE    ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz*/
外部时钟设置的值
/**
* @brief STM32F10x Standard Peripheral Library version number
   */
#define __STM32F10X_STDPERIPH_VERSION_MAIN   (0x03) /*!< [31:24] main version */                                  
#define __STM32F10X_STDPERIPH_VERSION_SUB1   (0x05) /*!< [23:16] sub1 version */
#define __STM32F10X_STDPERIPH_VERSION_SUB2   (0x00) /*!< [15:8]  sub2 version */
#define __STM32F10X_STDPERIPH_VERSION_RC     (0x00) /*!< [7:0]  release candidate */ 
#define __STM32F10X_STDPERIPH_VERSION       ( (__STM32F10X_STDPERIPH_VERSION_MAIN << 24)
                                             |(__STM32F10X_STDPERIPH_VERSION_SUB1 << 16)
                                             |(__STM32F10X_STDPERIPH_VERSION_SUB2 << 8)
                                             |(__STM32F10X_STDPERIPH_VERSION_RC))

/**
  * @}
  */

/** @addtogroup Configuration_section_for_CMSIS
  * @{
  */

/**
* @brief Configuration of the Cortex-M3 Processor and Core Peripherals 
*/
#ifdef STM32F10X_XL
#define __MPU_PRESENT             1 /*!< STM32 XL-density devices provide an MPU */
#else
#define __MPU_PRESENT             0 /*!< Other STM32 devices does not provide an MPU */
#endif /* STM32F10X_XL */
#define __NVIC_PRIO_BITS          4 /*!< STM32 uses 4 Bits for the Priority Levels    */
#define __Vendor_SysTickConfig    0 /*!< Set to 1 if different SysTick Config is used */

/**
* @brief STM32F10x Interrupt Number Definition, according to the selected device 
*        in @ref Library_configuration_section 
*/
typedef enum IRQn
{
/******  Cortex-M3 Processor Exceptions Numbers ***************************************************/
  NonMaskableInt_IRQn         = -14,    /*!< 2 Non Maskable Interrupt                             */
  MemoryManagement_IRQn       = -12,    /*!< 4 Cortex-M3 Memory Management Interrupt              */
  BusFault_IRQn               = -11,    /*!< 5 Cortex-M3 Bus Fault Interrupt                      */
  UsageFault_IRQn             = -10,    /*!< 6 Cortex-M3 Usage Fault Interrupt                    */
  SVCall_IRQn                 = -5,     /*!< 11 Cortex-M3 SV Call Interrupt                       */
  DebugMonitor_IRQn           = -4,     /*!< 12 Cortex-M3 Debug Monitor Interrupt                 */
  PendSV_IRQn                 = -2,     /*!< 14 Cortex-M3 Pend SV Interrupt                       */
[1] [2] [3] [4] [5] [6] [7] [8] [9]
关键字:stm32f10x  硬件抽象层  头文件 引用地址:详细分析stm32f10x.h

上一篇:关于stm32中bool类型定义的问题
下一篇:STM32之GPIO操作(库函数版)

推荐阅读最新更新时间:2024-11-21 11:23

H.264到智能交通系统,2006年中国八大热点技术展望
回顾2005年的中国电子产业,我更愿意用“承前启后”这个词来表达对这一年的总结:3G和HDTV这两大标准的迟迟未出台,注定了在2005年难掀应用热点。尽管如此,3G和HDTV作为研发热点的角色在2005年并未停止,而且从不同渠道反馈的信息来看,中国在这两个领域从研发转向应用的步伐越来越快。进入2006年,诸多热点应用、标准将粉墨登场,形成一个上升期。在此,愿与大家共同展望2006年的一些主要技术和应用热点趋势: Yorbe Zhang, 总编辑, 《电子工程专辑》 1. 3G是中国不可跳跃的移动网络阶段,并将在2006年末形成应用热点;与此同时,对高速下行速率进一
[焦点新闻]
STC8H8K64U 的 USB 功能测试(未成功)
对 STC8H8K64U 的 USB 功能测试, 因为存在很多问题并且未能解释/解决, 就不写到系列里了, 把记录放上来抛砖引玉吧. 代码 测试代码下载地址 http://www.stcmcudata.com/STC8F-DATASHEET/STC8H8K64U-DEMO-CODE.ZIP , 使用其中的 39-通过USB发送命令读取ADC测试程序 , 用于创建一个 USB HID 设备. 连线 USB口的4线顺序 USB Layout: 5V | D- | D+ | GND 连线 USB STC8H8K64U 5V - VCC # 这一部分的连线会有其它情况 D- - P3.0 D+ - P3
[单片机]
基于HIP4081的厚膜H桥电机驱动电路设计解析
随着电子微技术的发展,电机控制、电气传动形成了一门多学科交叉的“运动控制”技术。运动控制系统能使被控机械运动实现精确的位置控制、速度控制、加速度控制、转矩或力的控制,以及这些被控机械量的综合控制。H桥驱动电路能与主处理器、电机等构成一个完整的运动控制系统,可应用于步进电机、交流电机及直流电机等的运动控制。   1 电机运动控制及其驱动电路   在电机的运动控制中,最常见的是电机的双向转动和调速,流经电机绕组的电流大小和方向要受控。   图1,图2是由4个N沟道MOs管(M1~M4)和一个电机(M)组成的H桥。在图1中,当M1和M4导通时,电流从电源正极经M1从左至右穿过电机,然后再经M4回到电源负极,电机沿顺时针转动。在图2
[单片机]
基于HIP4081的厚膜<font color='red'>H</font>桥电机驱动电路设计解析
基于TMS320DM6446的H.264编码器的设计与优化
2003年发布的H.264视频压缩编码标准在一定程度上解决了要在尽可能低的码率下获得尽可能好的图像质量这一问题。在相同的重建图像质量下,H.264能够比H.263节约50%左右的比特率。此外,H.264还增强了其对网络的适应性,差错的恢复能力,使其非常适用于数字视频存储、IPTV及手机电视等视频质量要求高而信道传输环境不稳定的场合。 由于加入了多模式位移估计、基于4×4块的整数变换等多种新的算法,使H.264算法本身的复杂度大幅增加。因此采用基于TI的 TMS320DM6446 的DAVINCI_EVM平台作为算法的硬件平台,提出针对达芬奇平台对H.264编码器进行优化,在不降低编码质量的情况下提高程序运行效率,降低运算复杂度
[嵌入式]
STM32F10x低功耗之待机模式详解
1.待机模式介绍 STM32F10x待机模式可实现系统的最低功耗。该模式是在Cortex-M3深睡眠模式时关闭电压调节器。整个1.8V供电区域被断电。 PLL、HSI和HSE振荡器也被断电。 SRAM和寄存器内容丢失。只有备份的寄存器和待机电路维持供电。 在待机模式下,下列功能需要单独设置: 1.独立看门狗(IWDG):独立看门狗一旦启动,除了系统复位,它不能再被停止。可通过看门狗的键寄存器或硬件选择来启动IWDG。 2.实时时钟(RTC):可通过区域控制寄存器(RCC_BDCR)中的RTCEN位来设置。 3.内部RC振荡器(LSI RC):通过控制/状态寄存器(RCC_CSR)的LSION位来设置。 4.外部低速时钟LSE(
[单片机]
<font color='red'>STM32F10x</font>低功耗之待机模式详解
步进电机H桥驱动电路设计
H桥功率驱动电路可应用于步进电机、交流电机及直流电机等的驱动。永磁步进电机或混合式步进电机的励磁绕组都必须用双极性电源供电,也就是说绕组有时需正向电流,有时需反向电流,这样绕组电源需用H桥驱动。本文以两相混合式步进电机驱动器为例来设计H桥驱动电路。 电路原理 图1给出了H桥驱动电路与步进电机AB相绕组连接的电路框图。 4个开关K1和K4,K2和K3分别受控制信号a,b的控制,当控制信号使开关K1,K4合上,K2,K3断开时,电流在线圈中的流向如图1(a),当控制信号使开关K2,K3合上,K1,K4断开时,电流在线圈中的流向如图1(b)所示。4个二极管VD1,VD2,VD3,VD4为续流二极管,它们所起的作用是:以图1
[嵌入式]
DS18B20.h LCD1602.h头文件下载 温度和液晶 调试ok 可直接调用
DS18B20.h头文件内容预览: /*DS18B20驱动程序*/ //作者:詹磊 //功能:驱动DS18B20单总线温度计芯片,从中读出当前温度计所处温度, // 测量范围:-55~+125度;分辨率为0.1度(100度以下); //注意:本驱动不含CRC检测,所以不能一线挂多个器件,也不带温度报警,在之后的版本中 // 再加吧 //感想:对单总线器件的操作时序非常重要;程序顺序非常关键;由于温度有负数,有小数, // 所以在数据处理方面也很难控制;单片机资源有限 int float 数
[单片机]
STM32F10X的USB固件库说明
最底层 1)、usb_int.c,本文件包含两个中断服务函数CTR_LP()和CTR_HP(),在接收发送中断时使用这两个函数进行处理,这两个函数又调用各个USB端点处理函数,端点处理函数由用户自定义。 2)、usb_regs.c,本文件时硬件抽象层。它含有各种用于读取或设置USB寄存器的函数,相当于对寄存器操作方法的封装。 3)、usb_mem.c,本文件主要负责进行数据传输处理。它主要负责数据在用户区域(内存)或USB数据包缓冲区的互相转移。 中间层 1)、usb_core.c,本文件主要负责USB协议管理,如USB标准请求、各种端点0的控制信息处理。 2)、usb_init.c,本文件主要包含了USB初始化的函数。 3)、u
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved