diff --git a/Cargo.lock b/Cargo.lock index 346c9fa..b54ff3d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -600,7 +600,7 @@ dependencies = [ [[package]] name = "u5-lib" version = "0.1.0" -source = "git+ssh://git@github.com:22/chen-gz/stm32u5lib.git?rev=8fec3af#8fec3afebec2b6f557cd9a30f28abcbe350976d9" +source = "git+ssh://git@github.com:22/chen-gz/stm32u5lib.git?rev=f2679fa#f2679fa49a61023579b4a2bae48e948f76003069" dependencies = [ "aligned", "cortex-m", diff --git a/Cargo.toml b/Cargo.toml index 018b602..8b30f07 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ edition = "2021" cortex-m = { version = "0.7.7" } # u5-lib = {git = "ssh://gitea@git.ggeta.com:2002/guangzong/u5_new.git", features = ["utils"], rev= "c7bbfd1593"} # u5-lib = {git = "ssh://git@github.com:22/chen-gz/stm32u5lib.git", features = ["utils"], rev="8fec3af"} -u5-lib = { git = "ssh://git@github.com:22/chen-gz/stm32u5lib.git", features = ["utils"], rev = "8fec3af", default-features = false } +u5-lib = { git = "ssh://git@github.com:22/chen-gz/stm32u5lib.git", features = ["utils"], rev = "f2679fa", default-features = false } defmt = "0.3.6" diff --git a/src/main.rs b/src/main.rs index c0b6177..e31a447 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,9 +7,19 @@ use defmt_rtt as _; use embassy_executor::Spawner; use u5_lib::{ - clock::{self, delay_ms, delay_s, delay_us}, com_interface::ComInterface, exti, gpio, i2c::{self, I2c}, low_power::{no_deep_sleep_request, Executor}, task, * + clock::{self, delay_ms, delay_s, delay_us}, + com_interface::ComInterface, + exti, + gpio::{self, GpioPort, TIM1_CH2_PA9,/*TIM1_CH3_PA10, */ TIM3_CH1_PA6}, + i2c::{self, I2c}, + low_power::{no_deep_sleep_request, Executor}, + task, + tim::{Config, TIM1, TIM3}, + *, }; +//use tim::{Config, TIM1}; + fn i2c_init() -> (I2c, I2c) { let i2c_config_plus = i2c::I2cConfig::new(1, 100_000, gpio::I2C1_SCL_PB6, gpio::I2C1_SDA_PB3); let i2c_plus = I2c::new(i2c_config_plus).unwrap(); @@ -18,33 +28,36 @@ 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 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; let s5: gpio::GpioPort = gpio::PA5; - let s6: gpio::GpioPort = gpio::PA6; + // let s6: gpio::GpioPort = gpio::PA6; let s7: gpio::GpioPort = gpio::PA4; let s8: gpio::GpioPort = gpio::PA3; + let chopper_clk: gpio::GpioPort = gpio::PA7; + green.setup(); red.setup(); s0.setup(); s0.setup(); - s1.setup(); + // s1.setup(); s2.setup(); s3.setup(); s4.setup(); s5.setup(); - s6.setup(); + //s6.setup(); s7.setup(); s8.setup(); - (green, red, s0, s1, s2, s3, s4, s5, s6, s7, s8) + chopper_clk.setup(); + (green, red, s0, s2, s3, s4, s5, s7, s8, chopper_clk) + } fn i2c_send( i2c:&mut I2c, addr: u16, mut data: [u8; 2]) { @@ -66,36 +79,52 @@ const DAC_REG_BASE: u8 = 0xF8; 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(false, true, 16_000_000, true, clock::ClockFreqs::KernelFreq160Mhz); + 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(); + 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); + TIM3.set_pwm(1, 16, 8); + // TIM3.set_pwm(2, 160, 80); + //TIM1.enable_output(1); + 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::DIV4, + clock::Mcopre::DIV8, ); // clock. which use PA8 as clock output defmt::info!("setup led finished!"); - let (green, red, s0, s1, s2, s3, s4, s5, s6, s7, s8) = switch_led_setup(); + let (green, red, s0, 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(); s5.set_high(); - s6.set_low(); + //s6.set_low(); s7.set_high(); s8.set_low(); + chopper_clk.set_low(); let (mut i2c_plus, mut i2c_minus) = i2c_init(); for i in 0..4{ //i2c_send(&mut i2c_plus, POS_DAC_1_ADDR, [DAC_REG_BASE + i, 0xA8]); - i2c_send(&mut i2c_plus, POS_DAC_1_ADDR, [DAC_REG_BASE + i, 0xA8]); + i2c_send(&mut i2c_plus, POS_DAC_1_ADDR, [DAC_REG_BASE + i, 0xD0]); } for i in 0..4{ //i2c_send(&mut i2c_plus, POS_DAC_2_ADDR, [DAC_REG_BASE + i, 0xA8]); - i2c_send(&mut i2c_plus, POS_DAC_1_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]); @@ -110,7 +139,7 @@ async fn async_main(spawner: Spawner) { tmp_adc.init(); let adc_pin = gpio::ADC1_IN5_PA0; adc_pin.setup(); - let mut counter = 4900; + let mut counter = 0; defmt::info!("ADC init!"); delay_ms(100); let vref_data = tmp_adc.start_conversion_sw(0); @@ -122,43 +151,63 @@ async fn async_main(spawner: Spawner) { let vref = 3.0 * vref_raw as f64 / vref_data as f64; defmt::info!("Vref init! {}", vref); let vref = vref / 16384.0; - delay_s(2); + delay_s(1); + let mut adc_values = [0.0; 5]; + let mut adc_indexer = 0; + let mut adc_sum = 0.0; - s1.set_high(); - delay_ms(100); - s5.set_low(); - delay_ms(10); - s5.set_high(); - for i in 0..4{ - i2c_send(&mut i2c_plus, POS_DAC_1_ADDR, [DAC_REG_BASE + i, 0xD0]); - } - for i in 0..4{ - i2c_send(&mut i2c_plus, POS_DAC_2_ADDR, [DAC_REG_BASE + i, 0xD0]); - } loop { + // s1.set_high(); // s2.set_high(); // delay_us(100); // s2.set_low(); - // delay_us(100); - //s1.set_low(); - //delay_ms(10); + // delay_us(300); + // s1.set_low(); + // s3.set_high(); + // delay_us(600); + // s3.set_low(); // counter += 1; - // if counter >= 100 { - // let res = tmp_adc.start_conversion_sw(5); - // let vpos = res as f64 * vref; - // defmt::info!("adc value: {}", vpos); + // if counter >= 60000 { + // s8.set_high(); + // delay_ms(10); + // s8.set_low(); // counter = 0; // } - //delay_ms(1); - //s1.set_low(); - //delay_ms(1); - // 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; + + counter = 0; + } +// 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(1000); - defmt::info!("toggle leds"); + delay_ms(1); + //defmt::info!("toggle leds"); } }