你好,STM32有问题。在我为eeprom编写的库中,我想使用结构中的引脚和端口,然后在HAL_GPIO_Write_Pin函数中使用它们,但我无法成功。错误:"HAL_GPIO_WritePin"Eeprom的参数2的类型不兼容。
(很抱歉,如果我没有正确提问,这是我第一次使用它。(
EEPROM.h
typedef struct
{
SPI_HandleTypeDef* SPI_EEPROM ;
uint16_t CS_PIN ;
GPIO_TypeDef* CS_PORT ;
uint32_t Write_Protect ;
GPIO_PinState CS_LOW ;
GPIO_PinState CS_HIGH ;
}EEPROM;
/*****************************************************************/
EEPROM.c
SPI_HandleTypeDef* hspi1 ;
EEPROM EEPROM_1 ;
void Eeprom_Init( )
{
EEPROM_1.SPI_EEPROM = hspi1 ;
EEPROM_1.Write_Protect = EEPROM_WRITE ;
EEPROM_1.CS_PIN = SPI2_SS_Pin ;
EEPROM_1.CS_PORT = SPI2_SS_GPIO_Port ;
EEPROM_1.CS_LOW = GPIO_PIN_RESET ;
EEPROM_1.CS_HIGH = GPIO_PIN_SET ;
}
void EEPROM_1_CS_HIGH (EEPROM CS_PORT, EEPROM CS_PIN, EEPROM CS_HIGH)
{
HAL_GPIO_WritePin( &CS_PORT, CS_PIN, CS_HIGH ) ;
}
void EEPROM_1_CS_LOW (EEPROM CS_PORT, EEPROM CS_PIN, EEPROM CS_LOW)
{
HAL_GPIO_WritePin( &CS_PORT, CS_PIN, CS_LOW ) ;
}
在行中:
void EEPROM_1_CS_HIGH (EEPROM CS_PORT, EEPROM CS_PIN, EEPROM CS_HIGH)
您说函数EEPROM_1_CS_HIGH
有三个参数,它们都是一个完整的结构,通过值传递。
您可能只想有一个参数,即结构,然后在函数中访问其成员。此外,您应该使用指针*
通过引用传递结构。
void EEPROM_CS_HIGH (EEPROM *memory)
{
HAL_GPIO_WritePin(memory->CS_PORT, memory->CS_PIN, memory->CS_HIGH);
}
如果你想要一个访问特定实例的全局数据的函数,你可以这样做:
void EEPROM_1_CS_HIGH (void)
{
EEPROM_CS_HIGH(&EEPROM_1);
}