From 51c86ea39487ec7f5b56708521ef3ba9404d3fb1 Mon Sep 17 00:00:00 2001 From: Connie Date: Tue, 30 Jul 2024 12:48:18 -0400 Subject: [PATCH] commit on july 30 --- src/main.rs | 117 ++++++++++++++++++++++------------------------------ 1 file changed, 49 insertions(+), 68 deletions(-) diff --git a/src/main.rs b/src/main.rs index e31a447..2c8e5b7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,7 +10,7 @@ use u5_lib::{ clock::{self, delay_ms, delay_s, delay_us}, com_interface::ComInterface, exti, - gpio::{self, GpioPort, TIM1_CH2_PA9,/*TIM1_CH3_PA10, */ TIM3_CH1_PA6}, + gpio::{self, GpioPort, TIM1_CH2_PA9, /*TIM1_CH3_PA10,*/ TIM3_CH1_PA6}, i2c::{self, I2c}, low_power::{no_deep_sleep_request, Executor}, task, @@ -28,11 +28,11 @@ fn i2c_init() -> (I2c, I2c) { (i2c_plus, i2c_minus) } fn switch_led_setup() -> ( gpio::GpioPort, gpio::GpioPort, gpio::GpioPort, gpio::GpioPort, gpio::GpioPort, - gpio::GpioPort, gpio::GpioPort, gpio::GpioPort, gpio::GpioPort, gpio::GpioPort){ + gpio::GpioPort, gpio::GpioPort, gpio::GpioPort, gpio::GpioPort, gpio::GpioPort, gpio::GpioPort){ let red: gpio::GpioPort = gpio::PB7; let green: gpio::GpioPort = gpio::PB8; let s0: gpio::GpioPort = gpio::PB15; - //let s1: gpio::GpioPort = gpio::PA9; + let s1: gpio::GpioPort = gpio::PA9; let s2: gpio::GpioPort = gpio::PA10; let s3: gpio::GpioPort = gpio::PB4; let s4: gpio::GpioPort = gpio::PB5; @@ -46,8 +46,7 @@ fn switch_led_setup() -> ( gpio::GpioPort, gpio::GpioPort, gpio::GpioPort, gpio: green.setup(); red.setup(); s0.setup(); - s0.setup(); - // s1.setup(); + s1.setup(); s2.setup(); s3.setup(); s4.setup(); @@ -56,7 +55,7 @@ fn switch_led_setup() -> ( gpio::GpioPort, gpio::GpioPort, gpio::GpioPort, gpio: s7.setup(); s8.setup(); chopper_clk.setup(); - (green, red, s0, s2, s3, s4, s5, s7, s8, chopper_clk) + (green, red, s0, s1, s2, s3, s4, s5, s7, s8, chopper_clk) } @@ -76,38 +75,38 @@ const NEG_DAC_2_ADDR: u16 = 0xE0; const DAC_REG_BASE: u8 = 0xF8; #[task] -async fn async_main(spawner: Spawner) { +async fn async_main(spawner: Spawner){ // be careful, if the dbg is not enabled, but using deep sleep. This framework will not able to connect to chip. // stm32cube programmer, stmcubeide can be used to program the chip, then this framework can be used to debug. clock::init_clock(true, true, 16_000_000, true, clock::ClockFreqs::KernelFreq16Mhz); unsafe { no_deep_sleep_request(); } - TIM1_CH2_PA9.setup(); - // TIM1_CH3_PA10.setup(); + //TIM1_CH2_PA9.setup(); + //TIM1_CH3_PA10.setup(); TIM3_CH1_PA6.setup(); let _ = TIM1.init(Config::default()); let _ = TIM3.init(Config::default()); //TIM1.set_pwm(1, 160, 80); - TIM1.set_pwm(2, 320, 160); - //TIM1.set_pwm(3, 160000, 80000); + //TIM1.set_pwm(2, 1600, 800); + //TIM1.set_pwm(3, 1600, 800); TIM3.set_pwm(1, 16, 8); // TIM3.set_pwm(2, 160, 80); //TIM1.enable_output(1); - TIM1.enable_output(2); + //TIM1.enable_output(2); //TIM1.enable_output(3); TIM3.enable_output(1); //TIM3.enable_output(2); clock::set_mco( gpio::GPIO_MCO_PA8, clock::Mcosel::HSE, - clock::Mcopre::DIV8, + clock::Mcopre::DIV16, ); // clock. which use PA8 as clock output defmt::info!("setup led finished!"); - let (green, red, s0, s2, s3, s4, s5, s7, s8, chopper_clk) = switch_led_setup(); + let (green, red, s0, s1, s2, s3, s4, s5, s7, s8, chopper_clk) = switch_led_setup(); s0.set_low(); - //s1.set_low(); + s1.set_low(); s2.set_low(); s3.set_high(); s4.set_low(); @@ -126,12 +125,12 @@ async fn async_main(spawner: Spawner) { //i2c_send(&mut i2c_plus, POS_DAC_2_ADDR, [DAC_REG_BASE + i, 0xA8]); i2c_send(&mut i2c_plus, POS_DAC_2_ADDR, [DAC_REG_BASE + i, 0xD0]); } - // for i in 0..4 { - // i2c_send(&mut i2c_minus, NEG_DAC_1_ADDR, [DAC_REG_BASE + i, 0x50]); - // } - // for i in 0..4 { - // i2c_send(&mut i2c_minus, NEG_DAC_2_ADDR, [DAC_REG_BASE + i, 0x50]); - // } + for i in 0..4 { + i2c_send(&mut i2c_minus, NEG_DAC_1_ADDR, [DAC_REG_BASE + i, 0x50]); + } + for i in 0..4 { + i2c_send(&mut i2c_minus, NEG_DAC_2_ADDR, [DAC_REG_BASE + i, 0x50]); + } defmt::info!("i2c finished!"); @@ -152,61 +151,43 @@ async fn async_main(spawner: Spawner) { defmt::info!("Vref init! {}", vref); let vref = vref / 16384.0; delay_s(1); - let mut adc_values = [0.0; 5]; - let mut adc_indexer = 0; - let mut adc_sum = 0.0; + loop { - // s1.set_high(); - // s2.set_high(); - // delay_us(100); - // s2.set_low(); - // delay_us(300); - // s1.set_low(); - // s3.set_high(); - // delay_us(600); - // s3.set_low(); - // counter += 1; - // if counter >= 60000 { - // s8.set_high(); - // delay_ms(10); - // s8.set_low(); - // counter = 0; - // } + s2.set_high(); + delay_us(100); + s2.set_low(); + delay_us(100); + s1.set_high(); + delay_us(200); + s1.set_low(); + delay_us(600); -// s1.set_high(); -// delay_us(10); - // for i in 0..12{ - // s6.set_high(); - // delay_us(5); - // s6.set_low(); - // delay_us(5) - // } counter += 1; - if counter >= 997 { - let res = tmp_adc.start_conversion_sw(5); - let vpos = res as f64 * vref; - adc_sum -= adc_values[adc_indexer]; - adc_values[adc_indexer] = vpos; - adc_sum += vpos; - defmt::info!("adc average value: {}", adc_sum/4.0); - adc_indexer += 1; - adc_indexer %= 5; - + if counter >= 1000{ + TIM1_CH2_PA9.setup(); + TIM1.set_pwm(2, 1600, 1580); + TIM1.enable_output(2); + //TIM1.set_pwm(2, 1600, 1550); + let mut adc_sum = 0.0; + for i in 0..5 { + let res = tmp_adc.start_conversion_sw(5); + let vpos = res as f64 * vref; + adc_sum += vpos; + } counter = 0; + //TIM1.set_pwm(2, 1600, 800); + defmt::info!("adc average value: {}", adc_sum / 5.0); + if adc_sum / 5.0 > 0.5{ // the value should change accordingly + red.set_high(); + } + else { + red.set_low(); + } } -// s1.set_low(); -// delay_us(10); - // for i in 0..12{ - // s6.set_high(); - // delay_us(5); - // s6.set_low(); - // delay_us(5) - // } - green.toggle(); // red.toggle(); - delay_ms(1); + //delay_ms(1); //defmt::info!("toggle leds"); } }