STM32固件库的学习(重要,要常看)

合集下载

STM32固件库使用手册

STM32固件库使用手册

STM32固件库使用手册随着嵌入式系统在各个领域的越来越广泛的应用,各种芯片和处理器的类型也逐渐增多。

在这些芯片中,ST公司的STM32系列尤其受到了大量开发者们的追捧,其功能强大、性能优越、可编程性高等优点使得其成为了嵌入式系统设计的首选。

在STM32系列芯片中,固件库是其重要的组成部分,提供了独立的硬件抽象层和应用程序接口。

这些功能丰富的API库可用于快速搭建程序架构,以及简便地实现一些常见的操作。

节省开发人员大量的开发时间。

对于初学者,欲了解STM32芯片开发的话,学习STM32固件库的使用是第一步,因此在这里我将分享一些该库的基础内容。

一、固件库的启用在使用STM32固件库之前,我们需要先了解如何启用它。

首先,在安装Keil或IAR等IDE环境后,我们需要将官方提供的固件库下载到本地,并将其解压。

解压后,将库文件夹中的 inc 和src 文件夹添加至Keil或IAR的相关项目目录中,从而ermöglichen 制定了。

接下来,在IDE环境中选择对应的芯片,我们需要设置相关的固件库路径。

具体来说,我们打开Keil或IAR的属性管理器,设置 C/C++ -> Directories 中的 Include Paths 为stm32f10x_stdPeriph_driver/inc,设置配置管理器中的包含路径为上述inc文件夹的全路径。

这样就可以启用了 STM32 固件库,开始进行我们的嵌入式系统开发。

二、基础应用程序在信息时代的今天,眼前各种各样的计算机系统和程序都涌现在眼前。

但是无论是最基础的窗口显示,还是复杂的人脸识别技术,都需要一些基本的芯片和系统支持,而 STM32 芯片就是这一系统之一。

其基础应用程序包括了:GPIO 端口配置:GPIO(PIN)模式配置、输出配置、输入配置。

其中GPIO(PIN)模式配置是对GPIO端口输出模式进行设置,包括推挽、开漏等多种模式,GPIO口的作用是用于输入/输出操作。

STM32系列与固件库..

STM32系列与固件库..


嵌入式系统原理与接口技术
5
5.2 STM32F103系列微控制器

总体结构
STM32F103xx的主系统由以下部分构成:

• 四个驱动单元:Cortex-M3内核DCode总线(D-bus),和系统 总线(S-bus);通用DMA1和通用DMA2。 • 四个被动单元:内部SRAM;内部闪存存储器;FSMC;AHB到 APB的桥(AHB2APBx),它连接所有的APB设备。
嵌套矢量中断控制器(NVIC)
• STM32F103xx系列微控制器嵌入了一个嵌套矢量中断控制器, 可以处理43个可屏蔽中断通道(不包括Cortex-M3的16根中断 线),提供16个中断优先级。
嵌入式系统原理与接口技术
10
5.2 STM32F103系列微控制器

功能概述
外部中断/事件控制器(EXTI)
嵌入式系统原理与接口技术
4
5.2 STM32F103系列微控制器

主要特点
STM32F103xx系列微控制器基于高性能32位RISC的ARM Cortex-M3核,工作频率为
72MHz。片上集成了高速存储器和通过APB总线连接的丰富和增强的外设和I/O。所有的 设备都提供标准的通信接口(最多可达两个I2C接口,三个SPI接口和五个USART接口) 。 片上还带有两个12位的ADC、一个12位的双通道DAC、11个16位计时器。根据应用范围 的不同,STM32F103xx系列具有众多的配置型号,非常适合不同应用中的选型。
嵌入式Flash存储器和RAM存储器
• 内置了多达512K的嵌入式Flash,可用于存储程序和数据。多 达64K的嵌入式SRAM可以以CPU时钟速度进行读写(不带等 待状态)。

STM32自学笔记

STM32自学笔记

STM32⾃学笔记⼀、原⼦位操作:原⼦位操作定义在⽂件中。

令⼈感到奇怪的是位操作函数是对普通的内存地址进⾏操作的。

原⼦位操作在多数情况下是对⼀个字长的内存访问,因⽽位号该位于0-31之间(在64位机器上是0-63之间),但是对位号的范围没有限制。

