STM32 EEPROM库问题:结构体引脚无法适配HAL_GPIO_WritePin函数
问题分析与解决方案
错误原因
报错的核心是函数参数类型不匹配:HAL_GPIO_WritePin的标准签名为:
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
而你的代码中:
EEPROM_1_CS_HIGH/EEPROM_1_CS_LOW函数的参数被错误声明为EEPROM类型,而非结构体成员对应的正确类型(GPIO_TypeDef*、uint16_t、GPIO_PinState)- 调用
HAL_GPIO_WritePin时传递的&CS_PORT是指向EEPROM结构体的指针,并非GPIO_TypeDef*类型,完全不符合函数要求
修正代码
优化后的EEPROM.c关键函数
// 通用化CS引脚控制函数,接收EEPROM结构体指针 void EEPROM_CS_HIGH(EEPROM *eeprom) { HAL_GPIO_WritePin(eeprom->CS_PORT, eeprom->CS_PIN, eeprom->CS_HIGH); } void EEPROM_CS_LOW(EEPROM *eeprom) { HAL_GPIO_WritePin(eeprom->CS_PORT, eeprom->CS_PIN, eeprom->CS_LOW); }
使用方式
在需要控制CS引脚时,直接传递结构体实例的指针:
// 拉低CS引脚 EEPROM_CS_LOW(&EEPROM_1); // 拉高CS引脚 EEPROM_CS_HIGH(&EEPROM_1);
额外优化建议
- 避免函数名绑定特定实例(如原
EEPROM_1_CS_HIGH),改为通用函数适配任意EEPROM结构体 - 确保
hspi1指针已正确指向初始化完成的SPI句柄(通常由CubeMX生成代码初始化)
内容的提问来源于stack exchange,提问作者MG_Embedded_Candidate
相关产品推荐
相关产品推荐

