Co-authored-by: Guangzong Chen <chen-gz@outlook.com>. Add ADC in while loop

This commit is contained in:
Connie 2024-05-06 15:12:49 -04:00
parent 9e56111d9d
commit 2c18efa100

View File

@ -21,23 +21,30 @@ fn i2c_init() -> (I2c, I2c) {
(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){
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 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 s7: gpio::GpioPort = gpio::PA4;
let s8: gpio::GpioPort = gpio::PA3;
green.setup(); green.setup();
red.setup(); red.setup();
s0.setup();
s1.setup(); s1.setup();
s2.setup(); s2.setup();
s3.setup(); s3.setup();
s4.setup(); s4.setup();
s5.setup(); s5.setup();
(green, red, s1, s2, s3,s4,s5) s7.setup();
s8.setup();
(green, red, s0, s1, s2, s3, s4, s5, 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]) {
@ -59,30 +66,38 @@ 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(false, true, 16_000_000, true, clock::ClockFreqs::KernelFreq160Mhz); clock::init_clock(true, true, 16_000_000, true, clock::ClockFreqs::KernelFreq160Mhz);
no_deep_sleep_request(); no_deep_sleep_request();
defmt::info!("setup led finished!"); defmt::info!("setup led finished!");
let (green, red, s1, s2, s3, s4, s5) = switch_led_setup(); clock::set_mco(
gpio::GPIO_MCO_PA8,
clock::Mcosel::HSE,
clock::Mcopre::DIV4,
); // clock. which use PA8 as clock output
let (green, red, s0, s1, s2, s3, s4, s5, s7, s8) = switch_led_setup();
s0.set_low();
s1.set_low(); s1.set_low();
s2.set_high(); s2.set_low();
s3.set_low(); s3.set_high();
s4.set_low(); s4.set_high();
s5.set_low(); s5.set_high();
s7.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]);
// } }
// 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]);
// } }
// for i in 0..4 { for i in 0..4 {
// i2c_send(&mut i2c_minus, NEG_DAC_1_ADDR, [DAC_REG_BASE + i, 0x50]); i2c_send(&mut i2c_minus, NEG_DAC_1_ADDR, [DAC_REG_BASE + i, 0x50]);
// } }
// for i in 0..4 { for i in 0..4 {
// i2c_send(&mut i2c_minus, NEG_DAC_2_ADDR, [DAC_REG_BASE + i, 0x50]); 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; let tmp_adc = adc::ADC1;
@ -91,12 +106,38 @@ async fn async_main(spawner: Spawner) {
adc_pin.setup(); adc_pin.setup();
let res = tmp_adc.start_conversion_sw(5); let res = tmp_adc.start_conversion_sw(5);
defmt::info!("adc value: {}", res); let mut vref:f32 = (res as f32/16383f32)*3.3;
defmt::info!("vref value: {}", vref);
let mut counter = 0;
loop { loop {
green.toggle(); s1.set_high();
// red.toggle(); if (counter == 60000){
let res = tmp_adc.start_conversion_sw(5);
let mut vpos : f32 = (res as f32 / 16383f32) * 3.3;
defmt::info!("pos pulse value: {}", vpos);
}
delay_ms(2);
s1.set_low();
delay_ms(1);
s2.set_high();
if (counter == 60000){
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{
counter += 1;
}
delay_ms(1);
s2.set_low();
delay_ms(6);
// green.toggle();
//red.toggle();
// delay_ms(1000); // delay_ms(1000);
// defmt::info!("toggle leds"); // defmt::info!("toggle leds");
} }