原⼦操作中的位操作部分函数如下:void set_bit(int nr, void *addr)原⼦设置addr所指的第nr位void clear_bit(int nr, void *addr)原⼦的清空所指对象的第nr位void change_bit(nr, void *addr)原⼦的翻转addr所指的第nr位int test_bit(nr, void *addr)原⼦的返回addr位所指对象nr位inttest_and_set_bit(nr, void *addr)原⼦设置addr所指对象的第nr位,并返回原先的值int test_and_clear_bit(nr, void *addr)原⼦清空addr所指对象的第nr位,并返回原先的值int test_and_change_bit(nr, void *addr)原⼦翻转addr所指对象的第nr位,并返回原先的值unsigned long word = 0;set_bit(0, &word); /*第0位被设置*/set_bit(1, &word); /*第1位被设置*/clear_bit(1, &word); /*第1位被清空*/change_bit(0, &word); /*翻转第0位*/⼆、STM32的GPIO锁定:三、中断挂起:因为某种原因,中断不能马上执⾏,所以“挂起”等待。

⽐如有⾼、低级别的中断同时发⽣,就挂起低级别中断,等⾼级别中断程序执⾏完,在执⾏低级别中断。

四、固⽂件:固件(Firmware)就是写⼊EROM(可擦写只读存储器)或EEPROM(电可擦可编程只读存储器)中的程序。

STM32固件库详解

STM32固件库详解

STM32固件库详解最近考试较多,教材编写暂停了一下,之前写了很多,只是每一章都感觉不是特别完整,最近把其中的部分内容贴出来一下,欢迎指正。

本文内容基于我对固件库的理解,按照便于理解的顺序进行整理介绍,部分参考了固件库的说明,但是也基本上重新表述并按照我理解的顺序进行重新编写。

我的目的很简单,很多人写教程只是告诉你怎么做,不会告诉你为什么这么做,我就尽量吧前因后果都说清楚,这是我的出发点,水平所限,难免有很大的局限性,具体不足欢迎指正。

1.1 基于标准外设库的软件开发1.1.1 STM32标准外设库概述STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。

该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。

因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。

每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。

每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。

ST公司2007年10月发布了V1.0版本的固件库,MDK ARM3.22之前的版本均支持该库。

2008年6月发布了V2.0版的固件库,从2008年9月推出的MDK ARM3.23版本至今均使用V2.0版本的固件库。

V3.0以后的版本相对之前的版本改动较大,本书使用目前较新的V3.4版本。

1.1.2 使用标准外设库开发的优势简单的说,使用标准外设库进行开发最大的优势就在于可以使开发者不用深入了解底层硬件细节就可以灵活规范的使用每一个外设。

标准外设库覆盖了从GPIO到定时器,再到CAN、I2C、SPI、UART和ADC等等的所有标准外设。

STM32固件库学习方法

STM32固件库学习方法

STM32固件库学习方法学习STM32固件库可以参考以下方法:1.确定学习目标:在开始学习之前,明确自己的学习目标。

是否希望了解STM32固件库的基本概念和结构?还是希望能够进行STM32单片机开发并应用固件库解决实际问题?确立明确的学习目标可以帮助你更有针对性地学习。

2.学习基础知识:在开始学习STM32固件库之前,建议首先了解一些基础知识,例如C语言、嵌入式系统和微控制器等相关概念。

这将有助于你更好地理解STM32固件库的使用方法和原理。

3.寻找学习资源:寻找适合自己的学习资源是学习STM32固件库的关键。

可以通过互联网上的教程、参考手册、视频教程等方式获取学习资料。

官方提供了丰富的文档和例程,可以帮助你更好地理解固件库的使用方法。

还可以加入STM32的开发者社区,与其他开发者交流学习心得和经验。

4.学习案例分析:学习案例分析是学习STM32固件库的一个重要步骤。

选择一些简单的应用案例进行学习,例如LED闪烁、按键输入、ADC、PWM 等。

通过实际案例的分析和实践,可以更好地理解固件库的使用方法和原理。

6.深入学习:一旦掌握了STM32固件库的基本用法,可以进一步深入学习。

学习如何使用各种外设,如UART、SPI、I2C、定时器等,学习如何进行中断处理和DMA传输等高级功能。

还可以学习如何进行电源管理、低功耗设计等相关知识。

7.自我总结与复习:在学习的过程中,及时进行总结和复习是非常重要的。

在每次学习结束时,复习所学内容,总结自己的理解和经验,可以帮助巩固知识。

