|
本帖最后由 edmundlee 于 2019-5-3 18:09 编辑 STM32F103RC的项目, 当中用到了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 当设置了START后, 在EV_IRQHandler中断还没来到之前, 初始化另一外设, 这问题就会出现了。' y- d& `7 l& ] 而追查下去, 是由于改动了APB1ENR LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART3); 就是这一条与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还没使能。 * L, w' p n5 s& t. Q 所以推论出结果是, START后就不要动APB1ENR, 否则就会出问题。 若有ST的FAE看到此贴, 又不能重复我提到的问题, 可以连系我提供5 t$ h9 E7 F# \/ D3 l5 F |
微信公众号
手机版
直接写寄存试过, 用BIT Band也试过, 都一样