原创 关于STM32-I2C不合理看法

2008-8-26 11:42 7980 8 9 分类: MCU/ 嵌入式

点击下载//-------------------------------------
//《 关于STM32 I2C不合理的看法 》
// netjob 2008-08-22
//-------------------------------------
1. 关于 SCL时钟设置的处理。


在软件模拟年代,SCL是50%的PWM, 就是说 SCL低周期:SCL 高周期=1:1,
这是我们一贯的认识与做法。


而实在ATMEL与NXP的 ARM 中的I2C也是如此对待。只不过ATMEL叫TWI.


由于ATMEL公司本身也生产I2C的FLASH和SPI FLASH ; 我们有理由
相信这种1:1是可行可靠的。


我们知道I2C是NXP(菲利普半导体)的专利 ,它应该是权威了,
但我们仔细看NXP的ARM7, 它的I2C 时钟高、低周期 是可变的。
我们可以设1:1,也可以设1:2 等等。虽然NXP 手册上是使用1:1的设计。



简单的说: SCL时钟高低周期比例定了下来(1:1),那么周期越长
I2C的速度就越慢。


例如:
I2C的时钟是48MHZ,要I2C工作200KHZ, 我们只要 把计算出的周期
写入I2C寄存器就可以了。
方法: 48,000,000/(200,000*2)=120;
也就是说把时钟分频【120】,I2C 就可以工作200KHZ了。



 而ST公司的STM32名堂就来了,它来了什么 保准模式,快速模式,
 周期比例有什么 1:2 、 16:9 。
 还搞了个SCL时钟最大上升时间,它也分模式,STM32的I2C设置中
 就要输入这项内容。
 
  而ST公司确实是把简单的问题复杂化了。
 
2。关于状态位的查询与清除
 
 这个事实上是很简单,但说起来比较麻烦。
 
 在I2C协议中,我们都要根据标志位来判断分析I2C总线上发生的事情。
 例如START发送完毕了,数据发送完毕了等等。
 
 ATMEL公司
 ATMEL的TWI可以说 非常精简。
 程序只要关心的标志:
 TXRDY: 发送保持寄存器就绪
 RXRDY: 接收保持寄存器就绪
 TXCOMP: 传输完成
 NXP公司
 NXP的I2C可以说 非常高效。它的每个状态标志位都有相应的清标志位 ,
 这样当I2C总线上发生的事情触发对应的标志置位后,我们可以人为的清除它。
 而且它的标志位很统一,用一个【中断事件标志位】来表示,详细内容可以访问
 内容寄存器。
 
 ATMEL公司和NXP公司的I2C都只有【一个】 状态寄存器。
 
 而ST公司呢,STM32要操作【两个】状态寄存器,判断这两个寄存器的标志位。
 标志名目繁多,不同事件要查询不同标志位;也没有相应的清除标志位。
 这也是我们最担心的,我们不知到底这个标志是新的事件产生的还是老的标志没被清除。
 虽然STM32告诉了我们每个标志的清除方法。
 
 我的STM32初学者笔记有完整的初始化和读写函数代码,大家可以参考参考。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户966196 2009-8-18 13:12

没有见到您的学习笔记,可以参考一下吗?这个破i2c弄了2-3天了,原来用668做也没有这么复杂

用户389072 2007-1-11 16:53

不錯,你做LED的設計嗎

用户71881 2007-1-7 20:01

好好学习一下

用户1001398 2007-1-6 14:28

阳光直射下有0.3V~0.5V电压.

用户1001398 2007-1-6 14:27

确实如此!

 

用户17686 2007-1-4 14:09

有点意思有时间试一下

用户69786 2006-12-28 13:22

比较喜欢这种图文并茂的文章,很直观!!

用户42895 2006-12-26 14:45

有趣,LED用作光电管,有空要试验一下是不是真的。
相关推荐阅读
用户479664 2009-12-30 17:07
CRC校验之 MSP430与STM32通吃版
CRC是一个必备工具。在工程上,特别是通信。好比网卡芯片,无效RF CC500 CC1100等芯片内部都有CRC电路。...
用户479664 2009-09-01 17:59
TMS320F280X SPI SPIA使用入门与总结
TMS320F280X SPI SPIA使用入门与总结Netjob @ 2009年 8月31日晚我使用过NXP ARM LPC2138的SPI口,ATMEL AT91SAM7S256的SPI,MSP4...
用户479664 2009-08-25 23:09
STM32 CAN 标称位时间计算
以知 CAN总线 每秒发送的位数,即 最大传输 比特率是 1Mb/s( 1 兆位每秒)这样 CAN总线的【最小标称位时间】就是  1 μs,简单的说就是 发送 1 位要1 μs时间。根据ISO1189...
用户479664 2009-08-25 23:07
精解 SPI 的 CPHA 时钟相位 与CPLK 时钟极性
精解 SPI 的 CPHA 时钟相位 与CPLK 时钟极性Netjob @ 2009-08-01...
用户479664 2009-06-18 23:00
STM32 Hello World!
https://static.assets-stash.eet-china.com/album/old-resources/2008/12/12/8ee2aa15-a51b-441d-96f5-a15...
用户479664 2009-05-11 23:56
精解 Solder Mask 和Paste Mask 区别
Solder Mask Layers【阻焊层】。这个是反显层! 有的表示无的,无的表示有的嘛,不明白?你在Solder Mask Layer【有TopSolder 和BottomSolder】上FIL...
EE直播间
更多
我要评论
1
8
关闭 站长推荐上一条 /3 下一条