Compare commits

...

2 Commits

Author SHA1 Message Date
bf5f8503af Merge branch 'master' of ssh://git.ggeta.com:2002/guangzong/cur_stim 2024-07-02 17:51:14 -04:00
46d33201bb change main and ADC 2024-07-02 17:47:16 -04:00
4 changed files with 84 additions and 73 deletions

16
.vscode/taks.json vendored
View File

@ -3,23 +3,11 @@
"tasks": [ "tasks": [
{ {
"type": "cargo", "type": "cargo",
"command": "build", "command": "run",
"args": [ "args": [
"--bin",
"u5_example",
"--features", "--features",
"stm32u575zi" "stm32u575zi"
], ]
"problemMatcher": [
"$rustc"
],
"group": "build",
"label": "rust: cargo build with feature",
"options": {
"env": {
"DEFMT_LOG": "info"
}
}
} }
] ]
} }

2
Cargo.lock generated
View File

@ -600,7 +600,7 @@ dependencies = [
[[package]] [[package]]
name = "u5-lib" name = "u5-lib"
version = "0.1.0" 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 = [ dependencies = [
"aligned", "aligned",
"cortex-m", "cortex-m",

View File

@ -10,7 +10,11 @@ edition = "2021"
[dependencies] [dependencies]
cortex-m = { version = "0.7.7" } 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 = "0.3.6"
defmt-rtt = { version = "0.4.0" } defmt-rtt = { version = "0.4.0" }
cortex-m-rt = { version = "0.7.3", default-features = false } cortex-m-rt = { version = "0.7.3", default-features = false }
@ -29,4 +33,4 @@ debug = true
stm32u575zi = ["u5-lib/stm32u575zi"] stm32u575zi = ["u5-lib/stm32u575zi"]
stm32u5a5zj = ["u5-lib/stm32u5a5zj"] stm32u5a5zj = ["u5-lib/stm32u5a5zj"]
stm32u575ci = ["u5-lib/stm32u575ci"] stm32u575ci = ["u5-lib/stm32u575ci"]
#default = ["stm32u5a5zj"] default = ["stm32u575ci"]

View File

@ -7,10 +7,7 @@ use defmt_rtt as _;
use embassy_executor::Spawner; use embassy_executor::Spawner;
use u5_lib::{ 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, *
low_power::{Executor, no_deep_sleep_request},
clock, clock::delay_ms, com_interface::ComInterface, exti, gpio, task,
i2c, i2c::I2c,
}; };
fn i2c_init() -> (I2c, I2c) { fn i2c_init() -> (I2c, I2c) {
@ -20,31 +17,34 @@ fn i2c_init() -> (I2c, I2c) {
let i2c_minus = I2c::new(i2c_config_minus).unwrap(); let i2c_minus = I2c::new(i2c_config_minus).unwrap();
(i2c_plus, i2c_minus) (i2c_plus, i2c_minus)
} }
fn switch_led_setup() -> ( 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, gpio::GpioPort, gpio::GpioPort,gpio::GpioPort,gpio::GpioPort,){
gpio::GpioPort, gpio::GpioPort, gpio::GpioPort){
let red: gpio::GpioPort = gpio::PB7; let red: gpio::GpioPort = gpio::PB7;
let green: gpio::GpioPort = gpio::PB8; let green: gpio::GpioPort = gpio::PB8;
let s0: gpio::GpioPort = gpio::PB15; 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 s2: gpio::GpioPort = gpio::PA10;
let s3: gpio::GpioPort = gpio::PB4; let s3: gpio::GpioPort = gpio::PB4;
let s4: gpio::GpioPort = gpio::PB5; let s4: gpio::GpioPort = gpio::PB5;
let s5: gpio::GpioPort = gpio::PA5; let s5: gpio::GpioPort = gpio::PA5;
let s6: gpio::GpioPort = gpio::PA6;
let s7: gpio::GpioPort = gpio::PA4; let s7: gpio::GpioPort = gpio::PA4;
let s8: gpio::GpioPort = gpio::PA3; let s8: gpio::GpioPort = gpio::PA3;
green.setup(); green.setup();
red.setup(); red.setup();
s0.setup(); s0.setup();
s0.setup();
s1.setup(); s1.setup();
s2.setup(); s2.setup();
s3.setup(); s3.setup();
s4.setup(); s4.setup();
s5.setup(); s5.setup();
s6.setup();
s7.setup(); s7.setup();
s8.setup(); s8.setup();
(green, red, s0, s1, s2, s3, s4, s5, s7, s8) (green, red, s0, s1, s2, s3, s4, s5, s6, s7, s8)
} }
fn i2c_send( i2c:&mut I2c, addr: u16, mut data: [u8; 2]) { fn i2c_send( i2c:&mut I2c, addr: u16, mut data: [u8; 2]) {
@ -66,37 +66,43 @@ const DAC_REG_BASE: u8 = 0xF8;
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. // 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. // 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::KernelFreq160Mhz); clock::init_clock(false, true, 16_000_000, true, clock::ClockFreqs::KernelFreq160Mhz);
unsafe {
no_deep_sleep_request(); no_deep_sleep_request();
defmt::info!("setup led finished!"); }
clock::set_mco( clock::set_mco(
gpio::GPIO_MCO_PA8, gpio::GPIO_MCO_PA8,
clock::Mcosel::HSE, clock::Mcosel::HSE,
clock::Mcopre::DIV4, clock::Mcopre::DIV4,
); // clock. which use PA8 as clock output ); // clock. which use PA8 as clock output
let (green, red, s0, s1, s2, s3, s4, s5, s7, s8) = switch_led_setup();
defmt::info!("setup led finished!");
let (green, red, s0, s1, s2, s3, s4, s5, s6, s7, s8) = switch_led_setup();
s0.set_low(); s0.set_low();
s1.set_low(); s1.set_low();
s2.set_low(); s2.set_low();
s3.set_high(); s3.set_high();
s4.set_high(); s4.set_low();
s5.set_high(); s5.set_high();
s7.set_low(); s6.set_low();
s7.set_high();
s8.set_low(); s8.set_low();
let (mut i2c_plus, mut i2c_minus) = i2c_init(); let (mut i2c_plus, mut i2c_minus) = i2c_init();
for i in 0..4{ 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, 0xA8]);
} }
for i in 0..4{ 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_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]);
} }
// 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!");
@ -104,42 +110,55 @@ async fn async_main(spawner: Spawner) {
tmp_adc.init(); tmp_adc.init();
let adc_pin = gpio::ADC1_IN5_PA0; let adc_pin = gpio::ADC1_IN5_PA0;
adc_pin.setup(); adc_pin.setup();
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);
let res = tmp_adc.start_conversion_sw(5);
let mut vref:f32 = (res as f32/16383f32)*3.3;
defmt::info!("vref value: {}", vref);
let mut counter = 0;
loop {
s1.set_high(); s1.set_high();
if (counter == 1000){ delay_ms(100);
let res = tmp_adc.start_conversion_sw(5); s5.set_low();
let mut vpos : f32 = (res as f32 / 16383f32) * 3.3; delay_ms(10);
defmt::info!("pos pulse value: {}", vpos); s5.set_high();
for i in 0..4{
i2c_send(&mut i2c_plus, POS_DAC_1_ADDR, [DAC_REG_BASE + i, 0xD0]);
} }
delay_ms(2); for i in 0..4{
s1.set_low(); i2c_send(&mut i2c_plus, POS_DAC_2_ADDR, [DAC_REG_BASE + i, 0xD0]);
delay_ms(1);
s2.set_high();
if (counter == 1000){
let res = tmp_adc.start_conversion_sw(5);
let mut vneg : f32 = (res as f32 / 16383f32) * 3.3;
defmt::info!("neg pulse value: {}", vneg);
counter = 0;
} }
else{ loop {
counter += 1; // s2.set_high();
} // delay_us(100);
delay_ms(1); // s2.set_low();
s2.set_low(); // delay_us(100);
delay_ms(6); //s1.set_low();
//delay_ms(10);
// green.toggle(); // 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(); // red.toggle();
// delay_ms(1000); delay_ms(1000);
// defmt::info!("toggle leds"); defmt::info!("toggle leds");
} }
} }