有些单片机有斜率限制器,这个功能可以使得SCL和SDA上的脉冲的上升沿和下降沿的斜率比较小,使得波形的边沿震荡小,避免线间串扰。比如AVR单片机的手册上有提到。但是stm32f103单片手册中只提到上升沿时间可以调整,下降沿没有提到,经过示波器监测波形,也发现stm32的I2C的下降沿确实没有这个斜率限制器。这在I2C长线传输时会造成问题(我用的线长达到40CM) 下图是AVR单片机手册中提到的 [img]file:///C:\Users\yf001\Documents\QQEIM Files\2885336240\Image\C2C\CB_PW_[VJ3DOITLSW1PQ1MG.png[/img] 下图是示波器监测AVR单片机I2C的波形,蓝色是SDA。黄色是SCL,可以看到波形的斜率没有这么大,上升沿和下降沿的时间大概是120nm. 下图是stm32单片机的手册中关于I2C的上升沿时间寄存器的描述 下边两张图分别是上升沿和下降沿的波形图,可以看到上升沿还好,下降沿的时间只有10几个纳秒,而且形成很严重的振荡,有时会造成通信故障。 请st公司的技术支持人员和各位大侠指点迷津,多谢多谢! |
我的理解是STM32F1中的这个上升时间是设定后面判断计数器的启动时间,并不是调整斜率用的。在IO口配置中才有这个设置。波形中产生震荡的原因从硬件上考虑是线路阻抗不匹配引起的,因此可以考虑调整线路阻抗。不同的引脚对应的输入输出阻抗。另外长达40厘米的线路对于只有3.3v的芯片来说确实太长了。很多应用都是加驱动芯片来解决的 |