I2C_write(GYRO_ADDRESS, 0x39, 0b00000000);
I am concerned about this. 0x38 is the largest value of an actual data register.
I know that some i2c devices like a DS1307 RTC and external eeproms will wrap register addresses when writing or reading addresses beyond the actual register number.
With your device, if there is register wrap behaviour, you may have written 0b00000000 to register 0x00 which is a reserved register with a nice warning in the data sheet
Registers marked as Reserved must not be changed. Writing to these registers may cause
permanent damage to the device.
If you continue to have issues with this device, you may want to consult adafruit customer service or ST to understand this issue.