Gast
#3932264
Hallo, habe folgendes Problem: Ich will den MPU6050 über DMA auslesen, der Controller hängt nach dem zweiten DMA-Durchlauf (sprint aus der externen [EXTI0] Interruptroutine hinein) beim Ausdruck: /* While the bus is busy */ while(I2C_GetFlagStatus(MPU6050_I2C, I2C_FLAG_BUSY)); Jetzt habe ich bereits gesehen, dass es ähnliche Probleme damit gab, deren Lösungen unterschiedlich waren. Allerdings funktioniert das Auslesen ohne dem DMA-Block über MPU6050_I2C_BufferRead(...) gut. Der einzige Unterschied, der mir aufgefallen ist, ist, dass beim einfachen Auslesen des letzten Bytes das Acknowledge vorher deaktiviert wird und eine Stop-Condition gesendet wird: if (NumByteToRead == 1) { /* Disable Acknowledgement */ I2C_AcknowledgeConfig(MPU6050_I2C, DISABLE); /* Send STOP Condition */ I2C_GenerateSTOP(MPU6050_I2C, ENABLE); } Fällt jemanden etwas dazu ein? Gibt es eine einfache Problemlösung? (main-File im Anhang; DMA-Auslesen angelehnt an: http://letanphuc.net/2014/06/stm32-mpu6050-dma-i2c/)