这里写目录标题
- [0、输入 输出](#0、输入 输出)
- 1、输出
-
- [(1)GPIO_SetBits:用于设置 GPIO 引脚的状态(即将指定的引脚设置为高电平)](#(1)GPIO_SetBits:用于设置 GPIO 引脚的状态(即将指定的引脚设置为高电平))
- 2、输入
0、输入 输出
咋们定义了一个结构体分别给引脚,速度,模式复制
c
typedef struct
{
uint16_t GPIO_Pin; //指定要配置的 GPIO 引脚。
GPIOSpeed_TypeDef GPIO_Speed; // 指定选定引脚的速度。
GPIOMode_TypeDef GPIO_Mode; //指定选定引脚的操作模式。
} GPIO_InitTypeDef;
结构体到底是什么呢?
什么是结构体?
结构体是一种用于组织和存储数据的方式。你可以把它想象成一个容器,里面装有各种不同类型的数据。这些数据被称为"成员",它们可以是不同的数据类型,比如整数、浮点数、字符等。
类比:学生档案
想象一下,我们要为一名学生创建一个档案。这个档案包含学生的姓名、年龄、成绩等信息。用结构体来表示这个学生档案非常合适,因为结构体可以把这些不同类型的数据放在一起。让我们来创建一个学生档案的结构体。
用代码表示
在C语言或类似语言中,你可以这样定义一个学生结构体:
c
复制代码
struct Student {
char name[50]; // 姓名
int age; // 年龄
float grade; // 成绩
};
c
typedef enum
{
GPIO_Mode_AIN = 0x0, // 模拟输入模式
GPIO_Mode_IN_FLOATING = 0x04, // 浮空输入模式
GPIO_Mode_IPD = 0x28, // 下拉输入模式
GPIO_Mode_IPU = 0x48, // 上拉输入模式
GPIO_Mode_Out_OD = 0x14, // 开漏输出模式
GPIO_Mode_Out_PP = 0x10, // 推挽输出模式
GPIO_Mode_AF_OD = 0x1C, // 复用开漏输出模式
GPIO_Mode_AF_PP = 0x18 // 复用推挽输出模式
} GPIOMode_TypeDef;
struct、typedef、enum都是什么关键词?
struct: 创建一个结构体,把不同类型的数据放在一起
typedef:取一个别名,给类型起个简单的名字
enum:枚举,给一组相关的常量起名字
1、输出
(1)GPIO_SetBits:用于设置 GPIO 引脚的状态(即将指定的引脚设置为高电平)
GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
GPIOx: (A...G) 用于选择 GPIO 外设端口
GPIO_Pin: 指定要写入的端口位
例如
c
GPIO_SetBits(GPIOA, GPIO_Pin_1);
c
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN(GPIO_Pin));
GPIOx->BSRR = GPIO_Pin;
}
c
typedef struct
{
__IO uint32_t CRL; // GPIO 控制寄存器低位
__IO uint32_t CRH; // GPIO 控制寄存器高位
__IO uint32_t IDR; // GPIO 输入数据寄存器
__IO uint32_t ODR; // GPIO 输出数据寄存器
__IO uint32_t BSRR; // GPIO 位设置/复位寄存器
__IO uint32_t BRR; // GPIO 复位寄存器
__IO uint32_t LCKR; // GPIO 锁定寄存器
} GPIO_TypeDef;
2、输入
(1)GPIO_ReadInputDataBit()
主要作用是读取指定 GPIO 引脚的输入数据位状态,以获取外部设备或传感器所提供的二进制信息,为系统的决策和控制提供关键的输入依据