打印
[STM32]

模拟i2c初始化电平不高不低

[复制链接]
1048|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pkuzhx|  楼主 | 2015-12-9 09:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我用stm32的PB6和PB7模拟i2c,测试时让程序一上电就i2c读取传感器寄存器,发现有时会读取失败(很少)。
失败时波形如下:

然后就疯狂reset,有时reset过后就变好,有时要好多次才能变好。正常后读取波形如下:

代码方面:
gpio配置如下:
/*Configure GPIO pins : PB6 PB7 PB10 PB3 */
  GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_10|GPIO_PIN_3;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
配置为OD输出,无上拉,低速(实际SCL频率不到20kHz)。由于外部有4.7k上拉,所以这里选择NOPULL。
然后操作SDA和SCL的代码如下:
#define SCL1_H         GPIOB->BSRR = GPIO_PIN_6
#define SCL1_L         GPIOB->BSRR = GPIO_PIN_6 << 16
#define SDA1_H         GPIOB->BSRR = GPIO_PIN_7
#define SDA1_L         GPIOB->BSRR = GPIO_PIN_7 << 16
#define SCL1_read      GPIOB->IDR  & GPIO_PIN_6
#define SDA1_read      GPIOB->IDR  & GPIO_PIN_7
我想请教各位,这种情况是不是应该是硬件出问题的可能性更大?如果是硬件出错,可能是什么问题?

相关帖子

沙发
pkuzhx|  楼主 | 2015-12-9 11:20 | 只看该作者
好吧,可能是SDA的上拉电阻有问题。连接好的时候,就正常,连接不好的时候,猜测大概有1M左右的电阻,出现读取错误。
更换电阻重新焊接后,暂时没发现有问题。

使用特权

评论回复
板凳
NE5532| | 2015-12-9 13:32 | 只看该作者
检查上拉电阻大小是否合适,另外MCU切换端口输入输出状态的时机是否正确。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:原来可以设置签名档啊!

45

主题

730

帖子

6

粉丝