Compare commits
2 Commits
d723176e10
...
bf5f8503af
Author | SHA1 | Date | |
---|---|---|---|
bf5f8503af | |||
46d33201bb |
16
.vscode/taks.json
vendored
16
.vscode/taks.json
vendored
@ -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
2
Cargo.lock
generated
@ -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",
|
||||||
|
@ -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"]
|
||||||
|
121
src/main.rs
121
src/main.rs
@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user