fgetc returns negative error value

Many device drivers (stm32 usb included) will return with an error if
they are not ready.  Previously, fgetc would simply return 0 in this
case, causing applications depending on it blocking to run continously
until the resource became ready.  Now fgetc can return a negative error,
which the application can check for.
stm32/i2c: Fix TRISE register value

This register should be set to the maximum rise time, incremented by
one, but it was not incremented by one.
stm32: Timeouts on all I2C and SPI while loops

I'm tired of finding yet another loop that is hanging the system because
its condition is never met.  It is about time that all loops can timeout.