8.实践项目:在学习STM32固件库之后,可以尝试着进行一些实际项目的开发。

选择自己感兴趣的项目,比如温度控制、智能家居、机器人等,应用所学的知识进行实际的开发和应用。

以上是学习STM32固件库的一些建议和方法。

学习STM32固件库需要不断的实践和积累经验,希望你能够坚持学习,不断提升自己的技术水平。

STM32固件库详解

STM32固件库详解

STM32固件库详解1.1 基于标准外设库的软件开发1.1.2 使用标准外设库开发的优势简单的说,使用标准外设库进行开发最大的优势就在于可以使开发者不用深入了解底层硬件细节就可以灵活规范的使用每一个外设。

标准外设库覆盖了从GPIO到定时器,再到CAN、I2C、SPI、UART和ADC等等的所有标准外设。

对应的C源代码只是用了最基本的C编程的知识,所有代码经过严格测试,易于理解和使用,并且配有完整的文档,非常方便进行二次开发和应用。

1.1.3 STM32F10XXX标准外设库结构与文件描述1. 标准外设库的文件结构在上一小节中已经介绍了使用标准外设库的开发的优势,因此对标准外设库的熟悉程度直接影响到程序的编写,下面让我们来认识一下STM32F10XXX的标准外设库。

STM32F10XXX的标准外设库经历众多的更新目前已经更新到最新的3.5版本,开发环境中自带的标准外设库为2.0.3版本,本书中以比较稳定而且较新的V3.4版本为基础介绍标准外设库的结构。

可以从ST的官方网站下载到各种版本的标准外设库,首先看一下3.4版本标准外设库的文件结构,如图5-3所示。

3.0以上版本的文件结构大致相同,每个版本可能略有调整。

标准外设库的第一部分是CMSIS 和STM32F10x_StdPeriph_Driver,CMSIS 是独立于供应商的Cortex-M 处理器系列硬件抽象层,为芯片厂商和中间件供应商提供了简单的处理器软件接口,简化了软件复用工作,降低了Cortex-M 上操作系统的移植难度,并减少了新入门的微控制器开发者的学习曲线和新产品的上市时间。

STM32F10x_StdPeriph_Driver则包括了分别对应包括了所有外设对应驱动函数,这些驱动函数均使用C语言编写,并提供了统一的易于调用的函数接口,供开发者使用。

Project文件夹中则包括了ST官方的所有例程和基于不同编译器的项目模板,这些例程是学习和使用STM32的重要参考。

STM32-深入浅出(新手必看)

STM32-深⼊浅出(新⼿必看)STM32学前班教程之⼀:为什么是它经过⼏天的学习,基本掌握了STM32的调试环境和⼀些基本知识。

想拿出来与⼤家共享,笨教程本着最⼤限度简化删减STM32⼊门的过程的思想,会把我的整个⼊门前的⼯作推荐给⼤家。

就算是给⽹上的众多教程、笔记的⼀种补充吧,所以叫学前班教程。

其中涉及产品⼀律隐去来源和品牌,以防⼴告之嫌。

全部汉字内容为个⼈笔记。

所有相关参考资料也全部列出。

:lol教程会分⼏篇,因为太长啦。

今天先来说说为什么是它——我选择STM32的原因。

我对未来的规划是以功能性为主的,在功能和⾯积之间做以平衡是我的⾸要选择,⽽把运算放在第⼆位,这根我的专业有关系。

⾥⾯的运算其实并不复杂,在⼊门阶段想尽量减少所接触的东西。

不过说实话,对DSP的外设并和开发环境不满意,这是为什么STM32⼀出就转向的原因。

下⾯是我⾃⼰做过的两块DSP28的全功能最⼩系统板,在做这两块板⼦的过程中发现要想尽⼒缩⼩DSP的⾯积实在不容易(⽬前只能达到50mm×45mm,这还是没有其他器件的情况下),尤其是双电源的供电⽅式和1.9V的电源让⼈很头疼。

后来因为⼀个项⽬,接触了LPC2148并做了⼀块板⼦,发现⼩型的ARM7在外设够⽤的情况下其实很不错,于是开始搜集相关芯⽚资料,也同时对⼩⾯积的A VR和51都进⾏了⼤致的⽐较,这个时候发现了CortexM3的STM32,⽐2148拥有更丰富和灵活的外设,性能⼏乎是2148两倍(按照MIPS值计算)。

