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口的作用是用于输入/输出操作。
使用STM32F030官方固件库和软件包

去官网下载例程资源
输入网址
3
Presentation Title
10/04/2014
官网上能获得例程资源
• STM32F0xx标准外设库
• 基于STM32F0518-EVAL评估板 • /internet/evalboard/pr oduct/252994.jsp
编译、链接
38
点击“Make”,进行编译
IAR7.10பைடு நூலகம்1造成的问题
Presentation Title
10/04/2014
编译、链接
• /S upport/?note=30605
39
Presentation Title
10/04/2014
编译、链接
40
Presentation Title
• 版本注释:Release_Notes.html
• 路径:STM32F0xx_StdPeriph_Lib_V1.0.0\ • 项目所用开发环境及其版本
• 帮助文档:stm32f0xx_stdperiph_lib_um.chm
• 路径:STM32F0xx_StdPeriph_Lib_V1.0.0\
Presentation Title
10/04/2014
UM1658中的电路图
30
Product Specification
Presentation Title
10/04/2014
UM1658中的电路图
• 振荡电路 LSE HSE
31
Application Note
Presentation Title 10/04/2014
UM1658中的电路图
例程使用2
20
STM32 GPIO 配置之ODR, BSRR, BRR 详解

STM32 GPIO 配置之ODR, BSRR, BRR 详解用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态.ODR寄存器可读可写:既能控制管脚为高电平,也能控制管脚为低电平。
管脚对于位写1 gpio 管脚为高电平,写0 为低电平BSRR 只写寄存器:[color=Red]既能控制管脚为高电平,也能控制管脚为低电平。
对寄存器高16bit 写1 对应管脚为低电平,对寄存器低16bit写1对应管脚为高电平。
写0 ,无动作BRR 只写寄存器:只能改变管脚状态为低电平,对寄存器管脚对于位写1 相应管脚会为低电平。
写0 无动作。
刚开始或许你跟我一样有以下疑惑:1.既然ODR 能控制管脚高低电平为什么还需要BSRR和SRR寄存器?2.既然BSRR能实现BRR的全部功能,为什么还需要SRR寄存器?对于问题1 ------ 意法半导体给的答案是---“This way, there is no risk that an IRQ occurs between the read and the modify access.”什么意思呢?就就是你用BSRR和BRR去改变管脚状态的时候,没有被中断打断的风险。
也就不需要关闭中断。
用ODR操作GPIO的伪代码如下:disable_irq()save_gpio_pin_sate = read_gpio_pin_state();save_gpio_pin_sate = xxxx;chang_gpio_pin_state(save_gpio_pin_sate);enable_irq();关闭中断明显会延迟或丢失一事件的捕获,所以控制GPIO的状态最好还是用SBRR和BRR对于问题2 ------- 个人经验判断意法半导体仅仅是为了程序员操作方便估计做么做的。
因为BSRR的低16bsts 恰好是set操作,而高16bit是reset 操作而BRR 低16bits 是reset 操作。
STM32固件库移植_MAT

0814_lesson2 笔记1:栈指针的概念Stack_Size EQU 0x000002002:堆的概念Heap_Size EQU 0x000000003:DCD定义4个内存地址(0~3,4~7)4:设置进入mian.c5:新建main.c注意事项:0817 固件库移植1:错误10817 建立STM32库函数工程模板建立“工程模板练习”:stm32库、main空文件夹、project空文件夹、output空文件夹新建工程分四个组注意:新建的项目名存放在“project”下,选择芯片,不加载默认启动文件。
添加组1:CM3(ARM内核访问定义):\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport\core_cm3.c添加组2:STlib(ST编写的外设库)STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src下的需要的部分添加组3:system内容是ST工程模板中的“.c”文件(\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template)添加组4:建立自己的main.c(放在main空文件夹下),在添加一个启动的.s文件(\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\st artup\arm的startup_stm32f10x_md(中等容量,按照所使用的选择相应的))指定输出路径:到output文件夹,避免主目录下的文件杂乱。
建立4组添加相应文件,并确认输出文件路径后可以编译。
移植后的错误1:..\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src\misc.c(24): error: #5: cannot open source input file "misc.h": No such file or directory找不到"misc.h"文件解决:指定出其路径错误2::..\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src\misc.c(99): warning: #223-D: function "assert_param" declared implicitly没有发现"assert_param" (参数裁决)的存在。
STM32F4XX固件库之DSP库的说明

