stm32中的数据类型定义

发布者:caoxians4589最新更新时间:2016-12-16 来源: eefocus关键字:stm32  数据类型定义 手机看文章 扫描二维码
随时随地手机看文章

STM32F10X.H



 1 #include "core_cm3.h"

 2 #include "system_stm32f10x.h"

 3 #include

 4 

 5 /** @addtogroup Exported_types

 6   * @{

 7   */  

 8 

 9 /*!< STM32F10x Standard Peripheral Library old types (maintained for legacy purpose) */

10 typedef int32_t  s32;

11 typedef int16_t s16;

12 typedef int8_t  s8;

13 

14 typedef const int32_t sc32;  /*!< Read Only */

15 typedef const int16_t sc16;  /*!< Read Only */

16 typedef const int8_t sc8;   /*!< Read Only */

17 

18 typedef __IO int32_t  vs32;

19 typedef __IO int16_t  vs16;

20 typedef __IO int8_t   vs8;

21 

22 typedef __I int32_t vsc32;  /*!< Read Only */

23 typedef __I int16_t vsc16;  /*!< Read Only */

24 typedef __I int8_t vsc8;   /*!< Read Only */

25 

26 typedef uint32_t  u32;

27 typedef uint16_t u16;

28 typedef uint8_t  u8;

29 

30 typedef const uint32_t uc32;  /*!< Read Only */

31 typedef const uint16_t uc16;  /*!< Read Only */

32 typedef const uint8_t uc8;   /*!< Read Only */

33 

34 typedef __IO uint32_t  vu32;

35 typedef __IO uint16_t vu16;

36 typedef __IO uint8_t  vu8;

37 

38 typedef __I uint32_t vuc32;  /*!< Read Only */

39 typedef __I uint16_t vuc16;  /*!< Read Only */

40 typedef __I uint8_t vuc8;   /*!< Read Only */

41 

42 typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;

43 

44 typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;

45 #define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))

46 

47 typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;


源定义在#include


 1 /*

 2  * 'signed' is redundant below, except for 'signed char' and if

 3  * the typedef is used to declare a bitfield.

 4  */

 5 

 6     /* 7.18.1.1 */

 7 

 8     /* exact-width signed integer types */

 9 typedef   signed          char int8_t;

10 typedef   signed short     int int16_t;

11 typedef   signed           int int32_t;

12 typedef   signed       __INT64 int64_t;

13 

14     /* exact-width unsigned integer types */

15 typedef unsigned          char uint8_t;

16 typedef unsigned short     int uint16_t;

17 typedef unsigned           int uint32_t;

18 typedef unsigned       __INT64 uint64_t;

19 

20     /* 7.18.1.2 */

21 

22     /* smallest type of at least n bits */

23     /* minimum-width signed integer types */

24 typedef   signed          char int_least8_t;

25 typedef   signed short     int int_least16_t;

26 typedef   signed           int int_least32_t;

27 typedef   signed       __INT64 int_least64_t;

28 

29     /* minimum-width unsigned integer types */

30 typedef unsigned          char uint_least8_t;

31 typedef unsigned short     int uint_least16_t;

32 typedef unsigned           int uint_least32_t;

33 typedef unsigned       __INT64 uint_least64_t;

34 

35     /* 7.18.1.3 */

36 

37     /* fastest minimum-width signed integer types */

38 typedef   signed           int int_fast8_t;

39 typedef   signed           int int_fast16_t;

40 typedef   signed           int int_fast32_t;

41 typedef   signed       __INT64 int_fast64_t;

42 

43     /* fastest minimum-width unsigned integer types */

44 typedef unsigned           int uint_fast8_t;

45 typedef unsigned           int uint_fast16_t;

46 typedef unsigned           int uint_fast32_t;

47 typedef unsigned       __INT64 uint_fast64_t;

48 

49     /* 7.18.1.4 integer types capable of holding object pointers */

50 #if __sizeof_ptr == 8

51 typedef   signed       __INT64 intptr_t;

52 typedef unsigned       __INT64 uintptr_t;

53 #else

54 typedef   signed           int intptr_t;

