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

stm32数据类型

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

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


& Y" I4 i# x- M. P2 r

一、C语言数据类型

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

  1.   This file contains all the peripheral registers definitions, bits 4 P+ r  j3 X: |; h) m0 E$ x6 U1 ?
  2.   *          definitions and memory mapping for STM32F30x devices.
复制代码

; z, Y4 p0 f* G) u9 B+ e

整型定义:

  1. #include "core_cm4.h" /* Cortex-M4 processor and core peripherals */
    ) {' c8 t2 W7 r0 m! }* b2 R0 l

  2. 5 |' @/ [4 o% i/ y& h
  3. #include "system_stm32f4xx.h"/ c3 k" S4 R2 j1 f& e) v. O

  4. ' w1 Z5 |& _# N1 o) x  n! l+ G) h
  5. #include <stdint.h>% B" l% o9 e0 d& Y% K& ~+ J1 s

  6. + R7 w; v# ^' W2 \0 b5 J
  7. ) U. W. A! S# p! T
  8. /** @addtogroup Exported_types
    2 r: j# f/ b: i( L3 _
  9. 8 f9 S% P" U; Z% K( X' ?* X
  10. * @{. O, N! O+ B( z2 ~) ~7 |4 p2 Q
  11. # w2 E+ u+ _# |8 O9 J) P
  12. */" P% @1 K; \8 S; E$ z( y
  13. # q/ G# k: s& r% L/ i
  14. /*!< STM32F10x Standard Peripheral Library old types (maintained for legacy purpose) */7 [" z/ E& |% U  {' a

  15. . l7 F# v5 Z+ e/ P& ~/ x
  16. typedef int32_t s32;
    2 G8 _7 g1 _' g+ M/ }, ?

  17. ; I- ?0 A  c6 l+ u- U/ D1 d
  18. typedef int16_t s16;
    + L: m' o7 p( }

  19. 0 T. x& C0 w2 h6 Z  v8 K
  20. typedef int8_t s8;. K; B% w  R6 S3 c( R% _
  21. ; g4 p5 A. Z2 C: L: ^3 J

  22. 8 P4 f+ O+ i; c4 R' j8 H
  23. typedef const int32_t sc32; /*!< Read Only */1 V& c$ g+ @8 a' u) W/ b

  24. * W5 j% }' i$ W. v' d7 ?0 ^% z
  25. typedef const int16_t sc16; /*!< Read Only */
    . t. b  n! `8 S& w; K  a0 k  s3 p. T

  26. * A: m+ [/ H1 u7 B& B
  27. typedef const int8_t sc8; /*!< Read Only */! @' D& i& a" B( n5 s/ {# R
  28. ( K5 q& X) k- @& @# X) S$ ^, |
  29. ; ^. S1 c! k8 C  n' j' v9 @) A
  30. typedef __IO int32_t vs32;! A! T6 {% ], K& A) [

  31. 3 C6 T8 B) g! m( N
  32. typedef __IO int16_t vs16;
    * p9 Y8 A! V2 ~/ C

  33. 2 y8 D# h+ B. o
  34. typedef __IO int8_t vs8;
    4 j. m7 S* H1 U

  35. * Y5 ]$ l* y$ `* Z% E: W- L
  36. 3 C& p, a7 t8 x; N' a4 [: \9 Z$ I* R
  37. typedef __I int32_t vsc32; /*!< Read Only */
    + n, Q" T* ?2 U- i0 b; j

  38. 4 u0 H7 u: |' l, ]
  39. typedef __I int16_t vsc16; /*!< Read Only */% h$ _0 a1 ~4 e! C. C) j! f

  40. + Y# p/ a2 O* K7 u  |) }
  41. typedef __I int8_t vsc8; /*!< Read Only */
    8 s8 @. |% @, f1 |

  42. ; j) ^4 }; q, x, D
  43. 8 }4 m5 o% r" J0 D' |  [
  44. <span style="color:#ff6666;">typedef uint32_t u32; /*常用类型*/  G: E/ [* X  N' u3 e

  45. & l& k# S3 E- Z
  46. typedef uint16_t u16;
    4 {; @% [0 R0 s, l. z

  47. 5 I+ z$ {1 p" J& O" v
  48. typedef uint8_t u8;</span>$ D2 k) Q0 I- Q
  49. 4 A9 n8 `, e4 f
  50. 6 X5 D7 z, E" |" ^0 q1 o. K7 w; G
  51. typedef const uint32_t uc32; /*!< Read Only */6 |, i/ l4 ?# @! s; B! I% ~# h. ^0 b7 \
  52. $ ~" L' [9 o1 z4 x) c+ W, R
  53. typedef const uint16_t uc16; /*!< Read Only */
    + z6 [3 B( E4 g+ A5 _, l) m. ^" f

  54. 5 c& N/ d! d# I4 i
  55. typedef const uint8_t uc8; /*!< Read Only */
    0 V- A6 ?! n' c+ N. ^5 d

  56. $ \9 R# h( @; F9 ]9 q; P% U

  57. . V9 H4 y. w" B6 y- [# i
  58. typedef __IO uint32_t vu32;* O1 J8 l: C% s8 R9 G9 d7 @

  59. / J/ M# |( u! d3 \8 E; o" w
  60. typedef __IO uint16_t vu16;
    2 g- b' Y. p/ r" L0 t

  61. 4 Q# f5 d- V5 g! u% h- q: u
  62. typedef __IO uint8_t vu8;8 `% b$ y8 n5 G) }
  63. - d: k* z( d% K: ~) Y
  64. 6 n' K  ]; ?) v
  65. typedef __I uint32_t vuc32; /*!< Read Only */0 Q6 g% c. D) R2 f5 H) {4 R( G& O. `
  66. 4 {- w$ u6 E/ I4 I6 X/ d# s% g
  67. typedef __I uint16_t vuc16; /*!< Read Only */, h  F9 _' Q$ V' O
  68. 8 q+ {0 ], R. ^
  69. typedef __I uint8_t vuc8; /*!< Read Only *
复制代码
2 t) x' N  t2 O6 ?) ?

1 V3 g! Y( _! z7 z/ b5 s

浮点型:

  1. #if !defined(__STRICT_ANSI__) || defined(__USE_C99_MATH)- }( \( P/ V5 I/ H! x$ }* G. d' q% _
  2. 5 C, L0 h" _6 N1 J$ |$ n! r
  3. /* C99 additions */# W) Q+ I' O% y' ?, D( B

  4. . |# l* {1 d& C6 B1 b
  5. typedef float float_t;5 I/ {4 ?- }) i; _' x, ]

  6. 9 ?& w& H! I. y% e, ?2 i$ y2 ^
  7. typedef double double_t;
复制代码

; s; @, X' d9 h% ^

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

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

  1. /* exact-width signed integer types */
    3 S( ^/ ]) e, u

  2. 9 ^  k5 Y  b3 ~2 j
  3. typedef signed char int8_t;* T4 V- p0 T0 j2 o/ m; D- L5 J: S
  4. $ Y' v& h% J: g$ V
  5. typedef signed short int int16_t;3 y) i# J% P1 A

  6. $ i2 l1 K1 V4 k
  7. typedef signed int int32_t;! @4 B0 C- L4 l) {: a7 [

  8. ! W  f0 G$ E, a; c! f8 G! m
  9. typedef signed __int64 int64_t;3 _& R2 Y5 L7 S" t" D
  10. ' J$ i9 t7 \" G! a9 N
  11. 1 t' V9 f3 q7 [  v1 b1 }4 K
  12. /* exact-width unsigned integer types */4 a' J5 E+ B1 V, n5 `: h

  13. 5 \& ^1 y! S  c8 Y5 B  v
  14. typedef unsigned char uint8_t;
    * Z% s, g2 S& e: e0 F

  15. ) }3 U  i( ]9 _
  16. typedef unsigned short int uint16_t;2 r) |7 X8 A: u$ _7 n  K
  17. # K5 `6 m, Q0 g# }
  18. typedef unsigned int uint32_t;) T' g' V  X8 `& Q% e% Z4 E

  19. 0 c" |3 {6 N7 n* o2 u) h; |) H
  20. typedef unsigned __int64 uint64_t;
    ( K6 c  d1 e6 X: K& c

  21. ' V9 d& q& T9 g8 z. u; n7 ]8 y
  22. 7 P$ U! h' G; R6 p7 O6 d9 I
  23. /* minimum values of exact-width signed integer types */
    ' d+ M1 b. e' o% h+ p3 G
  24. 0 t4 P! m/ d1 ~+ B+ }/ J
  25. #define INT8_MIN -128 /* s8 占用1个byte,数据范围 -2^7 到 (2^7-1) */3 N9 L" S. @+ X

  26. - ]) ^. E* q, {; _
  27. #define INT16_MIN -32768 /* s16 占用2个byte,数据范围 -2^15 到 (2^15-1) */
    - {9 G/ |; V9 H  D
  28. $ \  ?4 f! N1 x: a
  29. #define INT32_MIN (~0x7fffffff) /* -2147483648 is unsigned s32 占用 4个byte,数据范围 -2^31 到 (2^31-1) */1 Z+ C+ P( u; O0 {7 h' j
  30. ! m+ h. v% A# f0 x5 r3 K8 N
  31. #define INT64_MIN __ESCAPE__(~0x7fffffffffffffffll) /* -9223372036854775808 is unsigned int64_t占用8个byte,数据范围 -2^63 到 (2^63-1) */
    5 s2 i' J% m3 \1 h+ s& b4 j+ P
  32. 7 N8 M$ {* F% x3 d) V8 ^8 P$ V

  33. 0 a" R" u1 [# o
  34. /* maximum values of exact-width signed integer types */
    ! Z. M8 N# f& o' p
  35.   B4 L9 Y% r2 H
  36. #define INT8_MAX 127' }5 w, _0 Z( X; j3 L3 T" B3 ^
  37. : O9 }8 |3 r  s! p0 \
  38. #define INT16_MAX 32767# u7 g! M! M+ N% h* R2 K
  39. 6 A, r6 y3 }/ P' q
  40. #define INT32_MAX 2147483647: s3 k7 v7 j& b/ H/ s# z
  41. - r5 C6 J3 n6 g
  42. #define INT64_MAX __ESCAPE__(9223372036854775807ll)' ?8 o; A2 S$ E$ K  x6 ^( M$ E3 Z- [

  43. 0 [( v' y( D% D( I' C3 a* Y
  44. % y& z& J4 X6 U( G
  45. /* maximum values of exact-width unsigned integer types */
    , Q! p; {6 @+ [3 \8 z; w: x
  46.   ?) q+ Q: Y' O: s6 c# o7 N7 t
  47. #define UINT8_MAX 255 /* u8 占用1个byte, 数据范围 0 - 2^8*/  n% _' `0 A9 M3 _$ N, Y0 e, j8 R6 j

  48.   V0 D5 i  E; J! y4 O3 f8 |( R
  49. #define UINT16_MAX 65535 /* u16 占用2个byte, 数据范围 0 - 2^16*/
    2 C* H' W7 ~5 a* e: I. M# _+ k

  50. , z! j# a# @) s
  51. #define UINT32_MAX 4294967295u /* u32 占用4个byte, 数据范围 0 - 2^32*/1 T5 C8 H  ?& Q% o
  52. ; N" o  n; |: {9 \0 r5 L
  53. #define UINT64_MAX __ESCAPE__(18446744073709551615ull)
复制代码

; ?2 |! O0 w0 U+ H  G, c# t

5 Z0 ?0 r; e6 }0 E; u

由上述可知:

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
    % `. V; k+ i3 U% O. q4 t# @
) f! m; m3 u1 o: D/ p' O/ x

2 G0 [/ W4 d8 F5 V# ?3 q: |7 O

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
    # S( z: B% o" _. C& j; d% ^: {

$ }3 i  A& y- o* Q, B0 T

6 a! n7 r: e( k7 r+ y1 n

3、浮点型

  •     float ——4个byte,有符号型,可以表达负数/小数; Float 类型至少要能精确表示到小数点后6位。
  •    double——8个byte,有符号型,可以表达负数/小数;Double 类型至少要能精确到小数点后 10 位。" D  F0 y1 }4 h3 u7 p' D+ h

! b4 {, D3 I+ P2 o9 e/ C4 q! h
4 J: n, U7 m. e5 ?. k
转载自:路途…
9 v/ e$ f/ Q9 ?$ V) T如有侵权请联系删除
& h3 d; c* Q0 P& \( R
9 w5 L3 Z5 e. c& w: S; e' H& i

* x; J+ f2 u* h' y* t/ }
5 r+ U4 e( a0 L$ g" l
赞 收藏 评论0 发布时间:2023-5-14 15:34

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版