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

硬件I2C的bug(ST的Bug)

[复制链接]
edmundlee 发布时间:2019-5-3 18:05
本帖最后由 edmundlee 于 2019-5-3 18:09 编辑

STM32F103RC的项目, 当中用到了I2C, I2C是以中断+DMA的方式做,之前还是工作正常, 在更改I2C以外的其余部分后,发现I2C2_EV_IRQHandler不再正常的响应。

本着一贯遇到Bug绝不绕路走的原则, 花了我半天时间总算把引起问题的原因找出来了。

当设置了START后, 在EV_IRQHandler中断还没来到之前, 初始化另一外设, 这问题就会出现了。
而追查下去, 是由于改动了APB1ENR
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART3);
就是这一条与I2C毫不相关的东东, 引发了I2C2_EV_IRQHandler不再响应。

尝试过, START后延迟几十个微秒再做USART3的初始化, 就不会再有I2C2_EV_IRQHandler不再响应的问题。
尝试过, START后做USART3的初始化, 只把LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART3);这一句屏蔽, 也不会再有I2C2_EV_IRQHandler不再响应的问题。
由于USART3的初始化并没有马上使用到, 甚至是USART3还没使能。

所以推论出结果是, START后就不要动APB1ENR, 否则就会出问题。

若有ST的FAE看到此贴, 又不能重复我提到的问题, 可以连系我提供
收藏 3 评论4 发布时间:2019-5-3 18:05

举报

4个回答
七哥 回答时间:2019-5-3 23:35:30
用__HAL_RCC_USART3_CLK_ENABLE()试试如何,反正LL库我是不敢太相信。
五哥1 回答时间:2019-5-4 02:07:44
被人老说I2C有问题,难道就是这个?
edmundlee 回答时间:2019-5-4 06:04:46
toofree 发表于 2019-5-3 23:35
用__HAL_RCC_USART3_CLK_ENABLE()试试如何,反正LL库我是不敢太相信。

直接写寄存试过, 用BIT Band也试过, 都一样
harvardx 回答时间:2019-5-4 23:24:53
MARK一下 , 江湖对此问题传说已久 还请官方出来解惑一下.

所属标签

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