From 46d33201bb21acc41c87de4b625079dc681825a4 Mon Sep 17 00:00:00 2001 From: Connie Date: Tue, 2 Jul 2024 17:47:16 -0400 Subject: [PATCH] change main and ADC --- .vscode/taks.json | 16 +------ Cargo.lock | 2 +- Cargo.toml | 8 +++- src/main.rs | 116 ++++++++++++++++++++++++++++++++++------------ 4 files changed, 96 insertions(+), 46 deletions(-) diff --git a/.vscode/taks.json b/.vscode/taks.json index 915d1e5..7e52a8a 100644 --- a/.vscode/taks.json +++ b/.vscode/taks.json @@ -3,23 +3,11 @@ "tasks": [ { "type": "cargo", - "command": "build", + "command": "run", "args": [ - "--bin", - "u5_example", "--features", "stm32u575zi" - ], - "problemMatcher": [ - "$rustc" - ], - "group": "build", - "label": "rust: cargo build with feature", - "options": { - "env": { - "DEFMT_LOG": "info" - } - } + ] } ] } diff --git a/Cargo.lock b/Cargo.lock index 394db90..346c9fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -600,7 +600,7 @@ dependencies = [ [[package]] name = "u5-lib" version = "0.1.0" -source = "git+ssh://gitea@git.ggeta.com:2002/guangzong/u5_new.git?rev=c7bbfd1593#c7bbfd159347f24a23b0722b9b08f7b51e98b8c3" +source = "git+ssh://git@github.com:22/chen-gz/stm32u5lib.git?rev=8fec3af#8fec3afebec2b6f557cd9a30f28abcbe350976d9" dependencies = [ "aligned", "cortex-m", diff --git a/Cargo.toml b/Cargo.toml index 24f3112..018b602 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,11 @@ edition = "2021" [dependencies] 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://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 } + + defmt = "0.3.6" defmt-rtt = { version = "0.4.0" } cortex-m-rt = { version = "0.7.3", default-features = false } @@ -29,4 +33,4 @@ debug = true stm32u575zi = ["u5-lib/stm32u575zi"] stm32u5a5zj = ["u5-lib/stm32u5a5zj"] stm32u575ci = ["u5-lib/stm32u575ci"] -#default = ["stm32u5a5zj"] +default = ["stm32u575ci"] diff --git a/src/main.rs b/src/main.rs index ea1d86c..d37142e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,10 +7,7 @@ use defmt_rtt as _; use embassy_executor::Spawner; use u5_lib::{ - *, - low_power::{Executor, no_deep_sleep_request}, - clock, clock::delay_ms, com_interface::ComInterface, exti, gpio, task, - i2c, i2c::I2c, + clock::{self, delay_ms, delay_s, delay_us}, com_interface::ComInterface, exti, gpio, i2c::{self, I2c}, low_power::{no_deep_sleep_request, Executor}, task, * }; fn i2c_init() -> (I2c, I2c) { @@ -20,24 +17,32 @@ fn i2c_init() -> (I2c, I2c) { let i2c_minus = I2c::new(i2c_config_minus).unwrap(); (i2c_plus, i2c_minus) } -fn switch_led_setup() -> ( gpio::GpioPort, gpio::GpioPort, gpio::GpioPort, - gpio::GpioPort, gpio::GpioPort, gpio::GpioPort, gpio::GpioPort){ +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,){ 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 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 s7: gpio::GpioPort = gpio::PA4; + let s8: gpio::GpioPort = gpio::PA3; green.setup(); red.setup(); + s0.setup(); s1.setup(); s2.setup(); s3.setup(); s4.setup(); s5.setup(); - (green, red, s1, s2, s3,s4,s5) + s6.setup(); + s7.setup(); + s8.setup(); + (green, red, s0, s1, s2, s3, s4, s5, s6, s7, s8) } fn i2c_send( i2c:&mut I2c, addr: u16, mut data: [u8; 2]) { @@ -60,45 +65,98 @@ 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); - no_deep_sleep_request(); - defmt::info!("setup led finished!"); - let (green, red, s1, s2, s3, s4, s5) = switch_led_setup(); - s1.set_low(); - s2.set_high(); - s3.set_low(); - s4.set_low(); - s5.set_low(); + unsafe { + no_deep_sleep_request(); + } + clock::set_mco( + gpio::GPIO_MCO_PA8, + clock::Mcosel::HSE, + clock::Mcopre::DIV4, + ); // clock. which use PA8 as clock output - // 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]); - // } - // for i in 0..4{ - // i2c_send(&mut i2c_plus, POS_DAC_2_ADDR, [DAC_REG_BASE + i, 0xA8]); - // } + defmt::info!("setup led finished!"); + let (green, red, s0, s1, s2, s3, s4, s5, s6, s7, s8) = switch_led_setup(); + s0.set_low(); + s1.set_low(); + s2.set_low(); + s3.set_high(); + s4.set_low(); + s5.set_high(); + s6.set_low(); + s7.set_high(); + s8.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]); + } + 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]); + } // 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!"); + defmt::info!("i2c finished!"); let tmp_adc = adc::ADC1; tmp_adc.init(); let adc_pin = gpio::ADC1_IN5_PA0; adc_pin.setup(); - - let res = tmp_adc.start_conversion_sw(5); - defmt::info!("adc value: {}", res); - + let mut counter = 4900; + defmt::info!("ADC init!"); + delay_ms(100); + let vref_data = tmp_adc.start_conversion_sw(0); + delay_ms(100); + let vref_data = tmp_adc.start_conversion_sw(0); + defmt::info!("Vref_data init! {}", vref_data); + let vref_raw = tmp_adc.get_vref_int_raw(); + defmt::info!("Vref_raw init! {}", vref_raw); + 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); + 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 { + // s2.set_high(); + // delay_us(100); + // s2.set_low(); + // delay_us(100); + //s1.set_low(); + //delay_ms(10); + // counter += 1; + // if counter >= 100 { + // let res = tmp_adc.start_conversion_sw(5); + // let vpos = res as f64 * vref; + // defmt::info!("adc value: {}", vpos); + // counter = 0; + // } + //delay_ms(1); + //s1.set_low(); + //delay_ms(1); + // delay_us(200); + // s1.set_low(); + // delay_us(600); green.toggle(); // red.toggle(); - // delay_ms(1000); - // defmt::info!("toggle leds"); + delay_ms(1000); + defmt::info!("toggle leds"); } }