你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

我用的是STM32F103RBT的芯片,采用库函数来完成I2C通信,MCU...

[复制链接]
watercici 提问时间:2018-3-12 17:40 /
我用的是STM32F103RBT的芯片,采用库函数来完成I2C通信,MCU为主,没有用中断,也没有用DMA,但就是会卡死在while循环了,用示波器抓了一下,没有抓到应答信号,怎么办呢?
收藏 评论9 发布时间:2018-3-12 17:40

举报

9个回答
MrJiu 回答时间:2018-3-12 17:50:21
不解释,ST的I2C建议用模拟。。。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

Tcreat 回答时间:2018-3-12 18:16:13
只能说很常规的现象  之前看文章人家说建议  I2C建议使用中断+DMA的方式 而且中断的优先级还得最高,所以你可以尝试这样的方式 如果条件不允许 那就用模拟的吧

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

wenyangzeng 回答时间:2018-3-12 21:13:09
ST的IIC还是用模拟的比较可靠。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

七哥 回答时间:2018-3-12 21:34:05
用模拟I2C吧,用硬件I2C太操心了。
STM32F103的I2C在操作时得注意,一个不注意就入坑了。比如读状态寄存器,不能立马读,得有一点延时。还有写的时候得按外设器件手册来,该加延时的地方要加延时。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

xmstudio 回答时间:2018-3-12 23:10:13
希望楼主的描述再具体点,用什么样的代码驱动什么设备
如果是HAL库的话,普通的发送函数HAL_I2C_Master_Transmit,最后一个参数Timeout改大点,我驱动OLED屏的时候发现如果用10就会卡死,改成50就正常。如果是带DMA的,需要开启I2C的中断,否则发不出去

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

maxtch 回答时间:2018-3-13 02:26:42
我不知道为什么各位都在说 STM32 的 I2C 要用软件模拟。

我这里有块 STM32F103 的板子,自己写的硬件 I2C 驱动程序,有中断没有 DMA,一点没有问题啊?每秒钟发和传感器芯片通信两次,不用看门狗也连续三天三夜没卡过。这个看来是 ST 库的毛病,丢掉库自己操作寄存器写一个驱动吧。
maxtch 回答时间:2018-3-13 02:27:50
toofree 发表于 2018-3-12 21:34
用模拟I2C吧,用硬件I2C太操心了。
STM32F103的I2C在操作时得注意,一个不注意就入坑了。比如读状态寄存器 ...

我怎么就没碰到过这种问题?直接操作寄存器基本不会有问题啊?

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

七哥 回答时间:2018-3-13 09:53:50
maxtch 发表于 2018-3-13 02:27
我怎么就没碰到过这种问题?直接操作寄存器基本不会有问题啊?

同样的程序,用ST的IIC EEPROM没有问题,用Atmel的相同容量就容易挂。
最后查看,是我的两次写操作之间没有加延时,按说如果有问题的话,都不能跑才对。但ST的能跑,不知道怎么回事。
maxtch 回答时间:2018-3-13 14:05:45
toofree 发表于 2018-3-13 09:53
同样的程序,用ST的IIC EEPROM没有问题,用Atmel的相同容量就容易挂。
最后查看,是我的两次写操作之间没 ...

EEPROM 写操作是比较慢,连续两次写操作之间一定是要加延时的。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版