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

硬件I2C的bug(ST的Bug)

[复制链接]
edmundlee 发布时间:2019-5-3 18:05
本帖最后由 edmundlee 于 2019-5-3 18:09 编辑
: q1 F# p2 j8 h4 c
* L9 F2 G" B. ^0 D  F/ PSTM32F103RC的项目, 当中用到了I2C, I2C是以中断+DMA的方式做,之前还是工作正常, 在更改I2C以外的其余部分后,发现I2C2_EV_IRQHandler不再正常的响应。3 s4 }9 m4 C( s0 P5 q  {
% C; A3 V. q: {$ o7 i
本着一贯遇到Bug绝不绕路走的原则, 花了我半天时间总算把引起问题的原因找出来了。  `3 a6 w* b+ g( e  e. C# L

$ n3 D8 s5 i9 S# t# C" E当设置了START后, 在EV_IRQHandler中断还没来到之前, 初始化另一外设, 这问题就会出现了。' y- d& `7 l& ]
而追查下去, 是由于改动了APB1ENR
  H4 Q5 f5 x9 w5 M9 b- xLL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART3);
, D) ?7 {4 C. A$ T. L1 w: x就是这一条与I2C毫不相关的东东, 引发了I2C2_EV_IRQHandler不再响应。1 w) j  O$ F+ f
5 f2 U8 i; x+ Q
尝试过, START后延迟几十个微秒再做USART3的初始化, 就不会再有I2C2_EV_IRQHandler不再响应的问题。0 g5 d& E0 C* ]* Q. y
尝试过, START后做USART3的初始化, 只把LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART3);这一句屏蔽, 也不会再有I2C2_EV_IRQHandler不再响应的问题。) V* [* ]% N9 ?* R
由于USART3的初始化并没有马上使用到, 甚至是USART3还没使能。
9 o2 {5 j- N4 q* ]& G1 {1 j5 ]( Z* L, w' p  n5 s& t. Q
所以推论出结果是, START后就不要动APB1ENR, 否则就会出问题。
5 v' M# e. c) s
6 P1 g  q) E9 a% p3 T若有ST的FAE看到此贴, 又不能重复我提到的问题, 可以连系我提供5 t$ h9 E7 F# \/ D3 l5 F
赞 收藏 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% M$ P4 d2 `2 m2 ^1 d3 [( H& ^
用__HAL_RCC_USART3_CLK_ENABLE()试试如何,反正LL库我是不敢太相信。
2 K3 j& C# M' y* r
直接写寄存试过, 用BIT Band也试过, 都一样
harvardx 回答时间:2019-5-4 23:24:53
MARK一下 , 江湖对此问题传说已久 还请官方出来解惑一下.
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版