Я использую микроконтроллер на основе STM32F10x и общаюсь с ведомым устройством.Кажется, все работает до тех пор, пока я не отправлю своему ведомому устройству команду на чтение данных, но это будет зависать во время цикла while, потому что мой флаг BTF никогда не поднимется до высокого уровня.Если бы я удалил цикл while все вместе, я бы получил 0x81 без каких-либо фактических данных.
I2C1->CR1 |= I2C_CR1_START; // send start bit
delay(30000);
//while((I2C1->SR1 & I2C_SR1_TXE)); //read SR1
(void)I2C1->SR1;
I2C1->DR = 0x80; // slave address writing to DR 1000 0000 0x40 with R/W bit as
delay(30000);
while(!(I2C1->SR1 & I2C_SR1_TXE))// make sure transmit is empty.
{
}
(void)I2C1->SR1;
(void)I2C1->SR2;
I2C1->DR = 0xE3; // command for slave to send data, hold master mode on, clock stretching enabled
delay(30000);
while(!(I2C1->SR1 & I2C_SR1_TXE))
{
}
delay(80000);
I2C1->CR1 |= I2C_CR1_START; // send start bit
(void)I2C1->SR1;
I2C1->DR = 0x81;
delay(1000);
while(!(I2C1->SR1 & I2C_SR1_BTF)) // waiting for byte to finish transfer
{
}
dataaa[0] = I2C1->DR;
I2C1->CR1 &= ~I2C_CR1_ACK;// acknowledgement disabled
dataaa[1] = I2C1->DR;
I2C1->CR1 |= I2C_CR1_STOP;// acknowledgement disabled
temperature = temperature + dataaa[0];
temperature = temperature << 8;
temperature = temperature + dataaa[1];