STM32F4XX 固件库之DSP 库的说明为了充分发挥STM32F4XX (Cortex-M4F )处理器浮点运算性能,建议使用固件库自带的arm_math.h 头文件而非编译器自带的math.h 。
此文件位于\Libraries\CMSIS\Lib 文件夹。
硬件准备:需要开启STM32F4XX 的FPU ,所以要确定system_stm32f4xx.c 文件中的SystemInit()函数有如下代码,如果没有则加上:编译控制:根据arm_math.h 中的要求(备注1),在工程编译选项(Option )之C/C++中加入如下编译控制定义:__FPU_PRESENT=1__FPU_USED =1ARM_MATH_CM4__CC_ARM对于Cortex-M0或者M3处理器类型,由于没有FPU 因此无法直接进行浮点运算,只能将浮点数进行Q 规格化(q7、q15或Q31)处理,如开平方运算:M0/M3只能通过迭代法(标准数学函数库)计算,而M4F 直接调用VSQRT 指令完成。
文件结构:例程组:各种实际应用的例程,如FFT 变换,FIR滤波,矩阵处理等等公共文件math_helper ,提供例程需要的辅助函数源文件组:各种功能函数的定义或原型。
ARM 和GCC 文件夹的工程将所有源文件编译为库(lib),在应用时供调用事实上arm_math.h 文件中的定义就为源文件组使用的。
因此在将源文件组编译为库时,在应用工程中添加这个库和arm_math.h 即可访问所有DSP 库功能。
也可以根据需要只添加arm_math.h 和需要的源文件,以缩短程序长度。
BasicMathFunctions提供浮点数的各种基本运算函数,如加减乘除等运算。
对于M0/M3只能用Q运算,即文件夹下以_q7、_q15和_q31结尾的文件;而M4F能直接硬件浮点计算,属于文件夹下以_f32结尾的文件。
CommonTablesarm_common_tables.c文件提供位翻转或相关参数表。
STM32固件库使用手册中文

32位基于ARM微控制器STM32F101xx与STM32F103xx固件函数库介绍本手册介绍了32位基于ARM微控制器STM32F101xx与STM32F103xx的固件函数库。
该函数库是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。
该函数库还包括每一个外设的驱动描述和应用实例。
通过使用本固件函数库,无需深入掌握细节,用户也可以轻松应用每一个外设。
因此,使用本固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。
每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。
每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。
所有的驱动源代码都符合“Strict ANSI-C”标准(项目于范例文件符合扩充ANSI-C标准)。
我们已经把驱动源代码文档化,他们同时兼容MISRA-C 2004标准(根据需要,我们可以提供兼容矩阵)。
由于整个固态函数库按照“Strict ANSI-C”标准编写,它不受不同开发环境的影响。
仅对话启动文件取决于开发环境。
该固态函数库通过校验所有库函数的输入值来实现实时错误检测。
该动态校验提高了软件的鲁棒性。
实时检测适合于用户应用程序的开发和调试。
但这会增加了成本,可以在最终应用程序代码中移去,以优化代码大小和执行速度。
想要了解更多细节,请参阅Section 2.5。
因为该固件库是通用的,并且包括了所有外设的功能,所以应用程序代码的大小和执行速度可能不是最优的。
对大多数应用程序来说,用户可以直接使用之,对于那些在代码大小和执行速度方面有严格要求的应用程序,该固件库驱动程序可以作为如何设置外设的一份参考资料,根据实际需求对其进行调整。
此份固件库用户手册的整体架构如下:定义,文档约定和固态函数库规则。
固态函数库概述(包的内容,库的架构),安装指南,库使用实例。
如何下载和使用官方固件库和软件包(以STM32F0为例)

