32G8K64-I2C引脚配置问题
硬件上是这么连接的,没有使用上拉电阻软件上是这么配置的
GPIO_InitStructure.Pin= GPIO_Pin_4|GPIO_Pin_5; //I2C
GPIO_InitStructure.Mode = GPIO_OUT_PP; //
GPIO_Inilize(GPIO_P1,&GPIO_InitStructure); //初始化
/****************I2C初始化函数 *****************/
void I2C_config(void)
{
I2C_InitTypeDef I2C_InitStructure;
I2C_InitStructure.I2C_Mode = I2C_Mode_Master; //主从选择 I2C_Mode_Master, I2C_Mode_Slave
I2C_InitStructure.I2C_Enable = ENABLE; //I2C功能使能, ENABLE, DISABLE
I2C_InitStructure.I2C_MS_WDTA = DISABLE;
I2C_InitStructure.I2C_Speed = 63;
I2C_Init(&I2C_InitStructure);
NVIC_I2C_Init(I2C_Mode_Master,DISABLE,Priority_0); //主从模式, I2C_Mode_Master, I2C_Mode_Slave; 中断使能, I2C_ESTAI/I2C_ERXI/I2C_ETXI/I2C_ESTOI/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
I2C_SW(I2C_P14_P15); //I2C_P14_P15,I2C_P24_P25,I2C_P76_P77,I2C_P33_P32
}
测试函数是这么写的
/*读取F11卡里的数据**/
FM11_CSN_L;
I2C_ReadNbyte(0xAE, temp_U16_count, read_tmp, 4);
FM11_CSN_H;
/**显示读取到的数据**/
PrintString1("AA");//1S进入一次
TX1_write2buff(temp_U16_count>>8);
TX1_write2buff((uint8)temp_U16_count);
for(i=0;i<4;i++)
{
TX1_write2buff(read_tmp); //将受到的数据发出
}
出来的数据却全部是这样的,不知道哪里出了问题,向高手请教一下,十分感谢!
针对您提供的STC32G8K64 I2C引脚配置问题,以下为专业分析与建议:
从硬件连接图来看,I2C通信所使用的GPIOP1.4(SDA)和GPIOP1.5(SCL)未使用上拉电阻。在标准I2C协议中,SDA和SCL线需要外部上拉电阻以确保信号在空闲状态下保持高电平。若未接上拉电阻,可能导致通信不稳定、数据传输错误或无法检测到设备。
从软件配置来看,您将GPIOP1.4和GPIOP1.5配置为推挽输出模式(GPIOOUTPP),并初始化了I2C模块。然而,I2C通信要求SDA和SCL引脚在主设备发送时为输出,在接收时为输入。仅设置为输出模式可能无法满足I2C协议的双向通信需求,特别是在主设备发送地址和数据时,需要能够控制引脚状态,而在接收应答信号时需要读取引脚电平。
建议修改GPIO配置如下:
c
GPIOInitStructurePin = GPIOPin4 | GPIOPin5; // I2C
GPIOInitStructureMode = GPIOALTOPENDRAIN; // 改为开漏输出模式
GPIOInit(GPIOP1, &GPIOInitStructure); // 初始化
同时,建议在PCB设计中添加适当的上拉电阻(通常为4.7kΩ),以确保I2C总线在空闲时维持高电平。
此外,检查I2C初始化参数是否正确,特别是I2CSpeed值是否符合实际时钟频率。若您使用的是内部RC振荡器,请确认其频率是否稳定,并确保I2C时钟分频设置合理。
综上所述,建议对GPIO配置进行调整,并在硬件上添加上拉电阻,以确保I2C通信的稳定性与可靠性。
[本文内容由国芯人工智能辅助生成,仅供参考]
MCU作为I2C主机
我将口这样设置
P1_MODE_IO_PU(GPIO_Pin_4 | GPIO_Pin_5);
但是结果还是一样
我的意思是,一定要将口设置为开漏输出,并且在外面设置上拉电阻吗?
可以
1,开漏+打开内部上拉电阻
2,开漏+外接上拉电阻也可
3,准双向口/弱上拉+打开内部上拉电阻
4,准双向口/弱上拉+外接上拉电阻也可
用上AiCube 图形化程序自动生成:
选同一个系列的 STC32G12K128
AiCube图形化程序自动生成【SPI,SPI-DMA,I2C,I2C-DMA】代码,驱动OLED-12864 - AiCube-ISP , 程序自动生成工具, 支持STC89/15/8H/32/AI8051U 国芯技术交流网站 - AI32位8051交流社区
页:
[1]