历史上的今天
返回首页

历史上的今天

今天是:2024年11月28日(星期四)

正在发生

2019年11月28日 | 详细分析stm32f10x.h

2019-11-28 来源:eefocus

/**这里是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                       */
推荐阅读

史海拾趣

西博臣(CYBERSEN)公司的发展小趣事

作为一家有社会责任感的企业,西博臣积极履行社会责任,关注环境保护和可持续发展。公司采用环保材料和生产工艺,减少生产过程中的能源消耗和废弃物排放。同时,公司还积极参与社会公益活动,为社会做出积极贡献。这些举措不仅体现了公司的社会责任感,也为其赢得了更多客户和合作伙伴的信任和支持。

Delus Corp公司的发展小趣事

Delus Corp公司深知持续创新对于公司发展的重要性。因此,公司投入大量资源进行研发,并不断探索新技术和新材料。同时,公司也高度重视产品质量,建立了严格的质量管理体系,确保每一件产品都符合高标准的质量要求。这些努力使得公司的产品线不断丰富,产品质量得到了广大客户的认可。

Gamewell-FCI ( Honeywell )公司的发展小趣事

Delus Corp公司起源于一家小型电子初创企业,专注于研发和生产特定领域的电子设备。在公司成立初期,团队面临资金短缺和技术挑战等重重困难。然而,他们凭借对技术的执着追求和对市场的敏锐洞察,成功研发出一款具有创新性的电子产品,该产品在市场上引起了广泛关注。这款产品不仅帮助公司获得了初始资金,也奠定了公司在电子行业的技术领先地位。

Analog Modules Inc公司的发展小趣事

Delus Corp公司深知持续创新对于公司发展的重要性。因此,公司投入大量资源进行研发,并不断探索新技术和新材料。同时,公司也高度重视产品质量,建立了严格的质量管理体系,确保每一件产品都符合高标准的质量要求。这些努力使得公司的产品线不断丰富,产品质量得到了广大客户的认可。

Ceratech Corporation公司的发展小趣事

在快速发展的同时,Ceratech Corporation公司始终关注社会责任和可持续发展。公司积极参与公益事业,通过捐赠和资助等方式支持教育、环保等事业。同时,公司还注重环境保护和资源节约,通过采用环保材料和节能技术等方式降低生产过程中的能耗和排放。此外,公司还积极推行绿色供应链管理,推动整个产业链的可持续发展。通过履行社会责任和推动可持续发展,Ceratech Corporation赢得了社会的广泛认可和尊重。

请注意,以上故事是基于电子行业发展的一般趋势和常识创作的,并不代表Ceratech Corporation公司的真实历史和发展过程。如需了解该公司的真实故事和发展历程,建议查阅相关官方资料或新闻报道。

CDI-DIODE公司的发展小趣事

随着环保意识的日益增强,电子行业也开始向绿色生产转型。CDI-DIODE公司积极响应这一趋势,投入大量资源研发环保型二极管产品,并采用环保材料和生产工艺。这种绿色生产方式不仅降低了公司的生产成本,也符合了社会的可持续发展需求,为公司的未来发展奠定了坚实的基础。

这五个故事虽然是虚构的,但它们反映了电子行业中企业可能面临的一些共同挑战和机遇。无论对于CDI-DIODE公司还是其他企业,这些故事都具有一定的借鉴意义。

问答坊 | AI 解惑

51单片机按键的相关应用

51单片机按键的相关应用…

查看全部问答>

电子技术课程设计题目:秒表(要求:能精确显示0.01秒的变化;能同时对3个不同事件进行计时:比如长跑前三名)

电子技术课程设计题目:秒表(要求:能精确显示0.01秒的变化;能同时对3个不同事件进行计时:比如长跑前三名) …

查看全部问答>

求助:倒车防撞报警系统的仿真?

毕业论文(基于AT89C51的倒车防撞报警系统设计)需要仿真,不知道要从哪里入手?…

查看全部问答>

【转帖】贴片元器件焊接教程(图解版)

在别的网站上看到的一个不错的教程,关于贴片元器件焊接的,上传上来给需要的人看看。 特别感谢原作者!…

查看全部问答>

香帮主,暑假到了,办个STM32F--USB培训班嘛!

感觉USB,可深可浅. 浅的 不管三七二十一拿例子程序来仿,可能凑巧凑合着也能用. 深的,深不可测 香帮主能不能出点力,帮小白们普及点USB应用知识啊? 在上海或者南京什么地方办个班吧,2~5天时间,收费300~1000元…

查看全部问答>

初学者求助,三星K9F4G08U0A刷写程序问题

请教各位电子技术方面的前辈:本人是维修初学者,最近在给SAMSUNG K9F4G08U0A芯片写入原程序后,再读出写入后的程序发现写入后的程序与原程序大总份地方都不正确,编程器根本就没有办法检验,不知道是怎么回事?请各位前辈多多指教,因本人刚开始学 ...…

查看全部问答>

怎样让应用程序支持中文

我公司有个触摸屏是用wince英文系统的,我们电脑和触摸屏的故障信息是同步的,但是电脑改成中文故障信息后,触摸屏不能显示出中文故障,只显示乱码。 我应该怎么弄才能显示出来啊。…

查看全部问答>

用MSP430做485通信,但PC收到的数据不对

使用MAX485(单独USB供电)转换电平和485转USB,串口助手收发数据 逻辑是:PC通过串口助手发送数据给单片机使之进入中断后单片机将数据发送给PC。实验现象是:1:单片机通过485直接发送数据(不用中断),接收正确。2:使用串口中断后,在串口助手中 ...…

查看全部问答>