Add basic examples

This commit is contained in:
Paul van Tilburg 2019-03-17 13:38:36 +01:00
parent 88793567c2
commit a49a04e06f
2 changed files with 95 additions and 0 deletions

39
examples/serial.rs Normal file
View File

@ -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();
}
}

56
examples/spi.rs Normal file
View File

@ -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();
}
}