Было дело, разгонял I2C. Было немного муторно, подробностей уже не
вспомню, наверное. Вот немного кода: static void
slow_fast(bool slow)
{
I2C1->CCR = (slow ? I2C_CCR_FS | 16 : I2C_CCR_FS | 8);
}
void
i2c_init(void)
{
// the resulting SCL rate when switched to 'fast' is 1.45 MHz (1/29 APB1 clock rate)
I2C1->CR2 = I2C_CR2_ITEVTEN
| I2C_CR2_ITERREN
| (SYSTIME_TPS / 2000000 / 2); // APB1 clock in MHz divided by 4 (accelerate!)
slow_fast(true);
I2C1->TRISE = 4;
I2C1->CR1 = I2C_CR1_ACK | I2C_CR1_PE;
NVIC_SetPriority(I2C1_EV_IRQn, 1);
NVIC_SetPriority(I2C1_ER_IRQn, 1);
}