diff --git a/examples/serial.rs b/examples/serial.rs new file mode 100644 index 0000000..72756ff --- /dev/null +++ b/examples/serial.rs @@ -0,0 +1,39 @@ +//! Serial interface echo server example +//! +//! In this example every received byte will be sent back to the sender. You can test this +//! example with serial terminal emulator like `minicom`. + +#![deny(unsafe_code)] +#![deny(warnings)] +#![no_main] +#![no_std] + +extern crate panic_semihosting; + +use cortex_m_rt::entry; +//use cortex_m_semihosting::hprintln; +use hal::block; +use hal::prelude::*; +use hal::serial::{config::Config as SerialConfig, Serial}; + +#[entry] +fn main() -> ! { + let device = hal::stm32::Peripherals::take().unwrap(); + + let rcc = device.RCC.constrain(); + let clocks = rcc.cfgr.sysclk(48.mhz()).freeze(); + + let gpioa = device.GPIOA.split(); + let tx = gpioa.pa2.into_alternate_af7(); + let rx = gpioa.pa3.into_alternate_af7(); + let config = SerialConfig::default().baudrate(9_600.bps()); + + let serial = Serial::usart2(device.USART2, (tx, rx), config, clocks).unwrap(); + let (mut tx, mut rx) = serial.split(); + + loop { + let byte = block!(rx.read()).unwrap(); + //hprintln!("in: {}", byte).unwrap(); + block!(tx.write(byte)).ok(); + } +} diff --git a/examples/spi.rs b/examples/spi.rs new file mode 100644 index 0000000..6ad7ebf --- /dev/null +++ b/examples/spi.rs @@ -0,0 +1,56 @@ +//! Accelerometer via SPI example +//! +//! This example reads all axes from the accelerometer and outputs it via semihosting +//! debug output. + +#![deny(unsafe_code)] +#![deny(warnings)] +#![no_main] +#![no_std] + +extern crate panic_semihosting; + +use cortex_m_rt::entry; +use cortex_m_semihosting::hprintln; +//use hal::block; +use hal::prelude::*; +use hal::spi::{Mode, Phase, Polarity, Spi}; + +#[entry] +fn main() -> ! { + let device = hal::stm32::Peripherals::take().unwrap(); + + let rcc = device.RCC.constrain(); + let clocks = rcc.cfgr.freeze(); + + let gpioa = device.GPIOA.split(); + let sck = gpioa.pa5.into_alternate_af5(); + let miso = gpioa.pa6.into_alternate_af5(); + let mosi = gpioa.pa7.into_alternate_af5(); + let mode = Mode { + polarity: Polarity::IdleHigh, + phase: Phase::CaptureOnSecondTransition, + }; + let mut spi = Spi::spi1(device.SPI1, (sck, miso, mosi), mode, 100.hz(), clocks); + + let gpioe = device.GPIOE.split(); + let mut cs = gpioe.pe3.into_push_pull_output(); + + // Init + cs.set_low(); + let mut commands = [0x20, 0b01000111]; + let _ = spi.transfer(&mut commands[..]).unwrap(); + cs.set_high(); + + loop { + // Read + cs.set_low(); + let mut commands = [(1 << 7) | (1 << 6) | 0x29, 0x0, 0x0, 0x0, 0x0, 0x0]; + let result = spi.transfer(&mut commands[..]).unwrap(); + let acc_x = result[1] as i8; + let acc_y = result[3] as i8; + let acc_z = result[5] as i8; + cs.set_high(); + hprintln!("{}, {}, {}", acc_x, acc_y, acc_z).unwrap(); + } +}