正好2148我还没上⼿,就直接转了这款STM32F103。

与2811相⽐较(核⼼1.8V供电情况下),135MHz×1MIPS。

现在⽤STM32F103,72MHz×1.25MIPS,性能是DSP的66%,STM32F103R型(64管脚)芯⽚⾯积只有2811的51%,STM32F103C型(48管脚)⾯积是2811的25%,最⼤功耗是DSP的20%,单⽚价格是DSP 的30%。

STM32固件库介绍

STM32固件库介绍前⾔本⽂以STM32F1固件库包为例,其他的⽂件夹⽬录结构⼀样的。

从官⽹下载的压缩包原名称:STM32F10x_StdPeriph_Lib_V3.5.0固件库的获取,参考⽂章:解压后出现四个⽂件夹,⼀个帮助⽂档,⼀个⽹页链接。

主要内容_htmresc⽂件夹ST公司的 LOGO 图标等,这个⽂件夹在建⽴库函数模板时⽤不上。

Libraries⽂件夹存放驱动库的源代码与启动⽂件。

这个⽂件夹很重要,我们将会⽤到⾥⾯的部分⽂件。

该⽂件夹下还有两个⼦⽂件夹:CMSIS 和STM32F10x_StdPeriph_Driver ,这两个⼦⽂件夹包含固件库核⼼的所有⼦⽂件夹和⽂件,主要包含⼤量的头⽂件、源⽂件和系统⽂件,是开发必须使⽤到的。

其中的 inc ⽂件夹和 src ⽂件夹⾥的⽂件是相互对应的。

其中,在 CM3 ⽂件夹中的 CoreSupport ⽂件夹存放的是内核访问层的源⽂件和头⽂件,它们提供进⼊ M3 内核的接⼝。

这是由 Arm 公司提供的 CMSIS 核⼼⽂件,所有 M3 内核的芯⽚都是⼀样的,永远都不需要修改。

DeviceSupport 存放⼀些启动⽂件、⽐较基础的寄存器定义以及中断向量定义的⽂件。

Project⽂件夹存放了ST官⽅⽤驱动库写的例程和⼀个⼯程模板。

STM32F10x_StdPeriph_Examples存放ST 官⽅提供的固件实例源码,⾥⾯详细介绍了 STM32F10x 外设的使⽤源代码,在以后的开发过程中,可以修改这个官⽅提供的参考实例,以快速驱动⾃⼰的外设。

我们也可以学习⼀下⾥⾯的源码。

STM32F10x_StdPeriph_Template ⼦⽬录存放的是⼯程模板。

Utilities⽂件夹存放ST公司的评估板的相关例程代码。

这个⽂件夹对于我们建⽴库函数模板没有帮助。

stm32f10x_stdperiph_lib_um.chm这个是编译过的html⽂件,在后⾯的开发中都要⽤到,⾥⾯有很多规范,其重要性和作⽤不亚于PDF版的参考⼿册。

STM固件库详解

STM32固件库详解1.1 基于标准外设库的软件开发1.1.1 STM32标准外设库概述STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。

该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。

因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。

每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。

每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。

ST公司2007年10月发布了V1.0版本的固件库,MDK ARM3.22之前的版本均支持该库。

2008年6月发布了V2.0版的固件库,从2008年9月推出的MDK ARM3.23版本至今均使用V2.0版本的固件库。

V3.0以后的版本相对之前的版本改动较大,本书使用目前较新的V3.4版本。

1.1.2 使用标准外设库开发的优势简单的说,使用标准外设库进行开发最大的优势就在于可以使开发者不用深入了解底层硬件细节就可以灵活规范的使用每一个外设。

标准外设库覆盖了从GPIO到定时器,再到CAN、I2C、SPI、UART和ADC等等的所有标准外设。

对应的C源代码只是用了最基本的C编程的知识,所有代码经过严格测试,易于理解和使用,并且配有完整的文档,非常方便进行二次开发和应用。

1.1.3 STM32F10XXX标准外设库结构与文件描述1. 标准外设库的文件结构可以从ST的官方网站下载到各种版本的标准外设库,首先看一下3.4版本标准外设库的文件结构,如图5-3所示。

3.0以上版本的文件结构大致相同,每个版本可能略有调整。

图5-3 STM32F10XXX V3.4标准外设库文件结构表5-4中介绍了每个文件夹所包含的主要内容。

