#![no_main] #![no_std] extern crate panic_halt; use core::fmt::Write; use cortex_m_rt::entry; use hal::{pac, prelude::*, rcc::Config}; use hd44780_driver::HD44780; use heapless::Vec; #[entry] fn main() -> ! { let dp = pac::Peripherals::take().unwrap(); let cp = cortex_m::Peripherals::take().unwrap(); let mut rcc = dp.RCC.freeze(Config::hsi16()); let gpioa = dp.GPIOA.split(&mut rcc); let _gpiob = dp.GPIOB.split(&mut rcc); let gpioc = dp.GPIOC.split(&mut rcc); let d0 = gpioc.pc0.into_push_pull_output(); let d1 = gpioc.pc1.into_push_pull_output(); let d2 = gpioc.pc2.into_push_pull_output(); let d3 = gpioc.pc3.into_push_pull_output(); let d4 = gpioc.pc4.into_push_pull_output(); let d5 = gpioc.pc5.into_push_pull_output(); let d6 = gpioc.pc6.into_push_pull_output(); let d7 = gpioc.pc7.into_push_pull_output(); let rs = gpioc.pc8.into_push_pull_output(); let en = gpioc.pc9.into_push_pull_output(); let mut delay = cp.SYST.delay(rcc.clocks); let mut led = gpioa.pa5.into_push_pull_output(); let mut lcd = HD44780::new_8bit(rs, en, d0, d1, d2, d3, d4, d5, d6, d7, &mut delay).unwrap(); let mut i = 0; let mut buf: Vec = Vec::new(); loop { lcd.write_str("Hello world!", &mut delay).unwrap(); led.set_high().unwrap(); delay.delay_ms(500_u16); led.set_low().unwrap(); write!(buf, "hello: {i}").unwrap(); lcd.write_bytes(&buf, &mut delay).unwrap(); delay.delay_ms(500_u16); i += 1; } }