STM32学习和实践笔记(4):分析和理解GPIO_InitTypeDef GPIO_InitStructure (c)

第二个成员变量是GPIOSpeed_TypeDef GPIO_Speed;也与int a一样同理。

GPIOSpeed_TypeDef是一个枚举类型,其定义如下:

typedef enum

  GPIO_Speed_10MHz = 1,
  GPIO_Speed_2MHz, 
  GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Speed_10MHz) || ((SPEED) == GPIO_Speed_2MHz) || \
                              ((SPEED) == GPIO_Speed_50MHz))

网上查找枚举类型的作用,可以知道这个枚举类型在这里起到的作用就相当于:

# define GPIO_Speed_10MHz  1;

# define GPIO_Speed_2MHz  2;

# define GPIO_Speed_50MHz  3;

而typedef enum
{ }GPIOSpeed_TypeDef;与前面结构体类型的声明方式的定义一样,就是这样做了之后,可以直接使用GPIOSpeed_TypeDef作为这个类型的变量声明

最后的一行的:#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Speed_10MHz) || ((SPEED) == GPIO_Speed_2MHz) || \
                              ((SPEED) == GPIO_Speed_50MHz))

这一行的作用,是为了后面使用assert_param检查传入参数的有效性而写的!详见《STM32学习和实践笔记(4): 分析和理解GPIO_InitTypeDef GPIO_InitStructure (e)》

那个\号在这里仅仅只是换行的意思(因为一行写太长不好看),实际就是三种速度的任一种都可以的意思,因为三种速度是一个或的关系。

这个枚举类型在这里起到的作用就是,如果使用它声明了某个变量,比如这里的GPIO_Speed变量,那么的它的取值只能在这个枚举类型里面已经写好的这3种,才是合法的。

另外,这GPIO_Speed_10MHz define GPIO_Speed_2MHz define GPIO_Speed_50MHz 三种都是常量的名字!这些常量的值,分别是1,2,3.

为什么分别写1,2,3就能决定对应IO脚的速度?

这是由对应寄存器的对应位的含义所确定的。如下:

比如,如果我需要让GPIOC的PC0脚的输出速度是50M,我就要对该寄存器的bit 1和bit0 写入数值3,也就是11b。

最近更新

  1. TCP协议是安全的吗?

    2024-04-08 21:50:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-08 21:50:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-08 21:50:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-08 21:50:02       20 阅读

热门阅读

  1. Windows10去除电脑桌面上的图标快捷方式

    2024-04-08 21:50:02       11 阅读
  2. Pytorch实用教程:tensor.size()用法 | .squeeze()方法

    2024-04-08 21:50:02       15 阅读
  3. 缺陷检测在质量控制中的重要作用

    2024-04-08 21:50:02       13 阅读
  4. js知识的练习

    2024-04-08 21:50:02       12 阅读
  5. 蓝桥杯 第 9 场 小白入门赛 字符迁移

    2024-04-08 21:50:02       15 阅读
  6. ✨✨✨HiveSQL

    2024-04-08 21:50:02       12 阅读
  7. mysql绿色版安装

    2024-04-08 21:50:02       25 阅读