当前位置:首页 >> 计算机软件及应用 >>

Stm32里经常出现的结构体


Stm32 里经常出现的结构体
在 c 语言中结构体有如下 Struct typename { Int a; Int b; Int c; }bianliang; Typename 为结构名 表示这个结构体的 bianliang 为变量名 表示这个结构体变量

一.当我们只在程序中定义一次结构体变量时 typename 可以省略 如:
Struct { Int a; Int b; Int c; }bianliang; 如果这样做的话 你就不能方便的再在下面再定义该结构体变量 除非全部重新写如: Struct { Int a; Int b; Int c; }bianliang1; Struct { Int a; Int b; Int c; }bianliang2; Struct { Int a; Int b; Int c; }bianliang3; 这样就定义了结构体变量 bianliang1,bianliang2,bianliang3

二.如果要多次定义结构体变量最好不要省略 typename 如:

Struct typename { Int a; Int b; Int c; }bianliang; 如果要多次定义结构体变量 可以这样 如: Struct typename bianliang1; Struct typename bianliang2; Struct typename bianliang3; 这样就可以方便定义 bianliang1,bianliang2,bianliang3 比上面简单多了 (先不考虑 这样定义 Struct typename bianliang1,bianliang2,bianliang3;因为大多数官 方头文件都是按通用规则来写的 它们并不知道 你要定义的变量 当然万万不可修改官方 文件因为如果出错了 你都不知道哪里错了 上一列子同样 所以就必须分开定义)

三.再说一种更方便的定义也就是 stm32 头文件里经常用到的一种方法 typedef
Typedef struct { Int a; Int b; Int c;

如:

}newtype; Typedef 的作用就是重定义新类型 如 typedef int newint ; 就是把 int 重定义为 newint 此时 你就可以在程序中 newint 来定义整型变量了 如 newint a; 就是定义了一个整型 的 a。 定义新变量时 一定要用 typedef 不要用#define 因为#define 只是简单的做字符替 换 在程序中简单的做字符替换是会出错的 如: #define fp int* fp d ,f; 的意思就是 int* d,f; 此时 d 为指针 f 为整型变量 不是你想的那样 定义了 d f 两个指针。 如果用 typedef 则 Typedef int* fp; fp d ,f; 不是简单的替换 fp 被编译器认为是个新类型 依然是 定义了两个 指针。 Typedef struct { Int a; Int b; Int c;

}newtype; 则把结构体这个类型定义为 newtype 了 也就是说 newtype 替换了 struct { Int a; Int b; Int c; }; 此时就是省略 typename 结构体名 但没关系 复杂的结构体内部全部被 newtype 替换了 依 然可以简单的这样定义 如: Newtype bianliang1; Newtype bianliang2; Newtype bianliang3; 此时的方法和第一种方法一样 使用 Typedef 把它弄的更简单。

四.而在 stm32 头文件中往往这样 :
typedef struct { __IO uint32_t CRL; __IO uint32_t CRH; __IO uint32_t IDR; __IO uint32_t ODR; __IO uint32_t BSRR; __IO uint32_t BRR; __IO uint32_t LCKR; } GPIO_TypeDef; #define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) 就是把 GPIOB_BASE 这个值 强制转化为 GPIO_TypeDef 类型的地址 然后用 GPIOB 来替 换它 我们就可以方便的使用这个地址 GPIOB 了 注意地址可以理解为指针 也就是实质 GPIOB 就是个指针 指向这个 GPIO 寄存器组的首地址。 在头文件中有 #define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00) 这样个定义 再经上面的强制转换就是把这个地址开始的后面属于该寄存器的地址全部打包为一整体 GPIOB 这个结构体指针 也就是 GPIOB 被指定只能访问该寄存器组。 下面就可用指针指向运算符来访问该寄存器组里的寄存器了 如: GPIOB-> CRH=0x00000000;// 向寄存器 CRH 里写 0; 上面的定义意思可以理解为在 GPIOB 这个基地址上偏移 4 字节地址单位来得到 CRH 寄存 器的地址(因为__IO uint32_t CRL;占用四字节 结构体里的存储空间是线性排列的)


