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)
}
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 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 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)
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]) {
@ -59,30 +66,38 @@ 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::KernelFreq160Mhz);
no_deep_sleep_request();
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();
s2.set_high();
s3.set_low();
s4.set_low();
s5.set_low();
s2.set_low();
s3.set_high();
s4.set_high();
s5.set_high();
s7.set_low();
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]);
// }
// for i in 0..4{
// i2c_send(&mut i2c_plus, POS_DAC_2_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!");
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]);
}
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!");
let tmp_adc = adc::ADC1;
@ -91,11 +106,37 @@ async fn async_main(spawner: Spawner) {
adc_pin.setup();
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 {
green.toggle();
s1.set_high();
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);
// defmt::info!("toggle leds");