55 typedef unsigned           int uintptr_t;

56 #endif

57 

58     /* 7.18.1.5 greatest-width integer types */

59 typedef   signed     __LONGLONG intmax_t;

60 typedef unsigned     __LONGLONG uintmax_t;


由上述可知:


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

 

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

3、浮点型

 

  •     float ——4个byte,有符号型,可以表达负数/小数; Float 类型至少要能精确表示到小数点后6位。

  •    double——8个byte,有符号型,可以表达负数/小数;Double 类型至少要能精确到小数点后 10 位。

 

二、不同数据类型混合运算

在C语言中,不同类型的数据间是可以混合运算的。在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规则如下:

注意:箭头的方向只表示数据类型级别的高低,由低向高转换,这个转换过程是一步到位的。

(三)数据类型转换规则

各类数据类型的转换,分为两种方式:隐式(编译软件自动完成),显式(程序强制转换)

隐式转换规则:

字符必须先转换为整数(C语言规定字符类型数据和整型数据之间可以通用) 
   short型转换为int型(同属于整型) 
   float型数据在运算时一律转换为双精度(double)型,以提高运算精度(同属于实型) 
   赋值时,一律是右部值转换为左部类型 
[注] 
     当整型数据和双精度数据进行运算时,C先将整型数据转换成双精度型数据,再进行运算,结果为双精度类型数据 
     当字符型数据和实型数据进行运算时,C先将字符型数据转换成实型数据,然后进行计算,结果为实型数据

显式转换规则:

例:(int)(x+y);

注:强制类型转换时,得到一个所需要的中间变量,原来变量的类型未发生变化。


关键字:stm32  数据类型定义 引用地址:stm32中的数据类型定义

上一篇:STM32 USB数据接收与数据发送程序流程分析
下一篇:STM32硬件IIC

推荐阅读最新更新时间:2024-03-16 15:25

