My solution
1. #![deny(unsafe_code)]
2. #![no_main]
3. #![no_std]
5. #[allow(unused_imports)]
6. use aux11::{entry, iprint, iprintln};
7. use heapless::{consts, Vec};
9. #[entry]
10. fn main() -> ! {
11. let (usart1, mono_timer, itm) = aux11::init();
13. // A buffer with 32 bytes of capacity
14. let mut buffer: Vec<u8, consts::U32> = Vec::new();
16. loop {
17. buffer.clear();
19. loop {
20. while usart1.isr.read().rxne().bit_is_clear() {}
21. let byte = usart1.rdr.read().rdr().bits() as u8;
23. if buffer.push(byte).is_err() {
24. // buffer full
25. for byte in b"error: buffer full\n\r" {
26. while usart1.isr.read().txe().bit_is_clear() {}
27. usart1.tdr.write(|w| w.tdr().bits(u16::from(*byte)));
28. }
30. break;
31. }
33. // Carriage return
34. if byte == 13 {
35. // Respond
36. for byte in buffer.iter().rev().chain(&[b'\n', b'\r']) {
37. while usart1.isr.read().txe().bit_is_clear() {}
38. usart1.tdr.write(|w| w.tdr().bits(u16::from(*byte)));
39. }
41. break;
42. }
43. }
44. }
45. }