I2C初始化影响GPIO?
<p>下面这段代码,我只要注释掉I2C_Config(),LED灯就可以正常闪烁,一旦去掉注释,LED灯就是常亮,为啥啊?</p><p>#include "Config.h"<br />
#include "Type_def.h"<br />
#include "STC8G_H_GPIO.h"<br />
#include "STC8G_H_delay.h"<br />
#include "STC8G_H_I2C.h"<br />
#include "STC8G_H_Switch.h"</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(&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
是不是开了中断没有中断函数
打开的中断必须要有中断函数
感谢回复。
我没有使用中断啊,所有的代码就是这些了。
我刚刚尝试了,如果把GPIO_Config()放到I2C_Config()前面,LED常亮。如果把GPIO_Config()放到I2C_Config()后面,则LED不亮。如果注释掉GPIO_Config(),则LED也不亮。当然,如果注释掉I2C_Config(),则LED按预期闪烁。
我问了AI,也没说出个啥有用的东西。
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]