收藏 分享(赏)

KEIL MDK和STM32的数据类型 之入门篇.pdf

上传人:精品资料 文档编号:8379564 上传时间:2019-06-23 格式:PDF 页数:6 大小:171.61KB
下载 相关 举报
KEIL MDK和STM32的数据类型 之入门篇.pdf_第1页
第1页 / 共6页
KEIL MDK和STM32的数据类型 之入门篇.pdf_第2页
第2页 / 共6页
KEIL MDK和STM32的数据类型 之入门篇.pdf_第3页
第3页 / 共6页
KEIL MDK和STM32的数据类型 之入门篇.pdf_第4页
第4页 / 共6页
KEIL MDK和STM32的数据类型 之入门篇.pdf_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、STM32 数据类 型入门 篇 KEIL MDK 和 STM32 的 数据类型 之入门篇 编程 过程中,不同的 MCU 或编不译器, 其数据类型 的意义各不相 同,所以一 定要注意相 应变量数 据 类型 的定义和转换 ,否则在程 序 编译时候 会出错 。 在 KELI MDK 数据 类型 中 进了 如下 定义 char 占用 1 个字节 short int 占用 2 字节 int 占用 4 字节 long 占用 4 字节 long int 占用 4 字节 float 占用 4 字节 double 占用 8 字节 即有 如下 宏定义 typedef unsigned char uint8; /

2、无符号 8 位字符 型变量 typedef signed char int8; / 有符号 8 位字符 型变量 typedef unsigned short uint16; / 无符号 16 位短 整型变量 typedef signed short int16; / 有符号 16 位短 整型变量 typedef unsigned int uint32; / 无符号 32 位整 型变量 typedef signed int int32; / 有符号 32 位整 型变量 typedef float fp32; / 单精 度浮点数(32 位长度) typedef double fp64; / 双精

3、度浮点数(64 位长度) 注:C 语言 中的 种类 数据: 整型 :int short long 实 型:float , double 。 其中,Unsigned 为无 符号 , signed 有符号。 STM32 数据类 型入门 篇 STM32 的数 据类 型的 宏定 义 STM32 采用了大量 的固件库, 其中在 2.0 库中有 24 个数据类 型如下 typedef unsigned char u8;/* 无 符号 8 位变 量*/0255 一 字节 typedef signed char s8;/* 有符号 8 位变量*/-128127 typedef volatile unsigne

4、d char vu8;/* 易 变的 8 位无符 号变量*/ typedef volatile signed char vs8;/* 易 变的 8 位有 符号 变量*/ typedef unsigned char const uc8; /* 只 读的 8 位无 符号 变量 */ typedef signed char const sc8; /* 只 读的 8 位有 符号变 量 */ typedef volatile unsigned char const vuc8; /* 易 变只 读的 8 位无 符变 量*/ typedef volatile signed char const vsc8;

5、/* 易变只 读8 位有符 号变 量 */ typedef unsigned short u16; /*16 位短 整 型无 符号 变量*/065535 两字 节 typedef signed short s16; /*16 位短整 型 有符 号变 量*/-3276832767 两字节 typedef volatile unsigned short vu16; typedef volatile signed short vs16; typedef unsigned short const uc16; /* Read Only */ typedef signed short const sc16

6、; /* Read Only */ typedef signed short const sc16; /* Read Only */ typedef volatile unsigned short const vuc16; /* Read Only */ typedef volatile signed short const vsc16; /* Read Only */ typedef unsigned long u32; /*32 位长 整 型无 符号 变量*/0(232-1) 四 字节 typedef signed long s32; /*(-232)/2 (-232)/2-1 四 字节

7、typedef volatile unsigned long vu32; typedef volatile signed long vs32; typedef unsigned long const uc32; /* Read Only */ typedef signed long const sc32; /* Read Only */ typedef volatile unsigned long const vuc32; /* Read Only */ typedef volatile signed long const vsc32; /* Read Only */ 对部分数 据类 型后 面

8、作了 注释 ,其 它类型 类推。 对于float int 编译 器中 不能看 到 其 定义(估 计已 编译 了)。 STM32 数据类 型入门 篇 不同类型 数据 的混 合运算在C 语言 中, 不同 类型的数据间 是可以混合 运算的。在 进行运算 时, 不同类型的数 据要先转换 成同一类型 ,然后进 行运算。转换 的规则如下 : 注意 :箭头的方向 只表示数据 类型级别的 高低,由 低向高转换, 这个转换过 程是一步到 位的。 数据类 型转 换规则 各类 数据类型的转 换,分为两 种方式:隐 式(编译 软件自动完成 ),显式( 程序强制转 换) 隐 式转换规则 : 字符 必须先转换为 整数(C

9、 语言规 定字符类型数据和 整型数据之间 可以通用) short 型转换为 int 型(同 属于整型) float 型数据在运 算时一律转 换为双精度(double)型,以提 高运算精度( 同属于实型) 赋值 时,一律是右 部值转换为 左部类型 注: 当整型数据 和双精度数 据进行运算时 ,C 先将 整型数据转换 成双精度型 数据, 再进 行运算, 结果 为双 精度类型数据 当字 符型数据和实 型数据进行 运算时,C 先将字符 型数据转换成 实型数据, 然 后进行计算, 结果 为实 型数 据 显式 转换规则:例 :(int)(x+y); 注: 强制类型转换 时,得到一 个所需要的 中间变量 ,

