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

我用的是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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版