From 90f0ffdc982f562f7993aabdbe9dabf25e100966 Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Mon, 20 Aug 2018 00:30:54 +0200 Subject: [PATCH] SPI works --- src/main.rs | 46 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/src/main.rs b/src/main.rs index 42fe3bb..da0ba45 100644 --- a/src/main.rs +++ b/src/main.rs @@ -42,17 +42,28 @@ fn configure_clocks(rcc: &mut rcc::RCC) { fn configure_peripherals(rcc: &mut hcl::platform::rcc::RCC, gpio: &mut gpio::GPIO, usart: &mut usart::USART) { - rcc.apb2_enable.set_gpio_a(true); + rcc.apb2_enable.configure(|a| a + .set_gpio_a(true) + .set_spi1(true)); rcc.apb1_enable.configure(|a| a .set_usart2(true)); gpio.configure(|g| g - .set_mode(2, gpio::PinMode::Output2MHz) + .set_mode(2, gpio::PinMode::Output50MHz) .set_output_config(2, gpio::OutputConfig::AfPushPull) .set_mode(3, gpio::PinMode::Output50MHz) .set_output_config(3, gpio::OutputConfig::AfPushPull) + // SCK1 .set_mode(5, gpio::PinMode::Output50MHz) - .set_output_config(5, gpio::OutputConfig::PushPull)); + .set_output_config(5, gpio::OutputConfig::AfPushPull) + // MOSI1 + .set_mode(7, gpio::PinMode::Output50MHz) + .set_output_config(7, gpio::OutputConfig::AfPushPull) + // MISO1 + .set_mode(6, gpio::PinMode::Input) + // NSS1 + .set_mode(4, gpio::PinMode::Output50MHz) + .set_output_config(4, gpio::OutputConfig::PushPull)); usart.configure(|u| u .set_enabled(true) @@ -70,12 +81,33 @@ fn run(mut scs: scs::Instance, mut p: hcl::platform::Instance) { let mut printer = UsartPrinter::init(p.usart2); - for i in 0u32..0xffffffff { - let x = format!("> {}\r\n", i).into_bytes(); + let mut spi = p.spi1; + spi.configure(|s| s + .set_enabled(true) + .set_master_mode(true) + .set_bidi_tx(false) + .set_clock_divider(128) + .set_data_16bit(true) + .set_clock_idles_high(false) + .set_lsb_first(false) + .set_clock_skip_first(true)); - printer.print(x); + loop { + for i in 0u16..0xffff { + let x = format!("> {}\r\n", i).into_bytes(); + + p.gpio_a.set_bit(4); + spi.set_data(i.into()); + + while spi.busy() { + + } + p.gpio_a.reset_bit(4); + + + printer.print(x); + } } - }