相关文章:
Stm32里经常出现的结构体.doc
Stm32里经常出现的结构体_计算机软件及应用_IT/计算机_专业资料。Stm32 头文件里的结构体 分析 Stm32 里经常出现的结构体在 c 语言中结构体有如下 Struct ...
Stm32里的结构体解惑.pdf
Stm32里的结构体解惑 - Stm32 里经常出现的结构体 在 c 语言中结构
STM32中使用GPIO的总结(超强).doc
声明一个 GPIO_InitStructure 结构体 例如: GPIO_InitTypeDef GPIO_InitStructure...STM32中GPIO的总结 4页 免费 STM32关于GPIO与AFIO的总... 12页 1下载券 ...
STM32系列常见问答集锦.doc
名字是 GPIO_InitStructure,结构体原型由 GPIO_InitTypeDef 确定,stm32 里 面...就是即使不使能溢出等其他错误中断的情况下,若发生溢 出错误,仍进入中断,...
关于typedef和结构体理解.doc
关于typedef和结构体理解_电子/电路_工程科技_专业资料。关于结构体与typedef的...这 种格式则跟 stm32 中的完全一样了,即 GPIOSpeed_TypeDef 可用来定义变量,...
零死角玩转stm32-高级篇5、3.2寸液晶显示(中英文+图片).pdf
是一本学习 STM32 必备的工具 书。敬请期待! -第 2 页- 5、液晶显示(...LONG biWidth; //指定此结构体的长度,为 40 //位图宽,说明本图的宽度,以...
stm32知识点最终版!.doc
中断控制器 1.STM32F103 的中断系统由嵌套中断向量控制器 NVIC,外部中断/事件...结构体 GPIO_InitTypeDef G EXTI_InitTypeDef E-->GPIO 设置-->选择 断管...
STM32中使用GPIO的总结(超强).doc
STM32中使用GPIO的总结(超强)_电子/电路_工程科技_...声明一个 GPIO_InitStructure 结构体 例如: GPIO_...是在一个三极管导通的时候另一个截 止.要实现...
Stm32初学者全攻略.pdf
但外部的可靠性就就比较低了,尤其是输入信号时经常受到外界干扰或机械性能的限 ...在 STM32 的固件库中有一个结构体 NVIC_InitTypeDef,里面有相应的标 志位...
STM32F4xx系列DMA结构体初始化.doc
STM32F4xx系列DMA结构体初始化 - DMA_InitTypeDef D
献给新手:解析STM32的库函数.doc
结构体中的成员 GPIO_Pin,可以在“stm32f10x_gpio.h”文件中找到对 GPIO_...#define _GPIOA 这表示编译器会将代码中出现的 GPIOA 全部替换为((GPIO_TypeDef...
超经典的STM32学习笔记第一章GPIO口.doc
STM32 GPIO口 固件库中与 GPIO 有关的函数主要有: 函数名 GPIO_Init GPIO_...GPIO_TypeDef 为一结构体: typedef struct { __IO uint32_t CRL; // 端口...
STM32显示汉字精讲.doc
STM32显示汉字精讲_电子/电路_工程科技_专业资料。个人见解,希望能给朋友们带来...先把接口函数里的对应数据类型记住,特别是结构体,因为我们应用就是直接或间接改...
第4章STM32 开发基础知识_图文.ppt
结构体经常很多用户提到,他们对结构体使用不是很熟悉,但是 MDK 太多地方使用结构体以及结构体指针,这让他们一下 子摸不着头脑,学习 STM32 的积极性大大降低,...
STM32总结.doc
STM32总结_电子/电路_工程科技_专业资料。STM32相关...结构体 指向结构体 GPIO_InitTypeDef 的指针 选择待...*如果采用多缓冲器通信,配置 USART_CR3 的 DMA ...
STM32 学习笔记_图文.pdf
STM32 学习笔记 - 2011 年 1 月 15 日 星期六 SysTick 是 MDK 定义了的一个结构体 (在 stm32f10x_map.里面) 里面包含 CTRL、 LOAD、 , ...
解析STM32库函数.pdf
#define _GPIOA 这表示编译器将代码中出现的 GPIOA 全部替换为((GPIO_TypeDef...并将 STM32 微控制器的 GPIOA 设备地 址和所定义的结构体变量 GPIO_Init...
STM32学习笔记.txt
例如:struct U_TYPE *usart3;//定义结构体指针...例如程序中出现了#define SYSCLK_FREQ_72MHz ...这是在 system_stm32f10x.c 文件中设置的: #...
STM32的CAN总线+J1939数据格式说明.doc
STM32CAN总线+J1939数据格式说明_信息与通信_工程科技_专业资料。介绍了CAN总线的帧结构和STM32中CAN收发结构体、收发邮箱及标识符的数据存储结构。并以J1939做了...
STM32库函数底层操作解析_图文.pdf
这表示编译器将代 -2- 码中出现的 GPIOA 全部替换为((GPIO_TypeDef *) ...并将 STM32 微控制器的 GPIOA 设备地址 和所定义的结构体变量 GPIO_Init...
更多相关标签: