关于结构体、define和enum;/ 和 \的区别

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

关于结构体、数组和enum;/ 和 \的区别


1.例子

typedef struct 
{   rcu_periph_enum rcu;
	uint32_t gpio;
	uint32_t pin;
}KEY_gpio_str;


//未初始化是,括号类数字必须带上
static KEY_gpio_str g_key_gpio_list[]=
{
	{RCU_GPIOA,GPIOA,GPIO_PIN_0},//key1
	{RCU_GPIOG,GPIOG,GPIO_PIN_13},//key2
	{RCU_GPIOG,GPIOG,GPIO_PIN_14}, //key3 
	{RCU_GPIOG,GPIOG,GPIO_PIN_15}, //key4
	 //结构体列表中结构体必须在{}内
	//当{写成(时,会报错:waring:expression result unused
}; 

//#define  不是define  define 后面无;
//   /才是除  \是反斜杠  怎么理解  前数在上/后数在下为除  否则为反斜杠
#define KEY_NUM_MAX (sizeof(g_key_gpio_list)/sizeof(g_key_gpio_list[0]))

typedef enum
{
	KEY_RELEASE = 0, // 释放松开
	KEY_CONFIRM,     // 消抖确认
	KEY_SHORTPRESS,  // 短按
	KEY_LONGPRESS    // 长按
}KEY_STATE;

在这里插入图片描述

总结:

1.define 无;有#
2.struct 内部元素以;分开 ,数组 和 enum以 ,分开。
而且结束时都会有;
3.区分 / \ 前除 后反斜杠 ?和除一致 |\未反斜杠

<think>好的,我现在需要解释GPIO_Pad_sourcesGPIO_Pad这两个定义之间的区别。首先,我得回忆一下GPIO相关的知识,尤其是在微控制器或嵌入式系统中的GPIO配置。 GPIO,也就是通用输入输出端口,是微控制器与外部设备连接的接口。每个GPIO引脚通常有多种配置选项,比如上下拉电阻、驱动强度、复用功能等。在代码中,可能会有不同的结构体或枚举来管理这些配置。 用户提到的两个定义:GPIO_Pad_sourcesGPIO_Pad。根据命名习惯,可能前者涉及GPIO引脚的具体信号源或复用功能,而后者可能指引脚本身的电气特性配置。 首先,GPIO_Pad_sources可能是指该GPIO引脚可以连接到的内部外设信号源。例如,某个引脚可能可以被配置为UART的TX,SPI的SCK,或者定时器的PWM输出等。这种情况下,Pad_sources可能是一个枚举或结构,列出所有可用的信号源选项,供配置时选择。 而GPIO_Pad可能指的是引脚本身的电气属性配置,比如上下拉电阻使能、驱动电流强度、施密特触发器使能、开漏模式等。这些配置影响引脚的电气行为,如输入时的稳定性,输出时的驱动能力等。 例如,在代码中,GPIO_Pad可能是一个结构体,包含以下字段: - 上拉/下拉使能 - 驱动强度(如2mA, 4mA, 8mA) - 开漏配置 - 输入输出模式 而GPIO_Pad_sources可能是一个枚举类型,列出所有可选的信号源,如: - GPIO_Mode_IN(普通输入) - GPIO_Mode_OUT(普通输出) - GPIO_Mode_UART_TX - GPIO_Mode_SPI_MOSI - 等等。 因此,区别在于GPIO_Pad处理的是引脚本身的电气特性,而GPIO_Pad_sources处理的是信号源或复用功能的选择。用户需要分别配置这两部分,以确保引脚既正确连接到所需的外设,又具备适合的电气特性。 不过,也有可能不同的厂商或框架有不同的命名习惯,可能需要具体查看相关文档或代码。但根据常见的命名方式,这样的区分是合理的。&lt;/think>在嵌入式系统开发中,`GPIO_Pad_sources` `GPIO_Pad` 通常是针对 GPIO 引脚配置的不同层面的定义,具体区别如下: --- ### **1. GPIO_Pad(引脚电气属性配置)** - **核心作用**:定义 GPIO 引脚的 **电气特性**,控制引脚的物理行为。 - **典型配置项**: - **上下拉电阻**:是否启用上拉(Pull-Up)或下拉(Pull-Down)。 - **驱动强度**:输出电流能力(如 2mA、4mA、8mA)。 - **施密特触发器**:输入信号的噪声滤波。 - **开漏模式**:输出是否为开漏(Open-Drain)模式。 - **输入/输出方向**:配置为输入(Input)或输出(Output)。 - **示例代码**(伪代码): ```c typedef struct { uint8_t pull; // 上下拉配置 uint8_t drive; // 驱动强度 bool open_drain; // 是否开漏 } GPIO_Pad; ``` --- ### **2. GPIO_Pad_sources(信号源/复用功能配置)** - **核心作用**:定义 GPIO 引脚的 **信号来源** 或 **复用功能**,决定引脚连接到的内部外设。 - **典型配置项**: - **复用功能选择**:如 UART、SPI、I2C 等外设的特定信号线。 - **模拟/数字模式**:配置为模拟输入(ADC)或数字功能。 - **中断触发源**:选择引脚中断的触发方式(上升沿、下降沿等)。 - **示例代码**(伪代码): ```c typedef enum { GPIO_SOURCE_GPIO, // 普通 GPIO 模式 GPIO_SOURCE_UART_TX, // 复用为 UART 发送引脚 GPIO_SOURCE_SPI_SCK, // 复用为 SPI 时钟引脚 GPIO_SOURCE_ADC_IN, // 复用为 ADC 输入通道 } GPIO_Pad_sources; ``` --- ### **关键区别总结** | **特性** | **GPIO_Pad** | **GPIO_Pad_sources** | |-------------------|-----------------------------|--------------------------------| | **配置目标** | 引脚的电气行为 | 引脚的功能信号来源 | | **典型操作** | 上下拉、驱动强度、开漏模式 | 复用功能选择、模拟/数字模式 | | **硬件层级** | 物理层(电气特性) | 逻辑层(功能映射) | --- ### **实际应用场景** 1. **配置 GPIO_Pad**: 当需要确保引脚在物理上稳定工作时(如驱动 LED 时选择高驱动强度,或读取按键时启用上拉电阻)。 2. **配置 GPIO_Pad_sources**: 当需要将引脚连接到特定外设时(如将某个引脚配置为 PWM 输出或 I2C 的 SDA 线)。 --- ### **补充说明** - 不同芯片厂商的 SDK 中命名可能略有差异(如 STM32 用 `GPIO_InitTypeDef` `GPIO_AF_TypeDef`),但核心思想一致。 - 实际开发中需结合芯片手册,明确电气属性复用功能的寄存器配置方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值