STM32
登录
直播中
史晓明
7年用户
940经验值
私信
关注
[问答]
stm8s I2C总线总是处于忙状态是怎么回事?
开启该帖子的消息推送
STM8S
I2C总线
求助各位大大,我使用的是STM8S103K3,想要使用stm8通过I2C控制一个LCD的驱动芯片,在I2C写的时候,判断bus是否处于忙状态的循环无法跳出,通过示波器量I2C总线的时候是高电平。目前怀疑是自己I2C初始化不正确,但网上有的说要设置GPIO PIN,有的说不需要,请问一下I2C的初始化到底要怎么初始化?下面是我的代码:
#define I2C_SLAVE_ADDRESS 0x7C
#define I2C_PORT GPIOB
#define I2C_SDA_PIN GPIO_PIN_4
#define I2C_SCL_PIN GPIO_PIN_5
void main(void)
{
GPIO_Init(I2C_PORT, I2C_SDA_PIN, GPIO_MODE_OUT_OD_HIZ_SLOW);
GPIO_Init(I2C_PORT, I2C_SCL_PIN, GPIO_MODE_OUT_OD_HIZ_SLOW);
CLK_PeripheralClockConfig(CLK_PERIPHERAL_I2C, ENABLE);
I2C_EEInit();
}
void Init_I2C(void)
{
/* 复位设备 */
I2C_DeInit();
/* 初始化设备 */
I2C_EEInit();
}
void I2C_EEInit(void)
{
u8 Input_Clock = 0x0;
Input_Clock = CLK_GetClockFreq() / 1000000;
/* I2C Peripheral Enable */
I2C_Cmd(ENABLE);
/* Apply I2C configura
ti
on after enabling it */
I2C_Init(I2C_MAX_STANDARD_FREQ, I2C_SLAVE_ADDRESS,
I2C_DUTYCYCLE_2, I2C_ACK_CURR,
I2C_ADDMODE_7BIT, Input_Clock);
}
void I2C_EE_ByteWrite(u8 u8CmdType, u8 *pu8Buffer, u8 u8WriteAddr)
{
/* while the bus is busy */
while (I2C_GetFlagStatus(I2C_FLAG_BUSBUSY))
{
}
/* Send start condition */
I2C_GenerateSTART(ENABLE);
/* Test on EV5 and clear it */
while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT))
{
}
/* Send devices address for write */
I2C_Send7bitAddress(I2C_SLAVE_ADDRESS, I2C_DIRECTION_TX);
/* Test on EV6 and clear it */
while(!I2C_CheckEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
{
}
/* Send cmd type be written */
I2C_SendData(u8CmdType);
/* Test on EV8 and clear it */
while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTING))
{
}
/* Send Address to be written wait event detection */
I2C_SendData(u8WriteAddr);
/* Test on EV8 and clear it */
while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTING))
{
}
if (u8CmdType == 0x80)
{
/* Send the byte to be written */
I2C_SendData(*pu8Buffer);
/* Test on EV3 and clear it */
while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTING))
{
}
}
/* Send stop condition */
I2C_GenerateSTOP(ENABLE);
return;
}
这个问题困扰我好久了,请大家帮忙看一下,谢谢各位了!!!
回帖
(1)
云甫太
2024-4-22 15:25:23
I2C是复用的GPIO的管脚,没有设置这个GPIO为I2C导致的
I2C是复用的GPIO的管脚,没有设置这个GPIO为I2C导致的
举报
更多回帖
rotate(-90deg);
回复
相关问答
STM8S
I2C总线
请问怎么使用
stm8s
制作
i2c
iap?
2019-07-10
1233
是否有作为从机运行的
STM8S
I2C
库
2019-01-08
789
请问在进行
I2C
写时
总是
卡在
总线
检测
忙
的while循环中是什么原因?
2018-08-14
6419
采用STM
8S
003F硬件
I2C
进行双机通讯,主机里检测
总线
结果一直
处于
总线
忙
状态
,为什么?
2024-04-16
101
在
STM8S
单片机IIC中,使用simulator仿真时,
总线
不忙,使用ST-LINK时,
总线
显示
忙
状态
2018-01-03
3406
nuc029lan
i2c
从机scl一直
处于
拉低
状态
是
怎么回事
?
2023-06-20
393
i2c
不通的原因是什么
2021-03-02
7860
请问STM
8
芯片
I2C
总线
的通信过程及主模式是怎样的?
2020-11-09
1090
I2C
IP核Core
I2C
怎么样?
2019-08-05
3944
使用AIC3120时
I2C
控制无法通讯是
怎么回事
?如何解决?
2024-11-05
176
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分