关于STM32的变量定义
扫描二维码
随时随地手机看文章
今天调试程序时,想观察一下变量的情况,突然发现平时经常移植别人程序时最容易忽略的一个致命问题,那就是忽略变量类型,这里有必要给大家一定知识啦,都是库里面的,非原创!
3.0以后的版本中使用了CMSIS数据类型,变量的定义有所不同,但是出于兼容旧版本的目的,以上的数据类型仍然兼容。CMSIS的IO类型限定词如表 5?7所示,CMSIS和STM32固件库的数据类型对比如表 5?8所示。这些数据类型可以在STM32F10x_StdPeriph_Lib_V3.4.0LibrariesCMSISCM3DeviceSupportSTSTM32F10xstm32f10x.h中找到具体的定义,此部分定义如下。
1/*!CMSIS IO类型限定词
IO类限定词
#define
描述
_I
volatile const
只读访问
_O
volatile
只写访问
_IO
volatile
读和写访问
固件库与CMSIS数据类型对比
固件库类型
CMSIS类型
描述
s32
int32_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_t
易挥发只读有符号16位数据
vsc8
_I int8_t
易挥发只读有符号8位数据
u32
uint32_t
无符号32位数据
u16
uint16_t
无符号16位数据
u8
uint8_t
无符号8位数据
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位数据
vu8
_IO uint8_t
易挥发读写访问无符号8位数据
vuc32
_I uint32_t
易挥发只读无符号32位数据
vuc16
_I uint16_t
易挥发只读无符号16位数据
vuc8
_I uint8_t
易挥发只读无符号8位数据
stm32f10x.h文件中还包含了常用的布尔形变量定义,如:
1 typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;
2
3 typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
4
5 #define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
6
7 typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;不同版本的标准外设库的变量定义略有不同,如3.4版本中就没有之前版本的TRUE和FALSE的定义,用户也可以根据自己的需求按照上面的格式定义自己的布尔形变量。在使用标准外设库进行开发遇到相关的定义问题时应首先找到对应的头文件定义。