ADXL345 acceleration data readout looks strange - STM8
Putting my original comment into an answer now that you've pasted your code here.


My suspicion was right that you are losing your upper byte by shifting them away, because you've declared z0/z1 as a uint8_t.  So (z0 &lt;&lt; 8) always turns into 0x00.  Make these uint16_t instead.
I think your communication is probably OK, like you mentioned, but one way to test it for sure is to check the WHO_AM_I register.  Most devices have something like this (might name it differently).  The ADXL345 WHO_AM_I register is at 0x00 and it's hardcoded to 0xE5 (or 345 octal, yuk yuk, clever Analog Devices engineers).  First thing your enableADXL() function should do is check this register and look for the hard-coded answer as expected.  If it doesn't match, your communications channel is broken so no point continuing.
Since it appears you are printing out x, y, and z (not x_val, y_val, and z_val), 1g will be about 250 LSB, so again double-check that your device isn't on its side because your X-axis value is -252.  


But I think #1 will fix you.