中级会员
 
- 积分
- 377
- 金钱
- 377
- 注册时间
- 2015-10-19
- 在线时间
- 173 小时
|
本帖最后由 jdwang1000 于 2016-11-23 15:07 编辑
在 STM32F10xxx参考手册 P514 頁中有解釋 :
标准模式中最大允许SCL上升时间为1000ns。如果在I2C_CR2寄存器中FREQ[5:0]中的值等于0x08且TPCLK1=125ns,
故TRISE[5:0]中必须写入09h(1000ns/125 ns = 8+1)。
但是 P497 頁中又提到
I2C模块的输入时钟频率必须至少是:
●标准模式下为:2MHz (1/2,000,000 = 0.000 000 5 = 500 ns , SCL上升時間應該是 500 ns 怎麼會是 1000 ns ?)
●快速模式下为:4MHz (1/4,000,000 = 0.000 000 25 = 250 ns, SCL上升時間應該是 250 ns 怎麼會是 300 ns ?)
在 http://www.openedv.com/thread-7888-1-1.html 此帖 7 樓中又提到
库函数的I2C_Init()中定义了:
I2Cx->TRISE = (u16)(((freqrange * 300) / 1000) + 1); //主模式的快速模式的Trise_scl=300ns。
freqrange后面的300就是300ns
是我認知錯誤嗎? 還是I2C中已有明確規範SCL的允許最大上升時間 ??
|
|