From 14f2a02889ec876fcf3801acc13a28a35175cc9b Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Wed, 9 Sep 2020 21:35:04 +0200 Subject: [PATCH] ST7735 works --- Cargo.toml | 5 ++- src/logo.bmp | Bin 0 -> 32906 bytes src/main.rs | 99 +++++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 src/logo.bmp diff --git a/Cargo.toml b/Cargo.toml index ae67c13..a2d71a5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,10 +8,13 @@ version = "0.1.0" [dependencies] cortex-m = "0.6" cortex-m-rt = "0.6" -stm32f1xx-hal = { version = "0.5.3", features = ["stm32f103", "rt"] } +stm32f1xx-hal = { version = "0.6.1", features = ["stm32f103", "rt"] } panic-semihosting = "0.5" embedded-hal = "0.2.3" rtt-target = {version = "0.2.2", features = ["cortex-m"]} +st7735-lcd = { git = "https://github.com/LongHairedHacker/st7735-lcd-rs.git", branch = "fix-short-rectangles" } +embedded-graphics = "0.6.2" +tinybmp = {version ="0.2.3", features = ["graphics"]} # this lets you use `cargo fix`! diff --git a/src/logo.bmp b/src/logo.bmp new file mode 100644 index 0000000000000000000000000000000000000000..719fdfa3e92f1a68bd414216b1c67578049cf58b GIT binary patch literal 32906 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 M+FFoa#ooC82Q96i!T ! { @@ -21,11 +34,17 @@ fn main() -> ! { // Take ownership over the raw flash and rcc devices and convert them into the corresponding // HAL structs let mut flash = dp.FLASH.constrain(); + let mut rcc = dp.RCC.constrain(); // Freeze the configuration of all the clocks in the system and store the frozen frequencies in // `clocks` - let clocks = rcc.cfgr.freeze(&mut flash.acr); + let clocks = rcc + .cfgr + .use_hse(8.mhz()) + .sysclk(72.mhz()) + .pclk1(36.mhz()) + .freeze(&mut flash.acr); // Acquire the GPIOC peripheral let mut gpioc = dp.GPIOC.split(&mut rcc.apb2); @@ -36,6 +55,82 @@ fn main() -> ! { let mut delay = Delay::new(cp.SYST, clocks); + let mut afio = dp.AFIO.constrain(&mut rcc.apb2); + + let mut gpioa = dp.GPIOA.split(&mut rcc.apb2); + + // SPI1 + let sck = gpioa.pa5.into_alternate_push_pull(&mut gpioa.crl); + let miso = gpioa.pa6; + let mosi = gpioa.pa7.into_alternate_push_pull(&mut gpioa.crl); + + let disp_cs = gpioa.pa0.into_push_pull_output(&mut gpioa.crl); + + let rst = gpioa.pa1.into_push_pull_output(&mut gpioa.crl); + let dc = gpioa.pa4.into_push_pull_output(&mut gpioa.crl); + let mut disp_led = gpioa.pa8.into_push_pull_output(&mut gpioa.crh); + + disp_led.set_high(); + + let spi = Spi::spi1( + dp.SPI1, + (sck, miso, mosi), + &mut afio.mapr, + Mode { + polarity: Polarity::IdleLow, + phase: Phase::CaptureOnFirstTransition, + }, + 16.mhz(), + clocks, + &mut rcc.apb2, + ); + + let mut disp = st7735_lcd::ST7735::new(spi, dc, rst, true, false, 160, 128); + + disp.hard_reset(&mut delay).unwrap(); + disp.init(&mut delay).unwrap(); + disp.set_orientation(&Orientation::LandscapeSwapped) + .unwrap(); + + let style_black = PrimitiveStyleBuilder::new() + .fill_color(Rgb565::BLACK) + .build(); + Rectangle::new(Point::new(0, 0), Point::new(160, 128)) + .into_styled(style_black) + .draw(&mut disp) + .unwrap(); + + /* + let style_red = PrimitiveStyleBuilder::new().fill_color(Rgb565::RED).build(); + let style_green = PrimitiveStyleBuilder::new() + .fill_color(Rgb565::GREEN) + .build(); + let style_blue = PrimitiveStyleBuilder::new() + .fill_color(Rgb565::BLUE) + .build(); + Rectangle::new(Point::new(0, 0), Point::new(10, 20)) + .into_styled(style_red) + .draw(&mut disp) + .unwrap(); + + disp.set_pixel(10, 20, 0x07E0); + + + Rectangle::new(Point::new(55, 0), Point::new(105, 128)) + .into_styled(style_green) + .draw(&mut disp) + .unwrap(); + + Rectangle::new(Point::new(110, 0), Point::new(159, 128)) + .into_styled(style_blue) + .draw(&mut disp) + .unwrap(); + */ + + let bmp = Bmp::from_slice(include_bytes!("logo.bmp")).unwrap(); + let image = Image::new(&bmp, Point::new(16, 0)); + image.draw(&mut disp).unwrap(); + // Blink using the delay function loop { rprintln!("blink");