display poc working

This commit is contained in:
2026-01-28 17:47:43 +01:00
parent debbbcdb37
commit 736ff352af
3 changed files with 143 additions and 8 deletions

View File

@@ -2,10 +2,24 @@
#![no_main]
use embassy_executor::Spawner;
use embassy_rp::{bind_interrupts, gpio, peripherals::USB, usb::Driver};
use embassy_rp::{
bind_interrupts, gpio,
peripherals::USB,
spi::{self, Spi},
usb::Driver,
};
use embassy_time::Timer;
use embedded_graphics::{
mono_font::{MonoTextStyle, iso_8859_1::FONT_10X20},
pixelcolor::{BinaryColor, Rgb565, Rgb666},
prelude::{Point, *},
primitives::{Circle, PrimitiveStyle},
text::Text,
};
use embedded_hal_bus::spi::ExclusiveDevice;
use gpio::{Level, Output};
use log::{error, info};
use mipidsi::{Builder, interface::SpiInterface, models::ST7789, options::ColorOrder};
#[panic_handler]
fn panic(info: &core::panic::PanicInfo) -> ! {
@@ -30,15 +44,44 @@ async fn main(spawner: Spawner) {
let driver = Driver::new(p.USB, Irqs);
spawner.must_spawn(logger_task(driver));
let mut led = Output::new(p.PIN_25, Level::Low);
let mut spi_cfg = spi::Config::default();
spi_cfg.frequency = 62_500_000;
let inner = p.SPI0;
let clk = p.PIN_18;
let mosi = p.PIN_19;
let cs = p.PIN_17;
let dc = p.PIN_16;
let rst = p.PIN_15;
let spi = Spi::new_blocking_txonly(inner, clk, mosi, spi_cfg);
// let spi = Spi::new_txonly(inner, clk, mosi, p.DMA_CH0, spi_cfg);
let cs_display = Output::new(cs, Level::Low);
let dc_display = Output::new(dc, Level::Low);
let mut rst_display = Output::new(rst, Level::Low);
rst_display.set_low();
Timer::after_millis(10).await;
rst_display.set_high();
Timer::after_millis(120).await;
let spi_dev = ExclusiveDevice::new_no_delay(spi, cs_display).unwrap();
let mut buffer = [0u8; 512];
let di = SpiInterface::new(spi_dev, dc_display, &mut buffer);
let mut display = Builder::new(ST7789, di)
.display_size(240, 320)
.init(&mut embassy_time::Delay)
.unwrap();
display.clear(Rgb565::BLACK).unwrap();
Circle::new(Point::new(70, 100), 80)
.into_styled(PrimitiveStyle::with_fill(Rgb565::RED))
.draw(&mut display)
.unwrap();
loop {
info!("led on!");
led.set_high();
Timer::after_secs(1).await;
info!("led off!");
led.set_low();
Timer::after_secs(1).await;
}
}