历史上的今天
今天是:2025年05月06日(星期二)
2018年05月06日 | 关于STM32的变量定义
2018-05-06 来源:eefocus
今天调试程序时,想观察一下变量的情况,突然发现平时经常移植别人程序时最容易忽略的一个致命问题,那就是忽略变量类型,这里有必要给大家一定知识啦,都是库里面的,非原创!
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中找到具体的定义,此部分定义如下。
1 /*!< 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 */
CMSIS IO类型限定词
IO类限定词 | #define | 描述 |
_I | volatile const | 只读访问 |
_O | volatile | 只写访问 |
_IO | volatile | 读和写访问 |
固件库与CMSIS数据类型对比
固件库类型 | CMSIS类型 | 描述 |
s32 | int32_t | 易挥发只读有符号32位数据 |
s16 | int16_t | 易挥发只读有符号16位数据 |
s8 | int8_t | 易挥发只读有符号8位数据 |
sc32 | const int32_t | 只读有符号32位数据 |
sc16 | const int16_t | 只读有符号16位数据 |
sc8 | const 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位数据 |
u32 | uint32_t | 无符号32位数据 |
u16 | uint16_t | 无符号16位数据 |
u8 | uint8_t | 无符号8位数据 |
uc32 | const uint32_t | 只读无符号32位数据 |
uc16 | const uint16_t | 只读无符号16位数据 |
uc8 | const 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位数据 |
stm32f10x.h文件中还包含了常用的布尔形变量定义,如:
1 typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;
2
3 typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
4
5 #define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
6
7 typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;
不同版本的标准外设库的变量定义略有不同,如3.4版本中就没有之前版本的TRUE和FALSE的定义,用户也可以根据自己的需求按照上面的格式定义自己的布尔形变量。在使用标准外设库进行开发遇到相关的定义问题时应首先找到对应的头文件定义。
史海拾趣
|
这个帖子主要和大家介绍一些我们在FPGA硬件系统设计过程中遇到的问题和解决的方法。也欢迎大家一起参与讨论。主要涉及以下几个方面: 1。芯片的选型 包括FPGA芯片的选型原则,外围芯片,比如存储器,电源,接口芯片等等选择的依据。我们会给大 ...… 查看全部问答> |
|
现在,国内似乎在进行一个全民学习嵌入式的运动,但据了解,很多人在整个学习的过程中,由于某些技术领域的空白或者是技术尚未成熟,再加上个人学习方法不正确,给个人的学习造成了极大的阻碍,遇到这种情况该如何解决? 根据本人有限的学习经验,给学习嵌 ...… 查看全部问答> |
|
我的应用EVC开发下,dialog为主窗口,窗口中放了个Listctrl(class CMylistCtrl : public CListCtrl) 我在模拟器下跑的时候,通过PC的键盘中的上、下键可以操作item,我写这个应用的时候都是在模拟器上操作的 我的问题是:怎么把模拟器上实现了 ...… 查看全部问答> |
|
短信猫在低压配电监控应用 随着电网改造的逐步深入,电力配网技术的高速发展,科学、经济、有效的控制电网运行,必须逐步实现、提高配网自动化水平。城市配电网自动化系统是电力部门改善供电质量,合理配置供电设备,有效实现电力需求侧管理的重要 ...… 查看全部问答> |
|
刚拿到个MC50,要开发Scanner ,我该如何入手?我是做JAVA的 ,J9安装了,SMDK v1.4 for Java我下载了,但不知道怎么入手 … 查看全部问答> |
|
replyreload += \',\' + 1077953;手把手教你学单片机教程下载地址, http://www.verycd.com/topics/2867187/ 优酷在线观看地址: Timson,如果您要查看本帖隐藏内 ...… 查看全部问答> |
|
【MSP430共享】基于组态方式的自动化监控系统在线配置设计 介绍目前整个远程自动化监控系统发展状况的同时, 简单介绍了动力环境远程监控系统的结构, 并对如何在自动化监控系统中实现在线配置的原理进行了论述。在此基础上, 具体描述了如何通过面向对象设计的灵活性和节点链接关系的修改来解决上述问题。& ...… 查看全部问答> |




