I2C Clock control register (I2C_CCR)
Регистр управления тактированием интерфейса I2C
Смещение (Address offset): 0x1C
Reset value: 0x0000
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
| F/S | DUTY | Reserved | CCR[11:8] | ||||
| rw | rw | --- | rw | ||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| CCR[7:0] | |||||||
| rw | |||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Изменение регистра I2C_CCR возможно только когда отключен интерфейс I2C (PE=0 в регистре I2C_CR1).
0 : Standard-mode (Sm) - стандартный режим до 100 кГц
1 : Fast-mode (Fm) - быстрый режим до 400 кГц
Выбирает отношение времени низкого состояния к времени высокого состояния:
0 : tlow/thigh = 2
1 : tlow/thigh = 16/9
fPCLK1 - частота APB1.
В режиме Standard-mode (Sm):
CCR=fPCLK1/(2*fSCL);
для fPCLK1=36 МГц, fSCL=100 кГц, CCR=180.
tlow = thigh = CCR * TPCLK1
В режиме Fast-mode (Fm):
- Если DUTY=0:
CCR=fPCLK1/(3*fSCL);
для fPCLK1=36 МГц, fSCL=400 кГц, CCR=30.
thigh = CCR * TPCLK1
tlow = 2 * CCR * TPCLK1
- Если DUTY=1:
CCR=fPCLK1/(25*fSCL); fPCLK1 - должна быть кратна 10 МГц!
для fPCLK1=30 МГц, fSCL=400 кГц, CCR=3.
thigh = 9 * CCR * TPCLK1
tlow = 16 * CCR * TPCLK1
Минимальное значение регистра равно 0x04, за исключением режима Fm DUTY=1, где минимальное значение - 0x01.
Частота тактовых импульсов SCL примерно равна 1/(thigh+tlow). Реальная частота немного отличается из-за задержки на входе аналогового фильтра помех.
Изменение CCR возможно только когда отключен интерфейс I2C (PE=0 в регистре I2C_CR1).
/******************* Bit definition for I2C_CCR register ********************/
#define I2C_CCR_CCR ((uint16_t)0x0FFF) /* Clock Control Register in Fast/Standard mode (Master mode) */
#define I2C_CCR_DUTY ((uint16_t)0x4000) /* Fast Mode Duty Cycle */
#define I2C_CCR_FS ((uint16_t)0x8000) /* I2C Master Mode Selection */