解决中断I2C起始信号无法产生

在使用LL库进行STM32的中断I2C测试时,遇到发送起始信号后无法进入接收状态的问题。问题出在SB标志位未被置一。通过添加检查和启用I2C外设的代码,成功解决了起始信号生成的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用LL库进行stm32中断I2C的测试中,发出信号时可以产生起始信号,但是接收信号时,卡在了下面这句话

/* 产生起始位 */
  LL_I2C_GenerateStartCondition(I2C1);
	
  while(LL_I2C_IsActiveFlag_SB(I2C1) != 1);

这个SB信号一直不置一
之后,在接收函数清pos前加了如下几行

/* 1.保证I2C外设不在使用中. */
    while(LL_I2C_IsActiveFlag_BUSY(I2C1));
	
	    /* Check if the I2C is already enabled */
    if ((I2C1->CR1 & I2C_CR1_PE) != I2C_CR1_PE)
    {
      /* Enable I2C peripheral */
      LL_I2C_Enable(I2C1);
    }

成功的产生起始信号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值