大家好!小编今天给大家解答一下有关STM32的I2C为什么不好用,以及分享几个stm32 i2c bug对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
高手帮忙看看STM32模拟I2C为什么接收不到数据
1、从机可能在发送数据时需要提前准备数据,并可能校验CRC,这个时间可能会比较长,超出了设定的频率。一般人写的程序非常死板,不考虑从机的性能和移植性,加入的时序延时可能这个从机可以正常通讯,换一个从机就傻眼了。
2、原因是串口接收的时候出现异常。解决方法:中断函数里面获取IDLE空闲中断标志位。清除标志位,停止串口DMA传输。
3、应该是电平问题。发来的是很高的+1-12 应该做转换。
4、收不到数据的话一般是初始化有问题,注意GPIO的配置,以及usart的使能,电源上电。
stm32的I2C为什么会有bug
1、有很多人说有bug,就算有也应该是早期的问题了,我个人用过stm8的i2c,也看过stm32的差不多,相对其他mcu,stm的i2c设计很难用,需要软件拦截很多传输线上的情况,考虑不周就会出现所谓的bug或掉进轮询寄存器的死循环。
2、STM32的I2C的Bug:因为ack信号时间很短暂,一旦错过了这个短暂的ACK信号,STM32就挂了。CPU要处理很多不同的任务,一旦其他任务占用了CPU,ACK就容易被错过。
3、对于普通应用来说那就不是BUG,只有特殊要求下可认为是BUG。
4、应该说硬件I2C使用起来比较啰嗦,主要是不会用导致的问题。
stm32内部的iic怎么感觉不稳定啊,大家遇到过没
1、不用搞这个了STM32的IIC通讯有个bug。因为ack信号时间很短暂,一旦错过了这个短暂的ACK信号,STM32就挂了。想用IIC的话,就用软件模拟吧。
2、stm32的iic硬件有缺陷。。当年搞了半天都解决不了问题。。后来才听说硬件本身有问题。。我当年的解决方法是读一次数重启一次iic。。凑合着用的。。
3、stm32的iic好像不好用,可以根据时序,通过IO模拟iic,注意时钟拉高或者拉低时需要加延时。其他通信方式你可以参考串口、CAN、SPI、FSMC等。
4、一般情况下,那些所谓的BUG,我们是不会使用到的,除非特殊情形下,但官方也给出相应的解决方案。
5、你这种情况比较复杂!SPI总线建议你使用STM32内置的SPI总线,网上有很多例程。如果你一定要模拟也是可以的。IIC总线一直是STM32的诟病,用模拟总线更安全一些。
stm32的i2c的CPAL库,感觉还是不实用啊。
1、那里是超时等待的,即在规定时间内等待某个事件发生,超过时间则退出等待。如:等待一个ACK,如果硬件上从机24CXX IC 坏,则永不返回ACK,那主机不可能一直等下去的。所以有下时间限度。
2、(2)由于使用STM32的较高境界是使用中断调度任务而不是死等循环,而硬件I2C对于中断打断十分忌讳,所以随着你的编程和对操作系统理解水平的提高,你会越来越感觉STM32硬件I2C是个坑。
3、是固件库设计不合理,while 加 Flag 很容易死循环。建议用中断加DMA。现在我搭载在自己写的实时内核,一个总线挂了四五个设备,各个任务乱序访问,一点问题也没发现过。觉得有些人是因为没摸透stm32 的iic功能。
stm32硬件i2c缺陷解决方法
1、(2)一小段代码就DEBUG一次的步步为营方法,按之前的思路把代码加入到读的模块(忽略防守代码,只加入必需的功能代码)。都OK后,全速运行,XXX,又卡住了。细过了一片读模块。PASS。
2、比如为了防止错过Ack信号的读取,可以加入循环发送并读Ack的步骤,也可以直接关中断,如果有资源用DMA最好了,收发数据以及标志位的相关处理和判断都自动处理。
3、官网不承认这个Bug,给出的解决方案是:用最高优先级的DMA来实现I2C传输。我以前用I2C就遇到过这种问题,改成状态机的方式后就没有问题了,把I2C中断的优先级设成最高的。
4、是固件库设计不合理,while 加 Flag 很容易死循环。建议用中断加DMA。现在我搭载在自己写的实时内核,一个总线挂了四五个设备,各个任务乱序访问,一点问题也没发现过。觉得有些人是因为没摸透stm32 的iic功能。
到此,以上就是小编对于stm32 i2c bug的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位老师在评论区讨论,给我留言。