This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

PCA9555: 无法真正输出电平值

Part Number: PCA9555

你好!

      1.  在写入PCA9555过程中,先进行了管脚输出设置,如下所示:

//P00~P05设置为输出,P10设置为输出
void Initialization_PCA9555(void)
{
unsigned char DevAddress,MemAddress;
unsigned char write_data[2];

DevAddress = 0x40; //0100 A2 A1 A0 0

//写入Configuration Registers
MemAddress = 0x06;
write_data[0] = 0xFF; //1100 0000 1为输入默认状态,0位输出
write_data[1] = 0xFF; //1111 1110

HAL_I2C_Mem_Write(&hi2c1,DevAddress,MemAddress,I2C_MEMADD_SIZE_8BIT,write_data,2,1000);
}

2. 然后我想改变管脚的输出电平,但是管脚电平并未真正改变,所有的管脚还是输出3.3V即VCC。

HAL_StatusTypeDef Slot1_8( unsigned char slot )
{
unsigned char DevAddress,MemAddress;
unsigned char write_data;

//先读一遍Output Port Register的值
DevAddress = 0x40; //0100 A2 A1 A0 0
MemAddress = 0x02; //0x02:Output Port 0;

write_data[0] =0x02;

return( HAL_I2C_Mem_Write(&hi2c1,DevAddress,MemAddress,I2C_MEMADD_SIZE_8BIT,&write_data,1,1000) );
}

3. 此时我再读Port 0 ,却可以读到0x02,说明上一步通讯成功,并成功写入,所以想请问下,要想改变管脚输出0/1,是否步骤错了?

uint8_t Output_PCA9555( unsigned char output_port )
{
unsigned char DevAddress,MemAddress;
unsigned char read_data;

//先读一遍Output Port Register的值
DevAddress = 0x41; //0100 A2 A1 A0 0

MemAddress = 0x02; //0x02:Output Port 0; 0x03:Output Port 1

HAL_I2C_Mem_Read(&hi2c1,DevAddress,MemAddress,I2C_MEMADD_SIZE_8BIT,&read_data,1,1000);

return read_data;
}