你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
wamcncn 发布时间:2015-1-8 11:56
http://forum.eepw.com.cn/thread/215752/1原文地址
  c( T) [: b, h/ B: v/ }' {
# j: i$ B0 u2 Q5 {8 P今天调试程序时,想观察一下变量的情况,突然发现平时经常移植别人程序时最容易忽略的一个致命问题,那就是忽略变量类型,这里有必要给大家一定知识啦,都是库里面的,非原创!$ [) k! V; Q& B1 ^' M+ a: R8 F! O

* i6 @: z8 O+ z5 F, W% Q, i
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中找到具体的定义,此部分定义如下。
# B4 V' \* \# o1 /*!< 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 */
# g5 ]6 m, l; |9 ^4 F
CMSIS IO类型限定词
IO类限定词#define描述
_Ivolatile const只读访问
_Ovolatile只写访问
_IOvolatile读和写访问
- F* R: a5 `" V) x. y
固件库与CMSIS数据类型对比
固件库类型CMSIS类型描述
s32int32_t易挥发只读有符号32位数据
s16int16_t易挥发只读有符号16位数据
s8int8_t易挥发只读有符号8位数据
sc32const int32_t只读有符号32位数据
sc16const int16_t只读有符号16位数据
sc8const 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位数据
u32uint32_t无符号32位数据
u16uint16_t无符号16位数据
u8uint8_t无符号8位数据
uc32const uint32_t只读无符号32位数据
uc16const uint16_t只读无符号16位数据
uc8const 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位数据
6 ]9 {$ U8 V) T' a# M2 F

! L7 n6 D2 ?7 o/ t! y# I- c5 }

stm32f10x.h文件中还包含了常用的布尔形变量定义,如:
4 s: g; J. d, m! q1 typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;+ f& C( Z  U/ u9 }+ j
2
& O# d0 X: o2 J, d1 U# ~& B5 ~& a3 typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
; U3 s) A' O( b* [2 p- r/ Z# f4
7 k7 ]1 F$ V8 x0 e2 ]; l9 l0 k5 #define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))5 U6 Y/ Z3 [6 C" b  H
6
5 w- }2 k! \% e' b# b6 d9 U7 typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;
* `# b, X$ M$ |* B3 t( g1 W$ v

不同版本的标准外设库的变量定义略有不同,如3.4版本中就没有之前版本的TRUE和FALSE的定义,用户也可以根据自己的需求按照上面的格式定义自己的布尔形变量。在使用标准外设库进行开发遇到相关的定义问题时应首先找到对应的头文件定义。, G- ^0 o, i( L" n8 [

5 A) ~- t1 a! ]
收藏 2 评论16 发布时间:2015-1-8 11:56

举报

16个回答
wamcncn 回答时间:2015-1-8 13:25:18
pythonworld 发表于 2015-1-8 13:10) m" k/ z3 C3 F" u$ v3 M
两个定义不一样,为什么分家啊? 同问!
0 x8 d4 t9 N. w+ j3 F- f
不知道STM32的官方开发人员,整2套定义的目的,难道直是为了区别固件库和CUBE库?
wamcncn 回答时间:2015-1-8 12:13:45
这是转载,我觉得很有道理,对新手有帮助吧,有时候下载的例程吧,出现很多错误.有的是变量类型的问题,有的是变量大小写的问题
wamcncn 回答时间:2015-1-8 12:36:25
天天晓宇 发表于 2015-1-8 12:28
8 w$ v6 z3 V0 `& s" Z7 V我用的就是cmsis的定义

2 [7 l* p4 @" P- I! G两个定义不一样,为什么分家啊
晓枫VS枯叶 回答时间:2015-1-8 12:01:02
总结的不错,貌似现在用的比较多的事CMSIS的定义......
netlhx 回答时间:2015-1-8 12:07:36
不错,不过用好 代码追踪功能,这些都可以在IDE里找到
红玫瑰的偏爱 回答时间:2015-1-8 12:13:09
天天晓宇 回答时间:2015-1-8 12:28:23
我用的就是cmsis的定义
bldc小菜鸟 回答时间:2015-1-8 12:37:31
总结得很好,赞一个!
coolblood 回答时间:2015-1-8 12:57:36
厉害。总结的很好
pythonworld 回答时间:2015-1-8 13:10:04
两个定义不一样,为什么分家啊? 同问!
大清盐商 回答时间:2015-1-8 13:46:07
学到了,感谢楼主
mr.hs 回答时间:2015-1-10 14:38:28
不错啊   整洁工整  楼主好人
党国特派员 回答时间:2015-1-10 14:58:36
qq.png
qrsgcslqg 回答时间:2015-1-10 23:31:15
总结的很好
12下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版