#![no_std]
#![no_main]
use embassy_stm32::gpio::{Level, Output, Speed};
use embassy_stm32::time::mhz;
use embassy_stm32::Config;
use embassy_time::Delay;
use embassy_executor::Spawner;
use embedded_graphics::{
mono_font::{ascii::FONT_6X10, MonoTextStyleBuilder},
pixelcolor::BinaryColor,
prelude::*,
text::{Baseline, Text},
};
use embedded_hal::delay::DelayNs;
use oled_async::{prelude::*, Builder};
use {defmt_rtt as _, panic_probe as _};
#[embassy_executor::main]
async fn main(_spawner: Spawner) {
let mut config = Config::default();
{
use embassy_stm32::rcc::*;
config.rcc.sys = Sysclk::HSI;
}
let p = embassy_stm32::init(config);
let mut spi_config = embassy_stm32::spi::Config::default();
spi_config.frequency = mhz(4);
let cs = Output::new(p.PA2, Level::High, Speed::High);
let dc = Output::new(p.PA3, Level::High, Speed::High);
let mut reset = Output::new(p.PA4, Level::High, Speed::High);
let spi = embassy_stm32::spi::Spi::new(
p.SPI1, p.PA5, p.PA7, p.PA6, p.DMA1_CH1, p.DMA1_CH2, spi_config,
);
let spi = embedded_hal_bus::spi::ExclusiveDevice::new(spi, cs, Delay);
let di = display_interface_spi::SPIInterface::new(spi, dc);
let mut delay = Delay {};
let raw_disp = Builder::new(oled_async::displays::sh1107::Sh1107_128_128 {})
.with_rotation(crate::DisplayRotation::Rotate180)
.connect(di);
let mut disp: GraphicsMode<_, _> = raw_disp.into();
disp.reset(&mut reset, &mut delay).unwrap();
disp.init().await.unwrap();
disp.clear();
disp.flush().await.unwrap();
let text_style = MonoTextStyleBuilder::new()
.font(&FONT_6X10)
.text_color(BinaryColor::On)
.build();
Text::with_baseline("Hello world!", Point::zero(), text_style, Baseline::Top)
.draw(&mut disp)
.unwrap();
disp.flush().await.unwrap();
loop {
delay.delay_ms(1000);
}
}