10、原来变量的 类型未发生 变化 STM32 数据类 型入门 篇 关于两个 关键 词说 明 volatile const (1)volatile :这个 关键字,很 多人只知道用 ,不知道其含 义,有介绍 解释是不易 被编译器 优 化的。在 STM32 资料中解释加 了易挥发的变 量。这些解 释都是含糊 不清的。 为此笔者 专门查了下 这个修饰 关键字含义 通俗的解 释 : 随时会改变, 并被多函数调用 可以加 volatile 修饰 。 简称易 变变量或易 挥发变量。 表示这个 变量的真的 很容易变 。 进阶解释 : 加了 这个 volatile 意义就是在每 次取这个变量 值的时候, 要求不是

11、取 它上次在 某个 时 候取的临时 缓存变量( 比如说暂 存在某个寄存 器中),而 是直接到内 存中取。 个人经验 : 告诉 编译器,volatile 定义的变量 必须 RAM 变量.不能 是寄存器变量. 尤 其是中断中 用 全局变 量。 (2)const : 在定义变 量时候,如 果加上关键词 const,则变 量的值在程 序运行期间 不能改变 , 当然 不能再赋值了 。 这 种变量称为常 变量 (constant variable ) 或是只读变 量 (read-only-variable , 这样 觉得更恰当) 。 STM32 数据类 型入门 篇 STM32F10x_StdPeriph_

12、Driver 3.0 以后的 版本中使用了 CMSIS 数据类型 3.0 以后版本与之前版本变量的定义有所不同 , 但是 出于兼容旧版本的目的, 以上的数据 类型仍然兼容。 CMSIS 的IO 类型限定词如表 3 所示,CMSIS 和STM32 固件 库的数据类型对比如表 5 所示。这些数据 类型可以 在 STM32F10x_StdPeriph_Lib_V3.4.0LibrariesCMSISCM3DeviceSupportSTSTM32F10x stm32f10x.h 中找到具体的定义。 数据类型 和IO 类型 限 定词 Cortex-Mx HAL 使用标 准ANSI C 头文 件 定义的标

13、 准类型 。特别用 类型限定 词IO来访问外 设 的变量。 表3 数据类型限定词IO 。 IO 类型 限定 词 #define 描述 _I volatile const 只读 访问 _O volatile 只写 访问 _IO volatile 读和 写访 问 ST 从库包中移除了文件”stm32f10x_type.h” ,新的库使用CMSIS 和 定义的 数据类型 。 表5 展示了STM32F10xxx 和 之间数据类型 的 一一对应关 系。 表5 STM32F10xxx 固件库V2.0.3 与CMSIS 数据类型对比 STM32F10xxx固件库类 型 CMSIS 类型 描述 s32 int

14、32_t 有符 号32位数据 s16 int16_t 有符 号16位数据 s8 int8_t 有符 号8位数据 sc32 const int32_t 只读 有符 号32位数据 sc16 const int16_t 只读 有符 号16位数据 sc8 const int8_t 只读 有符 号8位数据 vs32 _IO int32_t 易挥发读写访问有符号 32位数 据 vs16 _IO int16_t 易挥发读写访问有符号 16位数 据 vs8 _IO int8_t 易挥 发读写访 问有符号8 位数 据 vsc32 _I int32_t 易挥发只读有符号32 位 数据 vsc16 _I int16

15、_t 易挥发只读有符号16 位 数据 vsc8 _I int8_t 易挥发 只读 有符 号8 位数 据 u32 uint32_t 无符 号32 位数 据 u16 uint16_t 无符 号16 位数 据 u8 uint8_t 无符 号8位数据 STM32 数据类 型入门 篇 uc32 const uint32_t 只读 无符 号32 位数 据 uc16 const uint16_t 只读 无符 号16 位数 据 uc8 const uint8_t 只读 无符 号8位数据 vu32 _IO uint32_t 易挥发读写访问无符号 32位数据 vu16 _IO uint16_t 易挥发读写访问无符

16、号 16位数据 vu8 _IO uint8_t 易挥发 读写 访问 无符 号8 位数 据 vuc32 _I uint32_t 易挥发只读无符号32 位 数据 vuc16 _I uint16_t 易挥发只读无符号16 位 数据 vuc8 _I uint8_t 易挥发 只读 无符 号8 位数 据 注意 出 于兼 容旧版 本的 目的 文件”stm32f10x.h”中仍 然定 义了STM32F10xxx 固件 库原有 数 据类型。 文件”stm32f10x.h”中也定义了STM32F10xxx固件库专用类型. 它们是:typedef enum FALSE = 0, TRUE = !FALSE bool; typedef enum RESET = 0, SET = !RESET FlagStatus, ITStatus; typedef enum DISABLE = 0, ENABLE = !DISABLE FunctionalState; #define IS_FUNCTIONAL_STATE(STATE) (STATE) = DISABLE) | (STATE) = ENABLE) typedef enum ERROR = 0, SUCCESS = !ERROR ErrorStatus;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报