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))

很明显它无法使用枚举包括进去,只好单独用了一个#define 来定义别名。那个\号在这里仅仅只是换行的意思(因为一行写太长不好看),实际就是三种速度的任一种都可以的意思,因为三种速度是一个或的关系。

这个枚举类型在这里起到的作用就是,如果使用它声明了某个变量,比如这里的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。

相关推荐
moxiaoran575342 分钟前
uni-app学习笔记三十--request网络请求传参
笔记·学习·uni-app
嘉陵妹妹1 小时前
深度优先算法学习
学习·算法·深度优先
c7_ln1 小时前
STM32 低功耗设计全攻略:PWR 模块原理 + 睡眠 / 停止 / 待机模式实战(串口 + 红外 + RTC 应用全解析)
stm32·单片机·实时音视频·江协科技
乖乖是干饭王2 小时前
Linux系统编程中的_GNU_SOURCE宏
linux·运维·c语言·学习·gnu
待什么青丝3 小时前
【TMS570LC4357】之相关驱动开发学习记录2
c语言·arm开发·驱动开发·单片机·学习
小柯博客3 小时前
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
c语言·stm32·单片机·嵌入式硬件·物联网
行云流水剑3 小时前
【学习记录】如何使用 Python 提取 PDF 文件中的内容
python·学习·pdf
明月醉窗台4 小时前
qt使用笔记二:main.cpp详解
数据库·笔记·qt
虾球xz4 小时前
CppCon 2015 学习:CLANG/C2 for Windows
开发语言·c++·windows·学习
蓝婷儿4 小时前
6个月Python学习计划 Day 17 - 继承、多态与魔术方法
开发语言·python·学习