STM32 备份寄存器操作
STM32系列为处理器都有备份寄存器,他它们处于备份区域里,当VDD电源被切断,它们仍然由VBAT维持供电,当系统在待机模式下被唤醒,或者系统复位或电源复位是,它们都不会被复位。以实时时钟RTC为例,在上一篇文章中讲过,RTC处理依赖系统电源(VDD供电)外,还依赖者备份电源(VBAT供电),即使系统电源被切断,只要备份电源还在,RTC就能继续工作。备份寄存器也是依赖者备份电源的。STM32都有备份寄存器,但是备份寄存器的数量却不一定相同!对于大容量的微处理器系列来说,它有着42个16位的寄存器,而中小容量的微处理器却只有10个16为的寄存器。我使用的微处理器是STM32F103ZET6,属于大容量系列,所以它他有着42个备份寄存器
[单片机]
<font color='red'>STM32</font> 备份寄存器操作
STM32的八种GPIO工作方式详解
STM32的GPIO介绍 STM32引脚说明 GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 STM32F103ZET6芯片为144脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同时每组GPIO口组有16个GPIO口。通常简略称为PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。 STM32的大部分引脚除了当GPIO使用之外,还可以复用位外设功能引脚(比如串口),这部分在【STM32】STM32端
[单片机]
<font color='red'>STM32</font>的八种GPIO工作方式详解
STM32 V3.4库函数使用建立工程方法
清晰地记得刚从51单片机过度到STM32,那种一头雾水的感觉。使用的STM32开发板是非常不适合初学者使用的开发板,它是硬件看上去华丽的神舟开发板。在这里我不评论神舟开发板如何如何,如果你是初学者,建议你不要使用神舟开发板。 拿到神舟开发板的教程,坑爹啊,如何使用STM32库的说明都没有,这对初学者也太不公平了吧。鄙人一个STM32菜鸟在网上花了半天时间才弄明白如何使用这个库,如何建立工程。今天分享我当初是如何使用STM32库文件建立工程的,非常适合初学者。 少废话,上图:
[单片机]
stm32学习之复位和时钟
1、复位 STM32F支持三种复位形式,分别为系统复位、电源复位和备份区域复位。 1.1 系统复位 当以下事件中的一件发生时,产生一个系统复位: 1. NRST管脚上的低电平(外部复位) 2. 窗口看门狗计数终止( WWDG复位) 3. 独立看门狗计数终止( IWDG复位) 4. 软件复位( SW复位)(将Cortex-M3中断应用和复位控制寄存器中的SYSRESETREQ位置1, 可实现软件复位。) 5. 低功耗管理复位 可通过查看RCC_CSR控制状态寄存器中的复位状态标志位来确认复位事件来源。 1.2 电源复位(电源复位将复位除了备份区域外的所有寄存器,地址0x0000_0000~
[单片机]
STM32移植lwip之建立tcp客户端
本篇目标:在之前能ping通pc机的工程基础上搭建tcp客户端,并可以主动发数据给pc机,同时也能与pc机收发数据,并在网络调试工具上显示 材料准备: 基础工程:修改后能ping通pc机的工程(STM32官方移植lwip修改代码) 调试工具:用来调试tcp连接下的数据接收(网络调试助手) 搭建工程:最终搭建好tcp客户端数据接收的工程(tcp客户端建立工程) 搭建TCP客户端 搭建TCP客户端的过程与上一章TCP服务器也相似,所以尽量把重点的地方加粗显示来区别 在搭建TCP客户端之前可以先理一下概念,客户端与服务器的区别: 客户端:主动建立tcp去连接目标IP 服务器:拥有静态IP,能让其他设备被动连接 因此用STM
[单片机]
<font color='red'>STM32</font>移植lwip之建立tcp客户端
Linux之ARM(IMX6U)裸机模仿STM32驱动开发格式
模仿 STM32 驱动开发格式实验 C 语言编写 LED 灯驱动的时候,每个寄存器的地址我们都需要写宏定义,使用起来非常的不方便。我们在学习 STM32 的时候,可以使用“GPIOB- ODR”这种方式来给GPIOB 的寄存器 ODR 赋值,因为在 STM32 中同属于一个外设的所有寄存器地址基本是相邻的(有些会有保留寄存器)。因此我们可以借助 C 语言里面的结构体成员地址递增的特点来将某个外设的所有寄存器写入到一个结构体里面,然后定义一个结构体指针指向这个外设的寄存器基地址,这样我们就可以通过这个结构体指针来访问这个外设的所有寄存器。同理, I.MX6U 也可以使用这种方法来定义外设寄存器,本次我们就模仿 STM32 里面的寄存
[单片机]
Linux之ARM(IMX6U)裸机模仿<font color='red'>STM32</font>驱动开发格式
STM32串口通信USART(二)---DMA方式
刚接触到DMA的时候,一头雾水,只知道方便、快捷,但不知道该怎么使用,后来弄明白原理之后就轻松了很多,但理解的还不是很透,所以希望把自己的理解写出来,和大家分享一下! 形象的说,DMA就像一个快递中转站,负责把数据从始发地搬到目的地,只要他负责的仓库有货,他就开始搬运,没货就等着,除非你把它关了。就像机器人搬东西一样,首先要告诉它从哪搬,搬到哪?东西有多大?需要搬几趟?需要搬运的东西是不是都在一起?搬完后是不是扔在那就行了,还是要放好? 到芯片里,数据就是货物,把数据从一个地方移到另一个地方。你只要告诉它怎么移到就行了,就像控制一个机器人一样。并不是多有的外设都能有机会使用DMA通道,而且,一条通道上被外设使用后,通道上的其他外设
[单片机]
STM32是如何驱动LCD的?
TFTLCD即薄膜晶体管液晶显示器。它与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。 ▲驱动流程01 使用FSMC驱动LCD 关于FSMC,把数据写入相应的地址,FSMC就会把地址从FSMC_A出去,写入的数据会会从FSMC_D发出去。至于片选等信号线都是自动的。读的话,直接读相应的地址,就会拿到改地址上的数据。 FSMC驱动外部SRAM时,外部SRAM的控制一般有: 地址线(如A0~A25) 数据线(如D0~D15) 写信号(WE,即WR) 读信号(OE,即RD) 片选信
[单片机]
<font color='red'>STM32</font>是如何驱动LCD的?
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved