IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32F103xx 固件函数库-1 -> 正文阅读

[嵌入式]STM32F103xx 固件函数库-1

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

编码规则

本章节描述了固态函书库的编码规则。

变量

固态函数库定义了 24 个变量类型,他们的类型和大小是固定的。在文件 stm32f10x_type.h 中我们定义了这
些变量:

typedef signed long s32;
typedef signed short s16;
typedef signed char s8;
typedef signed long const sc32; /* Read Only */
typedef signed short const sc16; /* Read Only */
typedef signed char const sc8; /* Read Only */
typedef volatile signed long vs32;
typedef volatile signed short vs16;
typedef volatile signed char vs8;
typedef volatile signed long const vsc32; /* Read Only */
typedef volatile signed short const vsc16; /* Read Only */
typedef volatile signed char const vsc8; /* Read Only */
typedef unsigned long u32;
typedef unsigned short u16;
typedef unsigned char u8;
typedef unsigned long const uc32; /* Read Only */
typedef unsigned short const uc16; /* Read Only */
typedef unsigned char const uc8; /* Read Only */
typedef volatile unsigned long vu32;
typedef volatile unsigned short vu16;
typedef volatile unsigned char vu8;
typedef volatile unsigned long const vuc32; /* Read Only */
typedef volatile unsigned short const vuc16; /* Read Only */
typedef volatile unsigned char const vuc8; /* Read Only */

布尔型

在文件 stm32f10x_type.h 中,布尔形变量被定义如下:

typedef enum
{
FALSE = 0,
TRUE = !FALSE
} bool;

标志位状态类型

在文件 stm32f10x_type.h 中,我们定义标志位类型(FlagStatus type)的 2 个可能值为“设置”与“重置”(SET
or RESET)。

typedef enum
{
RESET = 0,
SET = !RESET
} FlagStatus;

功能状态类型

在文件 stm32f10x_type.h 中,我们定义功能状态类型(FunctionalState type)的 2 个可能值为“使能”与“失
能”(ENABLE or DISABLE)。

typedef enum
{
DISABLE = 0,
ENABLE = !DISABLE
} FunctionalState;

错误状态类型

在文件 stm32f10x_type.h 中,我们错误状态类型类型(ErrorStatus type)的 2 个可能值为“成功”与“出错”
(SUCCESS or ERROR)。

typedef enum
{
ERROR = 0,
SUCCESS = !ERROR
} ErrorStatus;

外设

用户可以通过指向各个外设的指针访问各外设的控制寄存器。这些指针所指向的数据结构与各个外设的控
制寄存器布局一一对应。
外设控制寄存器结构
文件 stm32f10x_map.h 包含了所有外设控制寄存器的结构,下例为 SPI 寄存器结构的声明:

/*------------------ Serial Peripheral Interface ----------------*/
typedef struct
{
vu16 CR1;
u16 RESERVED0;
vu16 CR2;
u16 RESERVED1;
vu16 SR;
u16 RESERVED2;
vu16 DR;
u16 RESERVED3;
vu16 CRCPR;
u16 RESERVED4;
vu16 RXCRCR;
u16 RESERVED5;
vu16 TXCRCR;
u16 RESERVED6;
} SPI_TypeDef;

寄存器命名遵循上节的寄存器缩写命名规则。RESERVEDi(i 为一个整数索引值)表示被保留区域。

外设声明

文件 stm32f10x_map.h 包含了所有外设的声明,下例为 SPI 外设的声明:

#ifndef EXT
#Define EXT extern
#endif
...
#define PERIPH_BASE ((u32)0x40000000)
#define APB1PERIPH_BASE PERIPH_BASE
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
...
/* SPI2 Base Address definition*/
#define SPI2_BASE (APB1PERIPH_BASE + 0x3800)
...
/* SPI2 peripheral declaration*/
#ifndef DEBUG
...
#ifdef _SPI2
#define SPI2 ((SPI_TypeDef *) SPI2_BASE)
#endif /*_SPI2 */
...
#else /* DEBUG */
...
#ifdef _SPI2
EXT SPI_TypeDef *SPI2;
#endif /*_SPI2 */
...
#endif /* DEBUG */

如果用户希望使用外设 SPI,那么必须在文件 stm32f10x_conf.h 中定义_SPI 标签
通过定义标签_SPIn,用户可以访问外设 SPIn 的寄存器。例如,用户必须在文件 stm32f10x_conf.h 中定义
标签_SPI2,否则是不能访问 SPI2 的寄存器的。在文件 stm32f10x_conf.h 中,用户可以按照下例定义标签

_SPI 和 _SPIn
#define _SPI
#define _SPI1
#define _SPI2

每个外设都有若干寄存器专门分配给标志位。我们按照相应的结构定义这些寄存器。标志位的命名,同样
遵循上节的外设缩写规范,以‘PPP_FLAG_’开始。对于不同的外设,标志位都被定义在相应的文件
stm32f10x_ppp.h 中。
用户想要进入除错(DEBUG)模式的话,必须在文件 stm32f10x_conf.h 中定义标签 DEBUG。
这样会在 SRAM 的外设结构部分创建一个指针。因此我们可以简化除错过程,并且通过转储外设获得来获
得所有寄存器的状态。在所有情况下,SPI2 都是一个指向外设 SPI2 首地址的指针。
变量 DEBUG 可以仿照下例定义:
#define DEBUG 1
可以初始化 DEBUG 模式与文件 stm32f10x_lib.c 中如下:

#ifdef DEBUG
void debug(void)
{
...
#ifdef _SPI2
SPI2 = (SPI_TypeDef *) SPI2_BASE;
#endif /*_SPI2 */
...
}
#endif /* DEBUG*/

Note:1 当用户选择 DEBUG 模式,宏 assert_param 被扩展,同时运行时间检查功能也在固态函数库代码
中被激活。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 11:01:01  更:2022-07-03 11:01:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:29:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码