关于I2C与GPIO配置冲突的问题
下面这段代码,我只要注释掉I2C_Config(),LED灯就可以正常闪烁,一旦去掉注释,LED灯就是常亮,为啥啊?#include "Config.h"
#include "Type_def.h"
#include "STC8G_H_GPIO.h"
#include "STC8G_H_delay.h"
#include "STC8G_H_I2C.h"
#include "STC8G_H_Switch.h"
void GPIO_Config()
{
P1_MODE_OUT_PP(GPIO_Pin_0);
P3_MODE_IO_PU(GPIO_Pin_2);
P3_MODE_IO_PU(GPIO_Pin_3);
}
void I2C_Config()
{
I2C_InitTypeDef I2C_InitStructure;
I2C_InitStructure.I2C_Speed = 58;
I2C_InitStructure.I2C_Enable = ENABLE;
I2C_InitStructure.I2C_Mode = I2C_Mode_Slave;
I2C_InitStructure.I2C_MS_WDTA = ENABLE;
I2C_InitStructure.I2C_SL_ADR = 0x78;
I2C_InitStructure.I2C_SL_MA = ENABLE;
I2C_Init(&I2C_InitStructure);
I2C_SW(I2C_P33_P32);
}
void main()
{
GPIO_Config();
// I2C_Config();
while(1)
{
P10 = 0;
delay_ms(1000);
P10 = 1;
delay_ms(1000);
}
}
我问了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);
}
} 还有一个问题,这个LED闪烁的频率好像跟我程序里的对不上。
如果我注释掉I2C_Config(),则上述问题就都不存在了。 我找到原因了
delay_ms的函数声明是voiddelay_ms(unsigned char ms),最大不超过255,我用了1000,所以就出错了。
改成voiddelay_ms(unsigned int ms) 就好了 zhouqiming 发表于 2025-2-28 13:16
我找到原因了
delay_ms的函数声明是voiddelay_ms(unsigned char ms),最大不超过255,我用了1000,所以就 ...
不对啊,AI也没动delay函数啊 Lkck8210 发表于 2025-2-28 13:29
不对啊,AI也没动delay函数啊
我用的不是AI,是STC8H,我也是从官方下载的库函数,确实是unsigned char的 zhouqiming 发表于 2025-2-28 14:20
我用的不是AI,是STC8H,我也是从官方下载的库函数,确实是unsigned char的
{:4_167:}
页:
[1]