int main(void) { clock_setup(); spi2.begin(); configure_as_output({PB, 0}); set_pin({PB, 0}, true); etk::sleep_ms(300); //configure chip select pin auto cs = gpio_pin(PA, 8); configure_as_output(cs); set_pin(cs, true); //start LCD screen lcd.begin(); etk::sleep_ms(500); while(true) { lcd.set_cursor(0, 0); lcd.print("Temp: "); set_pin(cs, false); union spidata { char bytes[4]; int32 data; }; spidata data; data.bytes[3] = spi2.read(); data.bytes[2] = spi2.read(); data.bytes[1] = spi2.read(); data.bytes[0] = spi2.read(); set_pin(cs, true); lcd.set_cursor(2, 6); int32 v = data.data; if (v & 0x80000000) v = 0xFFFFC000 | ((v >> 18) & 0x00003FFFF); else v >>= 18; real_t deg_c = v; deg_c *= 0.25; lcd.print(deg_c, " C"); etk::sleep_ms(500); }
void hard_fault_handler(void) { lcd.set_cursor(0, 0); lcd.print("Hard fault."); while(true) { } }