STM32固件库详解知识讲解

S T M32固件库详解STM32固件库详解/emouse/archive/2011/11/29/2268441.htm l1.1 基于标准外设库的软件开发1.1.1 STM32标准外设库概述STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。

该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。

因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。

每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。

每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。

ST公司2007年10月发布了V1.0版本的固件库,MDK ARM3.22之前的版本均支持该库。

2008年6月发布了V2.0版的固件库,从2008年9月推出的MDK ARM3.23版本至今均使用V2.0版本的固件库。

V3.0以后的版本相对之前的版本改动较大,本书使用目前较新的V3.4版本。

1.1.2 使用标准外设库开发的优势简单的说,使用标准外设库进行开发最大的优势就在于可以使开发者不用深入了解底层硬件细节就可以灵活规范的使用每一个外设。

标准外设库覆盖了从GPIO到定时器,再到CAN、I2C、SPI、UART和ADC等等的所有标准外设。

对应的C源代码只是用了最基本的C编程的知识,所有代码经过严格测试,易于理解和使用,并且配有完整的文档,非常方便进行二次开发和应用。

1.1.3 STM32F10XXX标准外设库结构与文件描述1. 标准外设库的文件结构在上一小节中已经介绍了使用标准外设库的开发的优势,因此对标准外设库的熟悉程度直接影响到程序的编写,下面让我们来认识一下STM32F10XXX的标准外设库。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. stm32的编程中,在stdperiph_drive中添加的misc.c文件是干什么用的啊?
因为STM32 V3.5版本的库函数中没有原来版本中单独对于NVIC(中断向量嵌套)的外设驱动,把NVIC的外设驱动放在了misc.c中,实际上是代替原来的stm32f10x_nvic.c。

2. STM32F10XXX V
3.5标准外设库文件夹描述
标准外设库的第一部分是CMSIS 和STM32F10x_StdPeriph_Driver,CMSIS 是独立于供应商的Cortex-M处理器系列硬件抽象层,为芯片厂商和中间件供应商提供了简单的处理器软件接口,简化了软件复用工作,降低了Cortex-M上操作系统的移植难度,并减少了新入门的微控制器开发者的学习曲线和新产品的上市时间。

STM32F10x_StdPeriph_Driver则包括了分别对应包括了所有外设对应驱动函数,这些驱动函数均使用C语言编写,并提供了统一的易于调用的函数接口,供开发者使用。

Project 文件夹中则包括了ST官方的所有例程和基于不同编译器的项目模板,这些例程是学习和使用STM32的重要参考。

Utilities包含了相关评估板的示例程序和驱动函数,供使用官方评估板的开发者使用,很多驱动函数同样可以作为学习的重要参考。

3.文件功能说明
4.CMSIS文件夹结构
在实际开发过程中,根据应用程序的需要,可以采取2种方法使用标准外设库
(StdPeriph_Lib):
(1)使用外设驱动:这时应用程序开发基于外设驱动的API(应用编程接口)。

用户只需要配置文件”stm32f10x_conf.h”,并使用相应的文件”stm32f10x_ppp.h/.c”即可。

(2) 不使用外设驱动:这时应用程序开发基于外设的寄存器结构和位定义文件。

5. STM32F10XXX标准外设库的使用
标准外设库中包含了众多的变量定义和功能函数,如果不能了解他们的命名规范和使用规律将会给编程带来很大的麻烦,本节将主要叙述标准外设库中的相关规范,通过这些规范的学习可以更加灵活的使用固件库,同时也将极大增强程序的规范性和易读性,同时标准外设库中的这种规范也值得我们在进行其他相关的开发时使用和借鉴。

a.缩写定义
标准外设库中的主要外设均采用了缩写的形式,通过这些缩写可以很容易的辨认对应的外设。

b.命名规则
标准外设库遵从以下命名规则PPP表示任一外设缩写,例如:ADC。

源程序文件和头文件命名都以“stm32f10x_”作为开头,例如:stm32f10x_conf.h。

常量仅被应用于一个文件的,定义于该文件中;被应用于多个文件的,在对应头文件中定义。

所有常量都由英文字母大写书写。

寄存器作为常量处理。

他们的命名都由英文字母大写书写。

在大多数情况下,他们采用与缩写规范一致。

外设函数的命名以该外设的缩写加下划线为开头。

