野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8516|回复: 6

结构体里面的成员为什么与枚举别名不一样?

[复制链接]
发表于 2016-11-3 14:32:22 | 显示全部楼层 |阅读模式
  1. /
  2. typedef enum                                                        //枚举类型
  3. {
  4.         GPIO_Speed_10MHz=1,
  5.         GPIO_Speed_2MHz=1,                        //需要注意的是这里每行后面是逗号 且最后一行后面没有符号
  6.         GPIO_Speed_50MHz=1                       
  7. }GPIOSpeed_TypeDef;

  8. typedef enum
  9. {
  10.         GPIO_Mode_AIN = 0x0,           // 模拟输入     (0000 0000)b
  11.   GPIO_Mode_IN_FLOATING = 0x04,  // 浮空输入     (0000 0100)b
  12.   GPIO_Mode_IPD = 0x28,          // 下拉输入     (0010 1000)b
  13.   GPIO_Mode_IPU = 0x48,          // 上拉输入     (0100 1000)b
  14.   
  15.   GPIO_Mode_Out_OD = 0x14,       // 开漏输出     (0001 0100)b
  16.   GPIO_Mode_Out_PP = 0x10,       // 推挽输出     (0001 0000)b
  17.   GPIO_Mode_AF_OD = 0x1C,        // 复用开漏输出 (0001 1100)b
  18.   GPIO_Mode_AF_PP = 0x18         // 复用推挽输出 (0001 1000)b
  19. }GPIOMode_TypeDef;

  20. typedef struct                                                                       
  21. {
  22.                 uint16_t GPIO_Pin;
  23.           uint16_t GPIO_Speed;                               
  24.           uint16_t GPIO_Mode;
  25. }GPIO_InitTypeDef;
复制代码

回复

使用道具 举报

发表于 2016-11-3 14:39:19 | 显示全部楼层
你想问的是结构体成员的类型为什么不是枚举类型吧,那你改成枚举类型不就得了嘛

用了枚举类型就限定了成员的取值范围,用uint16_t 的取值范围就变成了 0~65535,实际上取值并没有那么多,但是用 uint16_t 这样的类型也没有错,为了好看,你换成枚举类型就可以。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-3 15:06:45 | 显示全部楼层
本帖最后由 Early 于 2016-11-3 15:43 编辑
fire 发表于 2016-11-3 14:39
你想问的是结构体成员的类型为什么不是枚举类型吧,那你改成枚举类型不就得了嘛

用了枚举类型就限定了成 ...

这是stm32官方的库文件

这是stm32官方的库文件
O5C[7@L2$D63{J`U6F{`4KV.png 左边时stm32官方的库,右边是火哥写的库
回复 支持 反对

使用道具 举报

发表于 2016-11-3 16:06:51 | 显示全部楼层
Early 发表于 2016-11-3 15:06
左边时stm32官方的库,右边是火哥写的库

你换成官方的就可以了,如果按照我这样写也是没有错的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-3 16:44:37 | 显示全部楼层
fire 发表于 2016-11-3 16:06
你换成官方的就可以了,如果按照我这样写也是没有错的。

我国语不太好,见谅。
我想问:火哥结构体成员名是GPIO_Speed.而枚举别名是GPIOMode_TypeDef,这两个名字都不一样,那么这个枚举数据类型可以用来限制结构体成员的取值范围吗?
回复 支持 反对

使用道具 举报

发表于 2016-11-3 16:52:57 | 显示全部楼层
Early 发表于 2016-11-3 16:44
我国语不太好,见谅。
我想问:火哥结构体成员名是GPIO_Speed.而枚举别名是GPIOMode_TypeDef,这两个 ...

可以。我换个说法估计你就知道了。

int   temp; 这里面的int就是类型,相当于GPIOMode_TypeDef,temp就相当于 GPIO_Mode。

temp既然是 int 类型的,那么他的数据的取值范围就在int的规定内,同理,GPIO_Mode的类型是 GPIOMode_TypeDef,那么它的取值就应该在GPIOMode_TypeDef规定的范围内,那这个范围是多大呢?由enum里面的值限定。
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-11-3 17:47:48 | 显示全部楼层
fire 发表于 2016-11-3 16:52
可以。我换个说法估计你就知道了。

int   temp; 这里面的int就是类型,相当于GPIOMode_TypeDef,temp ...

,好像是这样的,谢火哥了
火哥,你是男还是女,大爱啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-6-17 04:30 , Processed in 0.072304 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表