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

88
Cargo.lock generated
View File

@@ -101,6 +101,12 @@ dependencies = [
"generic-array", "generic-array",
] ]
[[package]]
name = "byte-slice-cast"
version = "1.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d"
[[package]] [[package]]
name = "bytemuck" name = "bytemuck"
version = "1.24.0" version = "1.24.0"
@@ -259,6 +265,7 @@ dependencies = [
"cortex-m", "cortex-m",
"cortex-m-rt", "cortex-m-rt",
"critical-section", "critical-section",
"display-interface-spi",
"embassy-embedded-hal", "embassy-embedded-hal",
"embassy-executor", "embassy-executor",
"embassy-futures", "embassy-futures",
@@ -267,8 +274,29 @@ dependencies = [
"embassy-time", "embassy-time",
"embassy-usb", "embassy-usb",
"embassy-usb-logger", "embassy-usb-logger",
"embedded-graphics",
"embedded-hal-bus",
"heapless 0.9.2", "heapless 0.9.2",
"log", "log",
"mipidsi",
]
[[package]]
name = "display-interface"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ba2aab1ef3793e6f7804162debb5ac5edb93b3d650fbcc5aeb72fcd0e6c03a0"
[[package]]
name = "display-interface-spi"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f86b9ec30048b1955da2038fcc3c017f419ab21bb0001879d16c0a3749dc6b7a"
dependencies = [
"byte-slice-cast",
"display-interface",
"embedded-hal 1.0.0",
"embedded-hal-async",
] ]
[[package]] [[package]]
@@ -497,6 +525,29 @@ dependencies = [
"log", "log",
] ]
[[package]]
name = "embedded-graphics"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0649998afacf6d575d126d83e68b78c0ab0e00ca2ac7e9b3db11b4cbe8274ef0"
dependencies = [
"az",
"byteorder",
"embedded-graphics-core",
"float-cmp",
"micromath",
]
[[package]]
name = "embedded-graphics-core"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba9ecd261f991856250d2207f6d8376946cd9f412a2165d3b75bc87a0bc7a044"
dependencies = [
"az",
"byteorder",
]
[[package]] [[package]]
name = "embedded-hal" name = "embedded-hal"
version = "0.2.7" version = "0.2.7"
@@ -522,6 +573,16 @@ dependencies = [
"embedded-hal 1.0.0", "embedded-hal 1.0.0",
] ]
[[package]]
name = "embedded-hal-bus"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "513e0b3a8fb7d3013a8ae17a834283f170deaf7d0eeab0a7c1a36ad4dd356d22"
dependencies = [
"critical-section",
"embedded-hal 1.0.0",
]
[[package]] [[package]]
name = "embedded-hal-nb" name = "embedded-hal-nb"
version = "1.0.0" version = "1.0.0"
@@ -601,6 +662,15 @@ version = "0.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
[[package]]
name = "float-cmp"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
dependencies = [
"num-traits",
]
[[package]] [[package]]
name = "fnv" name = "fnv"
version = "1.0.7" version = "1.0.7"
@@ -783,6 +853,24 @@ version = "2.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
[[package]]
name = "micromath"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3c8dda44ff03a2f238717214da50f65d5a53b45cd213a7370424ffdb6fae815"
[[package]]
name = "mipidsi"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ba34dcbf61182ffa6992b5a4d9b566d5a99df127fd93f6d314213347329e92f"
dependencies = [
"embedded-graphics-core",
"embedded-hal 1.0.0",
"heapless 0.8.0",
"nb 1.1.0",
]
[[package]] [[package]]
name = "nb" name = "nb"
version = "0.1.3" version = "0.1.3"

View File

@@ -20,6 +20,10 @@ critical-section = "1.2.0"
heapless = "0.9.2" heapless = "0.9.2"
log = "0.4" log = "0.4"
display-interface-spi = "0.5.0"
mipidsi = "0.9.0"
embedded-hal-bus = "0.3.0"
embedded-graphics = "0.8.1"
[profile.dev] [profile.dev]
codegen-units = 1 codegen-units = 1

View File

@@ -2,10 +2,24 @@
#![no_main] #![no_main]
use embassy_executor::Spawner; 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 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 gpio::{Level, Output};
use log::{error, info}; use log::{error, info};
use mipidsi::{Builder, interface::SpiInterface, models::ST7789, options::ColorOrder};
#[panic_handler] #[panic_handler]
fn panic(info: &core::panic::PanicInfo) -> ! { fn panic(info: &core::panic::PanicInfo) -> ! {
@@ -30,15 +44,44 @@ async fn main(spawner: Spawner) {
let driver = Driver::new(p.USB, Irqs); let driver = Driver::new(p.USB, Irqs);
spawner.must_spawn(logger_task(driver)); 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 { loop {
info!("led on!");
led.set_high();
Timer::after_secs(1).await;
info!("led off!");
led.set_low();
Timer::after_secs(1).await; Timer::after_secs(1).await;
} }
} }