每个单词的第一个字母都由英文字母大写书写,例如:SPI_SendData。

在函数名中,只允许存在一个下划线,用以分隔外设缩写和函数名的其它部分。

对于函数命名,总的来说有以下规则:(1)名为PPP_Init的函数,其功能是根据PPP_InitTypeDef中指定的参数,初始化外设PPP,例如TIM_Init.
(2)名为PPP_DeInit的函数,其功能为复位外设PPP的所有寄存器至缺省值,例如TIM_DeInit.
(3)名为PPP_Init的函数,其功能为通过设置PPP_InitTypeDef结构中的各种参数来定义外设的功能,例如:USART_Init .
(4)名为PPP_Cmd的函数,其功能为使能或者失能外设PPP,例如:SPI_Cmd. (5)名为PPP_ITConfig的函数,其功能为使能或者失能来自外设PPP某中断源,例如:RCC_ITConfig.
(6)名为PPP_DMAConfig的函数,其功能为使能或者失能外设PPP的DMA接口,例如:TIM1_DMAConfig.
(7)用以配置外设功能的函数,总是以字符串“Config”结尾,例如GPIO_PinRemapConfig. (8)名为PPP_GetFlagStatus的函数,其功能为检查外设PPP某标志位被设置与否,例如:I2C_GetFlagStatus.
(9)名为PPP_ClearFlag的函数,其功能为清除外设PPP标志位,例如:I2C_ClearFlag. (10)名为PPP_GetITStatus的函数,其功能为判断来自外设PPP的中断发生与否,例如:I2C_GetITStatus.
(11)名为PPP_ClearITPendingBit的函数,其功能为清除外设PPP中断待处理标志位,例如:I2C_ClearITPendingBit.
这样的命名方式非常便于程序的编写和阅读,以标准外设库中的示例函数为例,下面摘录了STM32F10x_StdPeriph_Examples\ADC\3ADCs_DMA\mian.c中的一段程序。

DMA_InitType Def DMA_InitStructure;
/* DMA1 channel1 configuration----------------------------------------------*/
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
DMA_InitStructure.DMA_MemoryBaseAddr =
(uint32_t)&ADC1ConvertedValue;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = 1;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
DMA_InitStructure.DMA_PeripheralDataSize =
DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize =
DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
/* Enable DMA1 channel1 */
DMA_Cmd(DMA1_Channel1, ENABLE);
这段程序完成了DMA1通道的配置,首先定义了DMA_InitType DMA_InitStructure,接着配置DMA_InitType的各种参数,各参数的命名方式也均使用约定的命名方式,从命名就能够很容易的看出各参数所指代的具体功能。

功能参数配置完成后,使用
DMA_Init(DMA1_Channel1, &DMA_InitStructure);完成相应外设的初始化,最后使用DMA_Cmd(DMA1_Channel1, ENABLE) 使能相应外设。

从这个例子就能够很容易的看出标准外设库这种规范化的命名规则给编写和阅读程序带来的好处。

c.变量定义
CMSIS IO类型限定词
固件库与CMSIS数据类型对比
“stm32f10x.h”是整个标准外设库的入口文件,这个文件包含了STM32F10x全系列所有外设寄存器的定义(寄存器的基地址和布局)、位定义、中断向量表、存储空间的地址映射等。

为了是这个文件适用于不同系列的产品,程序中是通过宏定义来实现不同产品的匹配的,上面这段程序的注释中已经详细给出了每个启动文件所对应的产品系列,与之对应,也要相应的修改这个入口文件,需要根据所使用的产品系列正确的注释/去掉相应的注释define。

在这段程序的下方同样有这样的一个注释程序/*#define USE_STDPERIPH_DRIVER*/ 用于选择是否使用标准外设库,如果保留这个注释,则用户开发程序可以基于直接访问“stm32f10x.h”中定义的外设寄存器,所有的操作均基于寄存器完成,目前不使用固件库的单片机开发,如51、AVR、MSP430等其实都是采用此种方式,通过在对应型号的头文件中进行外设寄存器等方面的定义,从而在程序中对相应的寄存器操作完成相应的功能设计。

如果去掉/*#define USE_STDPERIPH_DRIVER*/的注释,则是使用标准外设库进行开发,用户需要使用在文件“stm32f10x_conf.h”中,选择要用的外设,外设同样是通过注释去掉注释的方式来选择。

相关文档
最新文档