Presentation Title
05/02/2013
谢谢观看
欢迎到下载课件的PDF文件
欢迎进入ST MCU的世界
本节要点
• 使用ST MCU之前去哪里获得相关资料 • 如何在ST官网上获得你想要的资料
• 可以获得哪些文档
• 可以获得哪些例程和参考代码 • 可以获得哪些应用工具
2
Presentation Title
05/02/2013
官网上能获得哪些资源?芯片文档
• ST MCU官网地址:/mcu • 文档
• 使用IAR6.30.7打开项目,并进行编译链接
Presentation Title
05/02/2013
例程下的readme.txt
• 把Utilities目录下例程所需文件加入到项目中,再编译链接就通过
14
1
2 3
Presentation Title
05/02/2013
小结: STM32F0标准外设库的使用
保存到本地目录并解压缩
05/02/2013
STM32F0标准外设库的使用
Presentation Title
05/02/2013
STM32F0标准外设库
• 目录组织结构 • 例程目录:Examples
内容
2
5
• 项目模板目录:Templates
1 3 ………
Presentation Title
05/02/2013
Presentation Title
05/02/2013
评估、开发工具相关资料
• 评估工具:评估板、套索套件
• 板子上预装演示demo的项目例程 • 板子上预装演示demo的用户手册
STM32第一章

