zhouqiming 发表于 2025-2-27 23:17:52

I2C初始化影响GPIO?

<p>下面这段代码,我只要注释掉I2C_Config(),LED灯就可以正常闪烁,一旦去掉注释,LED灯就是常亮,为啥啊?</p>
<p>#include &quot;Config.h&quot;<br />
#include &quot;Type_def.h&quot;<br />
#include &quot;STC8G_H_GPIO.h&quot;<br />
#include &quot;STC8G_H_delay.h&quot;<br />
#include &quot;STC8G_H_I2C.h&quot;<br />
#include &quot;STC8G_H_Switch.h&quot;</p>
<p>void GPIO_Config()<br />
{<br />
P1_MODE_OUT_PP(GPIO_Pin_0);<br />
P3_MODE_IO_PU(GPIO_Pin_2);<br />
P3_MODE_IO_PU(GPIO_Pin_3);<br />
}</p>
<p>void I2C_Config()<br />
{<br />
I2C_InitTypeDef I2C_InitStructure;<br />
I2C_InitStructure.I2C_Speed = 58;<br />
I2C_InitStructure.I2C_Enable = ENABLE;<br />
I2C_InitStructure.I2C_Mode = I2C_Mode_Slave;<br />
I2C_InitStructure.I2C_MS_WDTA = ENABLE;<br />
I2C_InitStructure.I2C_SL_ADR = 0x78;<br />
I2C_InitStructure.I2C_SL_MA = ENABLE;</p>
<p>I2C_Init(&amp;I2C_InitStructure);</p>
<p>I2C_SW(I2C_P33_P32);</p>
<p>}<br />
void main()<br />
{<br />
GPIO_Config();<br />
// I2C_Config();<br />
while(1)<br />
{<br />
P10 = 0;<br />
delay_ms(1000);<br />
P10 = 1;<br />
delay_ms(1000);</p>
<p>}</p>
<p>}</p>

DebugLab 发表于 2025-2-28 06:50:10

是不是开了中断没有中断函数
打开的中断必须要有中断函数

zhouqiming 发表于 2025-2-28 10:18:43

DebugLab 发表于 2025-2-28 06:50
是不是开了中断没有中断函数
打开的中断必须要有中断函数

感谢回复。
我没有使用中断啊,所有的代码就是这些了。

我刚刚尝试了,如果把GPIO_Config()放到I2C_Config()前面,LED常亮。如果把GPIO_Config()放到I2C_Config()后面,则LED不亮。如果注释掉GPIO_Config(),则LED也不亮。当然,如果注释掉I2C_Config(),则LED按预期闪烁。

我问了AI,也没说出个啥有用的东西。

zhouqiming 发表于 2025-2-28 10:35:47

AI帮我改了一下代码,好像是可以了,我又自己测试了一下其他情况。有没有大佬帮忙解释一下原因啊?

void main()
{
    // 配置GPIO
    GPIO_Config();
   
    // 确认GPIO配置是否生效,没有下面这4行代码,LED不会闪烁,或者不亮(只有前2行)或者常亮(只有后2行)。
    P10 = 0;
    delay_ms(1000);
    P10 = 1;
    delay_ms(1000);

    // 配置I2C
    I2C_Config();

    while(1)
    {
      P10 = 0;
      delay_ms(1000);
      P10 = 1;
      delay_ms(1000);
    }
}
页: [1]
查看完整版本: I2C初始化影响GPIO?