From 15da459de1b58826d7917368b496201c8115185e Mon Sep 17 00:00:00 2001 From: grammers <samkar-4@student.ltu.se> Date: Thu, 1 Mar 2018 10:53:55 +0000 Subject: [PATCH] bare9 first trye --- examples/.bare9.rs.swp | Bin 0 -> 12288 bytes examples/bare9.rs | 106 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 examples/.bare9.rs.swp diff --git a/examples/.bare9.rs.swp b/examples/.bare9.rs.swp new file mode 100644 index 0000000000000000000000000000000000000000..5191816f29fc33c87c8c8252a4423d06e9ba3a46 GIT binary patch literal 12288 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 literal 0 HcmV?d00001 diff --git a/examples/bare9.rs b/examples/bare9.rs index 90a4ad8..b4d1154 100644 --- a/examples/bare9.rs +++ b/examples/bare9.rs @@ -30,3 +30,109 @@ // // https://play.rust-lang.org/, // offers a good way to prototype and share code snippets +// +// //! Output a PWM on pin PA0 and control its duty cycle via a serial interface +//! +//! - '*' increase duty by a factor of 2 +//! - '+' increase duty by 1 +//! - '-' decrease duty by 1 +//! - '/' decrease duty by a factor of 2 +#![deny(unsafe_code)] +//#![deny(warnings)] +#![feature(proc_macro)] +#![no_std] + +extern crate cortex_m_rtfm as rtfm; +extern crate f4; +#[macro_use] +extern crate cortex_m_debug; + +use core::u32; + +use f4::prelude::*; +use f4::time::Hertz; +use f4::{Channel, Pwm, Serial}; +use f4::serial::Event; +use rtfm::{app, Threshold}; + +const BAUD_RATE: Hertz = Hertz(115_200); +const FREQUENCY: Hertz = Hertz(1_000); + +app! { + device: f4::stm32f40x, + + tasks: { + USART2: { + path: rx, + resources: [TIM4, USART2], + }, + }, +} + +fn init(p: init::Peripherals) { + ipln!("init"); + let pwm = Pwm(p.TIM4); + let serial = Serial(p.USART2); + + serial.init(BAUD_RATE.invert(), None, p.GPIOA, p.RCC); + serial.listen(Event::Rxne); + + pwm.init( + FREQUENCY.invert(), + Channel::_1, + None, + p.GPIOA, + p.GPIOB, + p.GPIOC, + p.RCC, + ); + pwm.set_duty(Channel::_1, 1000); + + pwm.enable(Channel::_1); +} + +fn idle() -> ! { + ipln!("idle"); + loop { + rtfm::wfi(); + } +} + +fn rx(_t: &mut Threshold, r: USART2::Resources) { + let pwm = Pwm(&**r.TIM4); + let serial = Serial(&**r.USART2); + + //let byte: u8 = '+'.unwerp(); + let byte = serial.read().unwrap(); + // Echo back to signal we are alive + // serial.write(byte).unwrap(); + + ipln!("resewed {:?}", byte); + + match byte { + b'+' | b'-' | b'*' | b'/' => { + let duty = pwm.get_duty(Channel::_1); + + match byte { + b'+' => { + let max = pwm.get_max_duty(); + pwm.set_duty(Channel::_1, if duty < max { duty + 1 } else { max }); + } + b'-' => { + pwm.set_duty(Channel::_1, duty.checked_sub(1).unwrap_or(0)); + } + b'*' => { + let new_duty = duty.checked_mul(2).unwrap_or(u32::MAX); + let max_duty = pwm.get_max_duty(); + + if new_duty < max_duty { + pwm.set_duty(Channel::_1, new_duty) + } + } + b'/' => pwm.set_duty(Channel::_1, duty / 2), + _ => ipln!("iner error"),//{ /* unreachable */ } + } + } + _ => ipln!("outher error"),//{} + } +} -- GitLab