Какой же я дебил!.. Охренеть! Ведь я первым делом STOP прописывал в регистр, а потом START делал!
Сделал вот так, и все хорошо:
static uint8_t i2c_startr(uint8_t addr, uint8_t nbytes, uint8_t busychk){
if(!i2c_chk(busychk)) return 0;
// read N bytes
I2C1->CR2 = (nbytes<<16) | addr /*| I2C_CR2_AUTOEND*/ | I2C_CR2_RD_WRN;
I2C1->CR2 |= I2C_CR2_START;
I2C1->CR2 |= I2C_CR2_AUTOEND;
return 1;
}
(в оригинале закомментированный I2C_CR2_AUTOEND был). В общем, не обрисовали в мануале эту ситуацию - и сиди, гадай…