32位基于ARM微控制器STM32F101xx与STM32F103xx 固件函数库介绍本手册介绍了32 位基于ARM微控制器STM32F101xx与STM32F103xx的固件函数库。
该函数库是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。
该函数库还包括每一个外设的驱动描述和应用实例。
通过使用本固件函数库,无需深入掌握细节,用户也可以轻松应用每一个外设。
因此,使用本固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。
每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。
每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API 对该驱动程序的结构,函数和参数名称都进行了标准化。
所有的驱动源代码都符合“Strict ANSI-C”标准(项目于范例文件符合扩充ANSI-C标准)。
我们已经把驱动源代码文档化,他们同时兼容MISRA-C 2004 标准(根据需要,我们可以提供兼容矩阵)。
由于整个固态函数库按照“Strict ANSI-C”标准编写,它不受不同开发环境的影响。
仅对话启动文件取决于开发环境该固态函数库通过校验所有库函数的输入值来实现实时错误检测。
该动态校验提高了软件的鲁棒性。
实时检测适合于用户应用程序的开发和调试。
但这会增加了成本,可以在最终应用程序代码中移去,以优化代码大小和执行速度。
想要了解更多细节,请参阅Section 2.5。
因为该固件库是通用的,并且包括了所有外设的功能,所以应用程序代码的大小和执行速度可能不是最优的。
对大多数应用程序来说,用户可以直接使用之,对于那些在代码大小和执行速度方面有严格要求的应用程序,该固件库驱动程序可以作为如何设置外设的一份参考资料,根据实际需求对其进行调整此份固件库用户手册的整体架构如下:… 定义,文档约定和固态函数库规则。
… 固态函数库概述(包的内容,库的架构),安装指南,库使用实例。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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. 标准外设库的文件结构在上一小节中已经介绍了使用标准外设库的开发的优势,因此对标准外设库的熟悉程度直接影响到程序的编写,下面让我们来认识一下STM32F10XXX的标准外设库。
STM32F10XXX 的标准外设库经历众多的更新目前已经更新到最新的3.5版本,开发环境中自带的标准外设库为2.0.3版本,本书中以比较稳定而且较新的V3.4版本为基础介绍标准外设库的结构。
可以从ST的官方下载到各种版本的标准外设库,首先看一下3.4版本标准外设库的文件结构,如图5-3所示。
3.0以上版本的文件结构大致相同,每个版本可能略有调整。
图5-3 STM32F10XXX V3.4标准外设库文件结构表5-4中介绍了每个文件夹所包含的主要容。
表5-4 STM32F10XXX V3.4标准外设库文件夹描述STM32F10x_StdPeriph_Lib_V3.4.0 _htmresc本文件夹包含了所有的html页面资源Libraries CMSIS 见表5-6标准外设库的第一部分是CMSIS 和STM32F10x_StdPeriph_Driver,CMSIS 是独立于供应商的Cortex-M 处理器系列硬件抽象层,为芯片厂商和中间件供应商提供了简单的处理器软件接口,简化了软件复用工作,降低了Cortex-M 上操作系统的移植难度,并减少了新入门的微控制器开发者的学习曲线和新产品的上市时间。
STM32F10x_StdPeriph_Driver 则包括了分别对应包括了所有外设对应驱动函数,这些驱动函数均使用C语言编写,并提供了统一的易于调用的函数接口,供开发者使用。
Project文件夹中则包括了ST官方的所有例程和基于不同编译器的项目模板,这些例程是学习和使用STM32的重要参考。
Utilities 包含了相关评估板的示例程序和驱动函数,供使用官方评估板的开发者使用,很多驱动函数同样可以作为学习的重要参考。
STM32F10xxx标准外设库体系结构如图5-4所示。
图中很好的展示了各层以及具体文件之间的联系,各文件的具体功能说明如表5-5所示。
图5-4 STM32F10xxx标准外设库体系结构表5-5 文件功能说明文件名功能描述具体功能说明core_cm3.hcore_cm3.cCortex-M3核及其设备文件访问Cortex-M3核及其设备:NVIC,SysTick等访问Cortex-M3的CPU寄存器和核外设的函2. 基于CMSIS标准的软件架构根据调查研究,软件开发已经被嵌入式行业公认为最主要的开发成本。
对于ARM公司来说,一个ARM核往往会授权给多个厂家,生产种类繁多的产品,如果没有一个通用的软件接口标准,那么当开发者在使用不同厂家的芯片时将极大的增加了软件开发成本,因此,ARM 与Atmel、IAR、Keil、hami-nary Micro、Micrium、NXP、SEGGER和ST等诸多芯片和软件厂商合作,将所有Cortex芯片厂商产品的软件接口标准化,制定了CMSIS标准。
此举意在降低软件开发成本,尤其针对新设备项目开发,或者将已有软件移植到其他芯片厂商提供的基于Cortex处理器的微控制器的情况。
有了该标准,芯片厂商就能够将他们的资源专注于产品外设特性的差异化,并且消除对微控制器进行编程时需要维持的不同的、互相不兼容的标准的需求,从而达到降低开发成本的目的。
如图5-5所示,基于CMSIS标准的软件架构主要分为以下4层:用户应用层、操作系统及中间件接口层、CMSIS层、硬件寄存器层。
其中CMSIS层起着承上启下的作用:一方面该层对硬件寄存器层进行统一实现,屏蔽了不同厂商对Cortex-M系列微处理器核外设寄存器的不同定义;另一方面又向上层的操作系统及中间件接口层和应用层提供接口,简化了应用程序开发难度,使开发人员能够在完全透明的情况下进行应用程序开发。
也正是如此,CMSIS层的实现相对复杂。
图5-5 CMSIS标准的软件架构层主要分为以下3 个部分:(1) 核外设访问层(CPAL,Core Peripheral Access Layer):该层由ARM 负责实现。
包括对寄存器名称、地址的定义,对核寄存器、NVIC、调试子系统的访问接口定义以及对特殊用途寄存器的访问接口(例如:CONTROL,xPSR)定义。
由于对特殊寄存器的访问以联方式定义,所以针对不同的编译器ARM 统一用来屏蔽差异。
该层定义的接口函数均是可重入的。
(2) 片上外设访问层(DPAL, Device Peripheral Access Layer):该层由芯片厂商负责实现。
该层的实现与CPAL 类似,负责对硬件寄存器地址以及外设访问接口进行定义。
该层可调用CPAL 层提供的接口函数同时根据设备特性对异常向量表进行扩展,以处理相应外设的中断请求。
(3) 外设访问函数(AFP, Access Functions for Peripherals):该层也由芯片厂商负责实现,主要是提供访问片上外设的访问函数,这一部分是可选的。
对一个Cortex-M 微控制系统而言,CMSIS 通过以上三个部分实现了:l 定义了访问外设寄存器和异常向量的通用方法;l 定义了核外设的寄存器名称和核异常向量的名称;l 为RTOS 核定义了与设备独立的接口,包括Debug 通道。
这样芯片厂商就能专注于对其产品的外设特性进行差异化,并且消除他们对微控制器进行编程时需要维持的不同的、互相不兼容的标准需求,以达到低成本开发的目的。
CMSIS 中的具体文件结构如表5-6所示。
表5-6 CMSIS文件夹结构在实际开发过程中,根据应用程序的需要,可以采取2种方法使用标准外设库(StdPeriph_Lib):(1) 使用外设驱动:这时应用程序开发基于外设驱动的API(应用编程接口)。
用户只需要配置文件”stm32f10x_conf.h”,并使用相应的文件”stm32f10x_ppp.h/.c”即可。
(2) 不使用外设驱动:这时应用程序开发基于外设的寄存器结构和位定义文件。
这两种方法的优缺点在“使用标准外设库开发的优势”小节中已经有了具体的介绍,这里仍要说明的是,使用使用标准外设库进行开发可以极大的减小软件开发的工作量,也是目前嵌入式系统开发的一个趋势。
标准外设库(StdPeriph_Lib)支持STM32F10xxx系列全部成员:大容量,中容量和小容量产品。
从表5-6中也可以看出,启动文件已经对不同的系列进行了划分,实际开发中根据使用的STM32产品具体型号,用户可以通过文件”stm32f10x.h”中的预处理define或者通过开发环境中的全局设置来配置标准外设库(StdPeriph_Lib),一个define对应一个产品系列。
下面列出支持的产品系列STM32F10x_LD:STM32小容量产品STM32F10x_MD:STM32中容量产品STM32F10x_HD:STM32大容量产品在库文件中这些define的具体作用围是:l 文件“stm3210f.h”中的中断IRQ定义l 启动文件中的向量表,小容量,中容量,大容量产品各有一个启动文件l 外设存储器映像和寄存器物理地址l 产品设置:外部晶振(HSE)的值等l 系统配置函数因此通过宏定义这种方式,可以使标准外设库适用于不同系列的产品,同时也方便与不同产品之间的软件移植,极大的方便了软件的开发。
1.1.4 STM32F10XXX标准外设库的使用标准外设库中包含了众多的变量定义和功能函数,如果不能了解他们的命名规和使用规律将会给编程带来很大的麻烦,本节将主要叙述标准外设库中的相关规,通过这些规的学习可以更加灵活的使用固件库,同时也将极大增强程序的规性和易读性,同时标准外设库中的这种规也值得我们在进行其他相关的开发时使用和借鉴。
1. 缩写定义标准外设库中的主要外设均采用了缩写的形式,通过这些缩写可以很容易的辨认对应的外设。
2. 命名规则标准外设库遵从以下命名规则PPP表示任一外设缩写,例如:ADC。
源程序文件和头文件命名都以“stm32f10x_”作为开头,例如:stm32f10x_conf.h。
常量仅被应用于一个文件的,定义于该文件中;被应用于多个文件的,在对应头文件中定义。
所有常量都由英文字母大写书写。
寄存器作为常量处理。
他们的命名都由英文字母大写书写。
在大多数情况下,他们采用与缩写规一致。
外设函数的命名以该外设的缩写加下划线为开头。
每个单词的第一个字母都由英文字母大写书写,例如:SPI_SendData。