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

2019-07-14 18:34发布

我用的是STM32F103RBT的芯片,采用库函数来完成I2C通信,MCU为主,没有用中断,也没有用DMA,但就是会卡死在while循环了,用示波器抓了一下,没有抓到应答信号,怎么办呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
60user135
1楼-- · 2019-07-15 02:50
只能说很常规的现象  之前看文章人家说建议  I2C建议使用中断+DMA的方式 而且中断的优先级还得最高,所以你可以尝试这样的方式 如果条件不允许 那就用模拟的吧
ctwewer
2楼-- · 2019-07-15 07:40
 精彩回答 2  元偷偷看……
zhouxk
3楼-- · 2019-07-15 13:26
用模拟I2C吧,用硬件I2C太操心了。
STM32F103的I2C在操作时得注意,一个不注意就入坑了。比如读状态寄存器,不能立马读,得有一点延时。还有写的时候得按外设器件手册来,该加延时的地方要加延时。
60user126
4楼-- · 2019-07-15 17:08
希望楼主的描述再具体点,用什么样的代码驱动什么设备
如果是HAL库的话,普通的发送函数HAL_I2C_Master_Transmit,最后一个参数Timeout改大点,我驱动OLED屏的时候发现如果用10就会卡死,改成50就正常。如果是带DMA的,需要开启I2C的中断,否则发不出去
wang222221
5楼-- · 2019-07-15 20:56
我不知道为什么各位都在说 STM32 的 I2C 要用软件模拟。

我这里有块 STM32F103 的板子,自己写的硬件 I2C 驱动程序,有中断没有 DMA,一点没有问题啊?每秒钟发和传感器芯片通信两次,不用看门狗也连续三天三夜没卡过。这个看来是 ST 库的毛病,丢掉库自己操作寄存器写一个驱动吧。
wang222221
6楼-- · 2019-07-15 21:07
zhouxk 发表于 2018-8-14 07:58
用模拟I2C吧,用硬件I2C太操心了。
STM32F103的I2C在操作时得注意,一个不注意就入坑了。比如读状态寄存器,不能立马读,得有一点延时。还有写的时候得按外设器件手册来,该加延时的地方要加延时。

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

一周热门 更多>