STM32单片机库函数结构体详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM32单片机库函数结构体详解
在学习STM32F103的过程中,经常用到库函数,尤其遇到如下的结构体定义语句,如何理解。本文将解释清楚这类结构体的定义。
typedef struct
{
uint32_t x;
uint16_t y;
uint8_t z;
} Sname;
对于以上程序,包含三部分,如下图1所示,包括3部分,分别是typedef、struct{... }和Sname。
图1
(1)typedef是C语言的关键字,其用途是为一种数据类型定义一个新名字,主要是将较复杂的数据类型定义为易记且意义明确的新名字。
通常,我们定义一个变量,如定义一个无符号的整形变量x,则c语言中表示如下:unsigned int x; 数据类型unsigned int比较复杂,因此可以使用typedef
用一个简单的名字重新定义。如:typedef unsigned int uint32_t; 即用uint32_t代表unsigned int。则unsigned int x; 可以表示为uint32_t x;
uint16_t x和uint8_t x也同样是这样的定义。如下所示。
typedef unsigned short uint16_t;
typedef unsigned char uint8_t;
(2)struct也是C语言的关键字,其用途是将具有不同数据类型的变量打包管理,作为结构体。参照上文(1)中变量定义,结构体变量定义为struct Sname;Sname是变量名。为了增加不同数据类型的结构体成员,将成员增加在大括号{ }内,{ }内的内容是结构体的成员变量。如下所示。
struct
{
uint32_t x;
uint32_t y;
uint8_t z;
} Sname;
所以,当有不同数据类型的数据需要打包处理,则将其作为结构体数据处理。如处理一个振动传感器的数据,该传感器具有x、y、z三个方向的振动数据,则可以将其作为一个结构体处理。但是如果一个项目需要多个该传感器,比如5个,那么就需要类似如上的结构体的定义5次,非常繁琐,十分不便。
这时,如果使用typedef关键字,将图1中的○2作为一个整体的结构体数据类型,使用新的名字Sname代替,然后使用Sname定义新变量,将极大的简化编程。如下所示。
typedef struct
{
uint32_t x;
Uint16_t y;
uint8_t z;
} Sname;
以上是结构体替换定义。
Sname sen1;
Sname sen2;
Sname sen3;
Sname sen4;
Sname sen5;
以上是变量定义。若需要引用,则类似如下使用。sen1.x=123;
sen1.y=345;
sen1.z=456;
sen2.x=123;
sen2.y=345;
sen2.z=456;
等等。