Привет всем.

Ну что господа, родил я код. Привожу ниже, может кому пригодится. А то я сам намучался, хочу и другим облегчить жизнь.
Код
uint_fast16_t I2CLM75(void)
{ uint32_t i;
while ((I2C1->ISR & I2C_ISR_TXE)==0); //while TXE ==0, buffer is full
// Задать адрес приёмника и длину данных
i=I2C1->CR2;
i &= (uint32_t)~((uint32_t)(I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_AUTOEND | I2C_CR2_RD_WRN | I2C_CR2_START | I2C_CR2_STOP));
i |= ((0x90 & I2C_CR2_SADD) | ((1 << 16 ) & I2C_CR2_NBYTES) | I2C_CR2_RELOAD | I2C_CR2_START);
I2C1->CR2=i;
while ( (I2C1 -> ISR & I2C_ISR_TXIS) == 0);
I2C1->TXDR = 0;//Передача номера регистра для чтения из STLM75
while ((I2C1->ISR & I2C_ISR_TCR)==0);//ждём окончание передачи
I2C1->CR2 |= I2C_CR2_STOP;//Делаем стоп :) здесь собака зарыта
i=I2C1->CR2;
i &= (uint32_t)~((uint32_t)(I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_AUTOEND | I2C_CR2_RD_WRN | I2C_CR2_START | I2C_CR2_STOP));
i |= ((0x90 & I2C_CR2_SADD) | ((2 << 16 ) & I2C_CR2_NBYTES) | I2C_CR2_RD_WRN | I2C_CR2_START);
I2C1->CR2=i;
while ( ( I2C1 -> ISR & I2C_ISR_RXNE ) == 0);
i=I2C1->RXDR;
i<<=8;
while ( ( I2C1 -> ISR & I2C_ISR_RXNE ) == 0);
i |=I2C1->RXDR;
I2C1->CR2|=(90<<0)|(1<<16)| I2C_CR2_RELOAD; //address SLAVE 7bits
I2C1->CR2 &=~ I2C_CR2_RD_WRN; //write
I2C1->CR2 |= I2C_CR2_STOP; // Stop Transmit
while ( ( I2C1 -> ISR & I2C_ISR_STOPF ) == 0 );
I2C1 -> ICR = I2C_ICR_STOPCF;
return i;}
PS: Всем огромаднейшее спасибо за поддержку!