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

stm32数据类型

[复制链接]
攻城狮Melo 发布时间:2023-5-14 15:34

stm32编程过程经常定义变量类型,经常担心数据运算过程中 超过变量类型范围。因为在编程过程中,不同的CPU,其数据类型的意义各不相同,所以一定要注意相应变量数据类型的定义和转换,否则在计算中可能会出现不确定的错误。所以下面列出常见数据类型:


4 Q5 x% D, k6 b' A3 s

一、C语言数据类型

stm32使用的数据类型定义在 stm32f30x.h中

  1.   This file contains all the peripheral registers definitions, bits
    3 r! [+ [! N/ y7 J
  2.   *          definitions and memory mapping for STM32F30x devices.
复制代码

8 [9 m( k! G7 q. l

整型定义:

  1. #include "core_cm4.h" /* Cortex-M4 processor and core peripherals */1 q, L( @4 Z5 p0 v

  2. ; f6 ~3 u+ a0 F2 a7 ]
  3. #include "system_stm32f4xx.h"9 g# F! d. U* ?4 @- A5 R
  4. 8 }1 T7 @4 i0 F% `
  5. #include <stdint.h>" ]3 X! v! Z) u, r! I1 X$ D

  6. 1 L1 t0 c5 ^6 {' v) d4 L

  7. 9 R& t( ?, `: S# a$ G! }7 Q
  8. /** @addtogroup Exported_types+ ?- @: i2 M% q+ H% u8 z) q

  9. " F; k, H6 r4 d
  10. * @{0 A0 j- {% D" {6 O/ \  \! U* E5 {7 T7 |

  11. ' ]  m) ^6 |4 S. u8 u
  12. */- f3 w. x* @8 K

  13. : c+ z1 @& Y# R
  14. /*!< STM32F10x Standard Peripheral Library old types (maintained for legacy purpose) */7 b& ?1 ]2 ?6 X3 ^) r8 S

  15. ' M& L/ J: q+ [: u5 ^& v* |
  16. typedef int32_t s32;7 [; V" B0 l. A+ Z1 }  A  P! Q0 B

  17. ) E( @. l9 M+ r5 f+ O0 ]
  18. typedef int16_t s16;
    / j8 F! C* @9 o" i$ O  u$ j9 i

  19. % j0 g5 Z7 x( n  e, Q9 w
  20. typedef int8_t s8;
    6 v9 S  z% R3 a; F
  21. & G$ S* {8 Q( ~5 y
  22. 2 q& b" ]4 ~3 F; I% i' O
  23. typedef const int32_t sc32; /*!< Read Only *// A4 `5 b9 p) z& j  A1 C, I) D
  24. $ s8 R+ t2 B9 \2 ?6 P8 @" X
  25. typedef const int16_t sc16; /*!< Read Only */
    2 s0 i- |7 s0 M* K4 Y
  26. + a; J5 E" L# c$ ]# I+ L
  27. typedef const int8_t sc8; /*!< Read Only */! q  ^4 G! @, u
  28. & c; [" b3 Z9 z9 k% ^

  29. ) e9 K6 W2 @3 I! k5 H0 {
  30. typedef __IO int32_t vs32;
    : R+ J& S' o( i0 i4 H# W( P' R7 C. {
  31. 0 H- a# x8 A) [
  32. typedef __IO int16_t vs16;! Y5 r* i  ~$ W. y& n6 ~0 E

  33. 1 L" @+ V" P% h5 ]: j" e  C4 {/ h
  34. typedef __IO int8_t vs8;
    8 n0 e2 u4 a/ Z9 M
  35.   @* P+ l" e4 n, S, p+ I

  36. 6 L% w( m$ K" H- A% `
  37. typedef __I int32_t vsc32; /*!< Read Only */( `( j* {( Z9 _! F/ k9 P2 L/ s

  38. 4 s8 ]  O5 G% D, d' F& O" H6 r
  39. typedef __I int16_t vsc16; /*!< Read Only */
    / T% Z. l& H/ M; I

  40. 6 a" i# q( g: W1 X( n( j4 y' w2 F
  41. typedef __I int8_t vsc8; /*!< Read Only */
    + Q. Y& c: W8 Z3 o
  42. ) I% S7 T# A! B" ^& r* B- U
  43. $ K4 T7 E, G- S
  44. <span style="color:#ff6666;">typedef uint32_t u32; /*常用类型*/  U4 m# ]8 H7 {) i
  45. 1 D5 v; V: j3 q( v! x
  46. typedef uint16_t u16;
    ( ?. j4 T% S( {
  47. ) E7 A" M4 z; ^3 i; x
  48. typedef uint8_t u8;</span>  P' l) o: W+ {4 B7 ~6 Q! Q/ a

  49. ' p, n* X! O) r! B; a

  50. " I7 h! q; ]) V  F
  51. typedef const uint32_t uc32; /*!< Read Only */4 @6 R5 E+ O2 g. @8 q& m$ t6 h

  52. ; k2 D, E, y  h5 |
  53. typedef const uint16_t uc16; /*!< Read Only */2 L8 ~. M0 l- C' P3 R
  54. , ?5 R! O& @! Y- y7 W8 t- y. @
  55. typedef const uint8_t uc8; /*!< Read Only */% ~$ O% R& X1 E% ?& F" P7 `" W1 g+ ?9 |

  56. 5 f8 ~' l4 Q7 ?- i: R& \0 Z

  57. ( v0 [' o$ T+ W
  58. typedef __IO uint32_t vu32;4 q* d3 \+ s4 g4 S" S

  59. & V* U8 R% J1 ^9 Z7 ?4 K% y5 h
  60. typedef __IO uint16_t vu16;
    ( _5 v2 r/ g1 o+ _9 u; s) p

  61. / o  x% i) o3 A( C' p" n
  62. typedef __IO uint8_t vu8;
    ( f* s2 p- }/ \. B
  63. 8 ]( k- Y; V% n
  64. 0 X8 t/ |  ^' \1 h  O5 U
  65. typedef __I uint32_t vuc32; /*!< Read Only */
    4 |" ]) _: Q# @# R) O! r, j6 |+ Q
  66. # P# U- U/ m4 ]& p) ?. j
  67. typedef __I uint16_t vuc16; /*!< Read Only */0 Z0 f+ q3 h7 s! Y0 K; n3 H

  68. 4 E! R9 e3 W6 p  E0 ^$ f1 s6 m: M. m9 `
  69. typedef __I uint8_t vuc8; /*!< Read Only *
复制代码
0 o9 e1 m  n4 d, }0 G) K

' ?# G* A  D2 {5 @2 ^

浮点型:

  1. #if !defined(__STRICT_ANSI__) || defined(__USE_C99_MATH)$ F5 m1 h; @9 x# s3 ~+ ?5 D% H
  2. * J6 z* n7 S& }8 D2 Q& g0 H# T
  3. /* C99 additions */
    ( s" w, T9 a. x5 t0 p/ i

  4. , a- x1 \- L8 I" A$ X7 H# J
  5. typedef float float_t;
      Y9 Q, {4 a$ q2 }. c
  6. ' Q* ]: ~# S" T2 \
  7. typedef double double_t;
复制代码


8 I3 K7 F1 i3 J; C8 A! @3 P- g% D

注:还有float 浮点型 编译器中不能看到其定义(估计已编译了)。

而uint32_t 、uint16_t、uint8_t在哪里定义?在stdint.h文件中,详见下面:

  1. /* exact-width signed integer types */
    1 C' A/ u' f2 q9 W! V% R5 o& x

  2. - T! v/ i0 \+ z" c$ }" }! O
  3. typedef signed char int8_t;+ V1 v; K+ ~$ i
  4. ( g* z" m, u; R- y1 O' Y9 Z
  5. typedef signed short int int16_t;, ]- t1 G. ]) g, J
  6. ) E1 ^% p/ o4 y  {+ w7 c. A
  7. typedef signed int int32_t;0 c1 ^3 Q+ f* F+ X$ Y
  8. & R) W$ ]9 e+ l- x7 P, Q7 p6 O% x
  9. typedef signed __int64 int64_t;7 h' n/ r4 j* a, |, q
  10. 0 @! i, h) N2 E

  11. 1 d$ _6 y+ X* ]0 o
  12. /* exact-width unsigned integer types */+ o: K' t$ B2 P# x' G1 |% h
  13. " p$ O' h( ~* w  E9 M* N' F
  14. typedef unsigned char uint8_t;
    # m0 D/ Q  V& H% s( U* d
  15. 3 V$ ^1 E5 f, ?1 s, a6 d
  16. typedef unsigned short int uint16_t;2 c* [' P' |: D9 y" P) H  w% n5 V
  17. 1 L& O5 G- d5 t: T; }$ t4 W: e3 F
  18. typedef unsigned int uint32_t;) Q- p' [0 M' l! S) z1 m( |" ?
  19. 9 T1 i% a8 X5 ]) _: d( P
  20. typedef unsigned __int64 uint64_t;7 _6 m, w# E  E
  21. 2 I. z8 P; }$ P3 D& q

  22. # s! s3 z% W) S1 n; m
  23. /* minimum values of exact-width signed integer types */. n8 i6 g* {3 N% _$ Q/ c
  24. 4 I  P' o# K; w* k/ M
  25. #define INT8_MIN -128 /* s8 占用1个byte,数据范围 -2^7 到 (2^7-1) */8 Z' a; A# Z: N2 k, Q

  26. 5 J7 w/ Q: A% N- c1 X
  27. #define INT16_MIN -32768 /* s16 占用2个byte,数据范围 -2^15 到 (2^15-1) */; l, _+ m: k) X$ ~
  28. % c& j2 \# X% ^* u2 {# |
  29. #define INT32_MIN (~0x7fffffff) /* -2147483648 is unsigned s32 占用 4个byte,数据范围 -2^31 到 (2^31-1) */  h8 [5 u1 L  _2 Z2 S5 a" c/ R

  30. " @) g. n% Z* p
  31. #define INT64_MIN __ESCAPE__(~0x7fffffffffffffffll) /* -9223372036854775808 is unsigned int64_t占用8个byte,数据范围 -2^63 到 (2^63-1) */4 f' l! y7 T! f4 k- x  X! {
  32. # ~, Y) s. R: f8 ^9 w/ o

  33. 1 G9 B# {9 a$ N2 q" _
  34. /* maximum values of exact-width signed integer types */, D/ _, ~; [# L: c2 r
  35. ; c5 v% @8 I. I5 Z7 H* Y  T/ P7 p
  36. #define INT8_MAX 127
    - p2 ~( k7 k! A- X+ @3 W# S
  37. ) T% J7 |1 d1 H) I; _
  38. #define INT16_MAX 32767
    $ K( l1 w" t, h/ i5 c, t

  39. 3 ]+ A% Z. U) Y1 Q; n
  40. #define INT32_MAX 21474836475 P2 I* j+ E& i
  41.   B3 ]0 f  W0 J. j( A, s( ^1 J
  42. #define INT64_MAX __ESCAPE__(9223372036854775807ll)
    ) G2 \6 b+ f; a1 S

  43. $ C( Y' n& S( Z

  44. ' [: P5 L8 ^( O( v6 I' g) ?  ^
  45. /* maximum values of exact-width unsigned integer types */( d. y% c- }( W6 F% M9 }$ T5 v
  46. ) `" |, e+ i4 [% Z7 _
  47. #define UINT8_MAX 255 /* u8 占用1个byte, 数据范围 0 - 2^8*/* ]/ f% w) Q5 F  f) y2 |0 O( C# b: T

  48. / e% R/ ~1 {# n4 G0 E* L
  49. #define UINT16_MAX 65535 /* u16 占用2个byte, 数据范围 0 - 2^16*/( T9 v6 q# K' M. M: @7 H4 j2 l$ L. v

  50. + }! X* J1 h/ T' a2 [$ Z
  51. #define UINT32_MAX 4294967295u /* u32 占用4个byte, 数据范围 0 - 2^32*/- g1 T/ T/ z! d! A& S- s1 i

  52. - ~+ n) _# m5 i" r) D; h3 F
  53. #define UINT64_MAX __ESCAPE__(18446744073709551615ull)
复制代码

- T9 \+ Y1 d% v) E) M, Z! }

( g( W8 Q# a% F! j8 l

由上述可知:

1、有符号整型

  • s8 占用1个byte,数据范围 -2^7  到 (2^7-1)
  • s16 占用2个byte,数据范围 -2^15 到 (2^15-1)
  • s32 占用 4个byte,数据范围 -2^31 到 (2^31-1)2^31  = 2147483647
  • int64_t占用8个byte,数据范围 -2^63 到 (2^63-1)    2^63 = 9223372036854775807ll: U0 [" e+ \! A" @/ u4 ^) i7 B. w
* L5 b6 x4 J: m7 Y2 u: ~- {
, N5 K. W" u. d% y

2、无符号整型

  • u8  占用1个byte, 数据范围 0 - 2^8
  • u16 占用2个byte, 数据范围 0 - 2^16
  • u32 占用4个byte, 数据范围 0 - 2^32 2^32  = 4294967295
  • uint64_t 占用8个byte, 数据范围 0 - 2^64 2^64  = 18446744073709551615! B3 R" `" R6 P. X+ \# Q
' l* `) ~- i1 P2 p2 q3 i' m; ~

  \) u8 x$ c8 L1 {0 w4 T1 P2 Q

3、浮点型

  •     float ——4个byte,有符号型,可以表达负数/小数; Float 类型至少要能精确表示到小数点后6位。
  •    double——8个byte,有符号型,可以表达负数/小数;Double 类型至少要能精确到小数点后 10 位。
    $ T$ u  o* Y( f& W1 j- A

3 I$ n8 M, b' w" M8 F

: Q2 t3 m2 f" O, ^转载自:路途…
% y+ e* m, g+ f' F1 b, U9 C如有侵权请联系删除8 s7 |9 W# B' j) k" u+ g; v* s
; P$ f/ B- ^& _) H4 b
1 @  }+ G; g/ |
% u0 J. A3 [' m0 ?2 }* A, T
收藏 评论0 发布时间:2023-5-14 15:34

举报

0个回答

所属标签

相似分享

官网相关资源

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