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

stm32数据类型

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

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

  }; l: J3 b. H* T2 S

一、C语言数据类型

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

  1.   This file contains all the peripheral registers definitions, bits ' }6 n0 c. M- S3 Y) ^
  2.   *          definitions and memory mapping for STM32F30x devices.
复制代码


4 d0 r6 D  d* g6 i# q

整型定义:

  1. #include "core_cm4.h" /* Cortex-M4 processor and core peripherals */* ~' ?) w/ d: L
  2. - b$ g# k3 N. }: N4 k5 I  C8 N
  3. #include "system_stm32f4xx.h"
    : `1 o! \  U% w$ ]2 h( _

  4. ' @0 N% R/ a: B8 `$ J
  5. #include <stdint.h>1 ]4 s3 g: Z5 H/ I" v
  6. " G7 h5 a; g% L: o

  7. 9 ]$ x$ j9 r/ s. r  S+ ~& }/ q( S. [
  8. /** @addtogroup Exported_types
    5 t; N, k" a' A) J# ?5 w/ x6 w
  9. % q- w) c9 @+ `- v# ^, [1 R1 z4 V7 N
  10. * @{
    4 \' o" H$ b  n- m" x5 l

  11. 7 T, j" \3 A: m, i& ^* C
  12. */6 A) E+ U9 @1 X2 H, `
  13. ' ?  {) J8 Z: m( J
  14. /*!< STM32F10x Standard Peripheral Library old types (maintained for legacy purpose) *// f5 z: A5 X  A) j

  15. / m! t0 H) p7 X, V( H5 g! X) s7 G
  16. typedef int32_t s32;
    9 B" {. K+ Y2 U7 z% G

  17. - P! k( C, E, G! O) T! H& N
  18. typedef int16_t s16;* Z" r3 B' Q8 Q2 W% Z
  19. # n( m6 O2 H8 `; V9 {% ?1 Y2 Z
  20. typedef int8_t s8;; V( z4 q" |8 C4 d( n3 A

  21. - d' D7 K2 F" G" X: P

  22. / j0 D& J2 }+ m
  23. typedef const int32_t sc32; /*!< Read Only */
    # f& U7 e+ Q9 I6 Y. v
  24. & b! l0 h' I3 ]( |+ K1 {( P
  25. typedef const int16_t sc16; /*!< Read Only */( u( X/ [- Q) J0 q

  26. ! R' H- V1 `/ ]9 C# K. w
  27. typedef const int8_t sc8; /*!< Read Only */
    7 q# |% @7 _+ S' D  G% M2 _

  28. 0 X* x( z3 {! s  o" r, Y
  29. 0 D: B% j  u  R  s" o4 M2 z
  30. typedef __IO int32_t vs32;+ G# G3 a/ s- C3 t5 f9 o7 O
  31. % _; h, J* T2 z, ~' z! W1 ]" T  \
  32. typedef __IO int16_t vs16;/ _3 k3 r) }/ ?; m
  33. $ g6 L* P, K9 \
  34. typedef __IO int8_t vs8;  D0 F0 I# [7 \+ Y7 y

  35. , W0 o. N/ `7 f# [* ?0 c
  36. , T+ M( r, j0 Y9 B
  37. typedef __I int32_t vsc32; /*!< Read Only */
    & ]* Q2 Q  b, U. Q4 d8 K; I
  38.   H3 U8 W5 D0 D0 F, [4 n
  39. typedef __I int16_t vsc16; /*!< Read Only */
    % x9 e0 P2 c. b/ B& E& k7 A

  40. - ^8 `$ _) Y( O7 s; c' j7 T
  41. typedef __I int8_t vsc8; /*!< Read Only */
    1 U/ e, ]6 u  v# _. \$ k/ {
  42. 3 j& v7 f4 ^+ \4 M. Z4 m' J
  43. ; k& E, Y* p& h8 X) ]" q% r
  44. <span style="color:#ff6666;">typedef uint32_t u32; /*常用类型*/
    ; G8 `- K# Z' C( ^

  45. , F% Z" u; v/ E
  46. typedef uint16_t u16;
    3 R  B& B( k( k, H4 c
  47. % y# @3 f, {% T" ~
  48. typedef uint8_t u8;</span>1 N2 S" W% k  Z* m/ ]
  49. 1 q1 ?  i/ @9 F$ _
  50. 6 `4 q( e" [4 W4 W$ p3 J$ E
  51. typedef const uint32_t uc32; /*!< Read Only */; v3 K$ N+ y" i5 ?- d# Y. I" {4 S
  52. ' s7 ^3 K' ?2 a" P8 h! K7 H
  53. typedef const uint16_t uc16; /*!< Read Only */: [+ t- b# P: U' A" t9 ~
  54. , P' Q9 ?) c4 |) [, Y8 ]5 B+ L
  55. typedef const uint8_t uc8; /*!< Read Only */0 g% k4 j) F  g" f; U, A. A9 }

  56. ( ~. V$ C3 {5 C0 m$ ^6 [

  57. 5 m9 D4 ]: \- W
  58. typedef __IO uint32_t vu32;) |( Y0 S. F" t' E* i* N; s
  59. 0 V8 O( m8 }/ |) \8 Y$ G7 f% U
  60. typedef __IO uint16_t vu16;
    6 N( ^( P" ^+ j

  61. + H/ a5 R7 p& N6 K$ I
  62. typedef __IO uint8_t vu8;$ C5 L& X, A' E+ w  y+ }& P
  63. $ Q% I! M! d$ a- b# W2 m
  64. $ Q5 `( G% y3 W. Z
  65. typedef __I uint32_t vuc32; /*!< Read Only */. X5 Y. e/ v  {5 K

  66.   O. Y4 E; Q7 S9 D* O8 k
  67. typedef __I uint16_t vuc16; /*!< Read Only */
    " V6 z3 x$ b7 ?1 n  j* h8 e
  68. 0 n8 f2 v4 s. p2 q2 u
  69. typedef __I uint8_t vuc8; /*!< Read Only *
复制代码
. }2 T. E5 Q: |# [


1 Y8 t6 k4 F* s" _

浮点型:

  1. #if !defined(__STRICT_ANSI__) || defined(__USE_C99_MATH)
    * h7 }. _0 F2 g! t  U6 l
  2. & E% }7 B& k  M6 l6 x
  3. /* C99 additions */! g# k1 w+ W: E; e' D

  4. . I9 s' Y5 h$ v2 O) C, q( x
  5. typedef float float_t;4 P- i8 C; r' }- \9 j5 m$ V
  6. & A. V6 p; L) e9 N" s. H
  7. typedef double double_t;
复制代码

5 [& o5 A0 B. }& M" M0 g$ d8 g2 l0 m

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

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

  1. /* exact-width signed integer types */
    , u! z9 `& \/ w1 I; Q

  2. 5 |. m7 Z  C% s7 p; J8 }
  3. typedef signed char int8_t;
    % K! F$ h, |6 c- S

  4. 4 I) z3 {# L( W& A# ]* q
  5. typedef signed short int int16_t;
    % l2 [) U1 ~& |- \
  6. ) e2 w. Q9 a0 F% N1 b& q
  7. typedef signed int int32_t;/ F' U: U; M. b% g1 k
  8. 6 J" ^) M5 K' \" U# R
  9. typedef signed __int64 int64_t;: Q% E0 T5 M% ~8 ^& [
  10. ! D  `; ]% Q5 R8 }8 l- {+ {4 T
  11.   T; v1 c* d; Q4 n& x$ }
  12. /* exact-width unsigned integer types */* K* T0 b8 \* y) K; W: b( c

  13. # d" H: o! \5 q& @- p
  14. typedef unsigned char uint8_t;* O0 `$ p$ t1 J: q% C" x8 J2 z% P  @
  15. 2 G: R: Q: w5 `: i+ s
  16. typedef unsigned short int uint16_t;
    - f' o# W5 \3 ?

  17. 0 U. D# z+ u- O/ l) S0 l. M: f) A. M
  18. typedef unsigned int uint32_t;2 q3 U! |- |' t9 E/ H
  19. 9 _( f  b# G7 W' }7 W: c$ \4 E
  20. typedef unsigned __int64 uint64_t;
    * ^6 @$ k2 J6 z/ {+ T6 ]2 c

  21. - R0 L! s+ c( c, m
  22. , G* u' p0 V2 ]) D4 u7 D
  23. /* minimum values of exact-width signed integer types */
    0 C9 |# [3 u8 D8 \9 j$ g; C" q
  24. 5 y0 w! N5 n% w% u
  25. #define INT8_MIN -128 /* s8 占用1个byte,数据范围 -2^7 到 (2^7-1) */5 B6 A  F9 R5 I: n$ L& U# {) U% S" H

  26. 7 D6 e. ?2 g; ]. L% ^
  27. #define INT16_MIN -32768 /* s16 占用2个byte,数据范围 -2^15 到 (2^15-1) */8 a% h: a; j# L1 x: ]
  28. ! {3 L- a! Q7 C/ n! l# E7 ~7 v8 t
  29. #define INT32_MIN (~0x7fffffff) /* -2147483648 is unsigned s32 占用 4个byte,数据范围 -2^31 到 (2^31-1) */
    + Y- f* }; O$ P& B% w
  30. 5 H' C* H$ M  A( A7 p0 d
  31. #define INT64_MIN __ESCAPE__(~0x7fffffffffffffffll) /* -9223372036854775808 is unsigned int64_t占用8个byte,数据范围 -2^63 到 (2^63-1) */
    7 \3 g* x7 t8 f9 L

  32. 2 ]$ L) T5 X6 B0 Q* \9 x
  33. * V4 u; `5 @5 Z
  34. /* maximum values of exact-width signed integer types */7 |9 z1 T* ^$ O+ S! I' R

  35. & B* j! K; Y7 H: p8 c" d3 E
  36. #define INT8_MAX 1271 @5 K) T- J4 Q& ~' F, a! r9 ]

  37. + H: g+ F. b7 m
  38. #define INT16_MAX 32767
    0 p5 {" j( ~6 T, m& J
  39. * F1 f+ z$ J4 N- N# R
  40. #define INT32_MAX 2147483647
    : ]9 s0 K3 V! s0 ~5 o+ v
  41. ) v! A" J8 Y/ i
  42. #define INT64_MAX __ESCAPE__(9223372036854775807ll)/ d' a( a" [6 z. y. h3 u* ]; F  @) m7 Q
  43.   F9 O- n2 E+ b

  44. / P0 t4 z6 n$ s$ @3 S6 v" v
  45. /* maximum values of exact-width unsigned integer types */2 Y  ~! b% L. M  C1 T
  46. 4 ?( j. t: I& i) F: [2 r* y* s
  47. #define UINT8_MAX 255 /* u8 占用1个byte, 数据范围 0 - 2^8*/6 @! N1 G! q/ D& j
  48. , @* y5 N& y& A1 U1 K1 H
  49. #define UINT16_MAX 65535 /* u16 占用2个byte, 数据范围 0 - 2^16*/4 _7 S. @  ~) Y5 s$ B
  50. 8 i3 l8 o: W- g
  51. #define UINT32_MAX 4294967295u /* u32 占用4个byte, 数据范围 0 - 2^32*/* A5 w3 a( a3 O
  52. * J3 p8 I/ c/ i8 p+ j5 _
  53. #define UINT64_MAX __ESCAPE__(18446744073709551615ull)
复制代码

# O# ]0 e4 {/ o3 Y- m

4 N1 U/ ]; G& O8 A* P

由上述可知:

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+ S6 `, I' X5 F! y, S8 i
* g  M: m% }: y$ \, m# M
0 n! ?+ S2 }/ T8 ?0 P* Q7 |

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. }- ^# z, F) i) F9 @
4 z& [; d/ N! H7 j2 c

" j% E8 c' i+ j! u" Q

3、浮点型

  •     float ——4个byte,有符号型,可以表达负数/小数; Float 类型至少要能精确表示到小数点后6位。
  •    double——8个byte,有符号型,可以表达负数/小数;Double 类型至少要能精确到小数点后 10 位。  V; [2 _2 r9 e. r# K% X

' W5 Y" e6 t/ H+ A0 S, ^1 G

" W% `* S$ W5 e, Y转载自:路途…
$ Z8 _/ }7 j) X. Y5 J$ ~5 ]! l如有侵权请联系删除
! v& y8 s6 G- |0 Y7 v. |
4 U& ^! U4 z* g' m, x

# {4 _8 Q; I4 }7 }' w
. L  n8 @. H6 d' p: e
收藏 评论0 发布时间:2023-5-14 15:34

举报

0个回答

所属标签

相似技术帖

官网相关资源

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