commit on july 30

This commit is contained in:
Connie 2024-07-30 12:48:18 -04:00
parent 424f0238b7
commit 51c86ea394

View File

@ -10,7 +10,7 @@ use u5_lib::{
clock::{self, delay_ms, delay_s, delay_us},
com_interface::ComInterface,
exti,
gpio::{self, GpioPort, TIM1_CH2_PA9,/*TIM1_CH3_PA10, */ TIM3_CH1_PA6},
gpio::{self, GpioPort, TIM1_CH2_PA9, /*TIM1_CH3_PA10,*/ TIM3_CH1_PA6},
i2c::{self, I2c},
low_power::{no_deep_sleep_request, Executor},
task,
@ -28,11 +28,11 @@ 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, 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 s1: gpio::GpioPort = gpio::PA9;
let s2: gpio::GpioPort = gpio::PA10;
let s3: gpio::GpioPort = gpio::PB4;
let s4: gpio::GpioPort = gpio::PB5;
@ -46,8 +46,7 @@ fn switch_led_setup() -> ( gpio::GpioPort, gpio::GpioPort, gpio::GpioPort, gpio:
green.setup();
red.setup();
s0.setup();
s0.setup();
// s1.setup();
s1.setup();
s2.setup();
s3.setup();
s4.setup();
@ -56,7 +55,7 @@ fn switch_led_setup() -> ( gpio::GpioPort, gpio::GpioPort, gpio::GpioPort, gpio:
s7.setup();
s8.setup();
chopper_clk.setup();
(green, red, s0, s2, s3, s4, s5, s7, s8, chopper_clk)
(green, red, s0, s1, s2, s3, s4, s5, s7, s8, chopper_clk)
}
@ -76,38 +75,38 @@ const NEG_DAC_2_ADDR: u16 = 0xE0;
const DAC_REG_BASE: u8 = 0xF8;
#[task]
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.
// 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::KernelFreq16Mhz);
unsafe {
no_deep_sleep_request();
}
TIM1_CH2_PA9.setup();
// TIM1_CH3_PA10.setup();
//TIM1_CH2_PA9.setup();
//TIM1_CH3_PA10.setup();
TIM3_CH1_PA6.setup();
let _ = TIM1.init(Config::default());
let _ = TIM3.init(Config::default());
//TIM1.set_pwm(1, 160, 80);
TIM1.set_pwm(2, 320, 160);
//TIM1.set_pwm(3, 160000, 80000);
//TIM1.set_pwm(2, 1600, 800);
//TIM1.set_pwm(3, 1600, 800);
TIM3.set_pwm(1, 16, 8);
// TIM3.set_pwm(2, 160, 80);
//TIM1.enable_output(1);
TIM1.enable_output(2);
//TIM1.enable_output(2);
//TIM1.enable_output(3);
TIM3.enable_output(1);
//TIM3.enable_output(2);
clock::set_mco(
gpio::GPIO_MCO_PA8,
clock::Mcosel::HSE,
clock::Mcopre::DIV8,
clock::Mcopre::DIV16,
); // clock. which use PA8 as clock output
defmt::info!("setup led finished!");
let (green, red, s0, s2, s3, s4, s5, s7, s8, chopper_clk) = switch_led_setup();
let (green, red, s0, s1, s2, s3, s4, s5, s7, s8, chopper_clk) = switch_led_setup();
s0.set_low();
//s1.set_low();
s1.set_low();
s2.set_low();
s3.set_high();
s4.set_low();
@ -126,12 +125,12 @@ async fn async_main(spawner: Spawner) {
//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, 0xD0]);
}
// 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!");
@ -152,61 +151,43 @@ async fn async_main(spawner: Spawner) {
defmt::info!("Vref init! {}", vref);
let vref = vref / 16384.0;
delay_s(1);
let mut adc_values = [0.0; 5];
let mut adc_indexer = 0;
let mut adc_sum = 0.0;
loop {
// s1.set_high();
// s2.set_high();
// delay_us(100);
// s2.set_low();
// delay_us(300);
// s1.set_low();
// s3.set_high();
// delay_us(600);
// s3.set_low();
// counter += 1;
// if counter >= 60000 {
// s8.set_high();
// delay_ms(10);
// s8.set_low();
// counter = 0;
// }
s2.set_high();
delay_us(100);
s2.set_low();
delay_us(100);
s1.set_high();
delay_us(200);
s1.set_low();
delay_us(600);
// s1.set_high();
// delay_us(10);
// for i in 0..12{
// s6.set_high();
// delay_us(5);
// s6.set_low();
// delay_us(5)
// }
counter += 1;
if counter >= 997 {
let res = tmp_adc.start_conversion_sw(5);
let vpos = res as f64 * vref;
adc_sum -= adc_values[adc_indexer];
adc_values[adc_indexer] = vpos;
adc_sum += vpos;
defmt::info!("adc average value: {}", adc_sum/4.0);
adc_indexer += 1;
adc_indexer %= 5;
if counter >= 1000{
TIM1_CH2_PA9.setup();
TIM1.set_pwm(2, 1600, 1580);
TIM1.enable_output(2);
//TIM1.set_pwm(2, 1600, 1550);
let mut adc_sum = 0.0;
for i in 0..5 {
let res = tmp_adc.start_conversion_sw(5);
let vpos = res as f64 * vref;
adc_sum += vpos;
}
counter = 0;
//TIM1.set_pwm(2, 1600, 800);
defmt::info!("adc average value: {}", adc_sum / 5.0);
if adc_sum / 5.0 > 0.5{ // the value should change accordingly
red.set_high();
}
else {
red.set_low();
}
}
// s1.set_low();
// delay_us(10);
// for i in 0..12{
// s6.set_high();
// delay_us(5);
// s6.set_low();
// delay_us(5)
// }
green.toggle();
// red.toggle();
delay_ms(1);
//delay_ms(1);
//defmt::info!("toggle leds");
}
}