#![no_std] #![no_main] #![deny( clippy::mem_forget, reason = "mem::forget is generally not safe to do with esp_hal types, especially those \ holding buffers for the duration of a data transfer." )] use esp_hal::clock::CpuClock; use esp_hal::mcpwm::operator::PwmPinConfig; use esp_hal::mcpwm::timer::PwmWorkingMode; use esp_hal::time::Rate; use esp_hal::timer::timg::TimerGroup; use esp_hal::main; use esp_hal::time::{Duration, Instant}; use esp_hal::delay::Delay; use rtt_target::rprintln; #[panic_handler] fn panic(_: &core::panic::PanicInfo) -> ! { loop {} } extern crate alloc; // This creates a default app-descriptor required by the esp-idf bootloader. // For more information see: esp_bootloader_esp_idf::esp_app_desc!(); #[main] fn main() -> ! { // generator version: 1.0.1 rtt_target::rtt_init_print!(); let config = esp_hal::Config::default().with_cpu_clock(CpuClock::max()); let peripherals = esp_hal::init(config); let system = peripherals.SYSTEM; let mut delay = Delay::new(); esp_alloc::heap_allocator!(#[esp_hal::ram(reclaimed)] size: 65536); let clock_config = esp_hal::mcpwm::PeripheralClockConfig::with_frequency(Rate::from_mhz(32)).unwrap(); let mut mcpwm = esp_hal::mcpwm::McPwm::new(peripherals.MCPWM0, clock_config); mcpwm.operator0.set_timer(&mcpwm.timer0); let pin = peripherals.GPIO18; let mut pwm_pin = mcpwm.operator0.with_pin_a(pin, PwmPinConfig::UP_ACTIVE_HIGH); let timer_clock_cfg = clock_config .timer_clock_with_frequency(19_999, PwmWorkingMode::Increase, Rate::from_hz(50)) .unwrap(); mcpwm.timer0.start(timer_clock_cfg); pwm_pin.set_timestamp(1000); delay.delay_millis(3000); rprintln!("WUT?"); pwm_pin.set_timestamp(1121); delay.delay_millis(1000); pwm_pin.set_timestamp(1055); delay.delay_millis(3000); // Example: Ramp from 0% to 50% throttle //the afro esc starts turning at roughly setup gets a PWM at //loop{ // for pulse in 1120..1500 { // rprintln!("pulse:{}",pulse); // pwm_pin.set_timestamp(pulse); // Timer::after_millis(3000).await; // } // Timer::after_millis(1000).await; // // Return to idle // pwm_pin.set_timestamp(1000); // Timer::after_millis(1000).await; // } loop { rprintln!("Hello world!"); delay.delay_millis(3000); } // for inspiration have a look at the examples at https://github.com/esp-rs/esp-hal/tree/esp-hal-v1.0.0/examples/src/bin }