电子产品世界 » 论坛首页 » 电子DIY » ARM DIY » STM32的变量定义(搞通STM32必须要理解透,这是基础)


共18条 1/2 1 2 跳转至

STM32的变量定义(搞通STM32必须要理解透,这是基础)

工程师
2012-05-21 23:47:26    评分
今天调试程序时,想观察一下变量的情况,突然发现平时经常移植别人程序时最容易忽略的一个致命问题,那就是忽略变量类型,这里有必要给大家一定知识啦,都是库里面的,非原创!

3.0以后的版本中使用了CMSIS数据类型,变量的定义有所不同,但是出于兼容旧版本的目的,以上的数据类型仍然兼容。CMSIS的IO类型限定词如表 5‑7所示,CMSIS和STM32固件库的数据类型对比如表 5‑8所示。这些数据类型可以在STM32F10x_StdPeriph_Lib_V3.4.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h中找到具体的定义,此部分定义如下。
1 /*!< STM32F10x Standard Peripheral Library old types (maintained for legacy purpose) */
 2 
 3 typedef int32_t s32;
 4 
 5 typedef int16_t s16;
 6 
 7 typedef int8_t s8;
 8 
 9 typedef const int32_t sc32; /*!< Read Only */
10 
11 typedef const int16_t sc16; /*!< Read Only */
12 
13 typedef const int8_t sc8; /*!< Read Only */
14 
15 typedef __IO int32_t vs32;
16 
17 typedef __IO int16_t vs16;
18 
19 typedef __IO int8_t vs8;
20 
21 typedef __I int32_t vsc32; /*!< Read Only */
22 
23 typedef __I int16_t vsc16; /*!< Read Only */
24 
25 typedef __I int8_t vsc8; /*!< Read Only */
26 
27 typedef uint32_t u32;
28 
29 typedef uint16_t u16;
30 
31 typedef uint8_t u8;
32 
33 typedef const uint32_t uc32; /*!< Read Only */
34 
35 typedef const uint16_t uc16; /*!< Read Only */
36 
37 typedef const uint8_t uc8; /*!< Read Only */
38 
39 typedef __IO uint32_t vu32;
40 
41 typedef __IO uint16_t vu16;
42 
43 typedef __IO uint8_t vu8;
44 
45 typedef __I uint32_t vuc32; /*!< Read Only */
46 
47 typedef __I uint16_t vuc16; /*!< Read Only */
48 
49 typedef __I uint8_t vuc8; /*!< Read Only */

 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的定义,用户也可以根据自己的需求按照上面的格式定义自己的布尔形变量。在使用标准外设库进行开发遇到相关的定义问题时应首先找到对应的头文件定义。




关键词: STM32     变量     定义     搞通     须要     理解     这是         

高工
2012-05-22 00:10:14    评分
2楼
这里的变量定义俺早就看过了的。。。。。。

专家
2012-05-22 10:41:54    评分
3楼
我使用了ucosii的写法规范~~

高工
2012-05-22 10:44:16    评分
4楼
易挥发,这个翻译有问题,不确切,不恰当

专家
2012-05-22 11:47:15    评分
5楼
变量定义就是为了直观省事

工程师
2012-05-22 13:03:45    评分
6楼
这个词我也是理解不透,麻烦版主给解释下吧

工程师
2012-05-22 13:05:06    评分
7楼

但是通常要是不去看看如何定义的,那在应用时很容易出现问题


高工
2012-06-20 22:21:31    评分
8楼
布尔类型的变量占几个字节?

助工
2012-06-23 08:52:54    评分
9楼

新库的教程好像不多


助工
2012-09-12 13:06:27    评分
10楼
ST老改什么?造成不统一

共18条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]