Merge branch 'master' into center-align
This commit is contained in:
		| @@ -6,7 +6,7 @@ use cortex_m::prelude::_embedded_hal_blocking_delay_DelayUs; | ||||
| use defmt::*; | ||||
| use embassy_executor::Spawner; | ||||
| use embassy_stm32::adc::{Adc, Temperature, VrefInt}; | ||||
| use embassy_time::{Delay, Duration, Timer}; | ||||
| use embassy_time::{Delay, Timer}; | ||||
| use {defmt_rtt as _, panic_probe as _}; | ||||
|  | ||||
| #[embassy_executor::main] | ||||
| @@ -63,6 +63,6 @@ async fn main(_spawner: Spawner) { | ||||
|         let v = adc.read(&mut vrefint); | ||||
|         info!("VrefInt: {}", v); | ||||
|  | ||||
|         Timer::after(Duration::from_millis(100)).await; | ||||
|         Timer::after_millis(100).await; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
| use defmt::*; | ||||
| use embassy_executor::Spawner; | ||||
| use embassy_stm32::gpio::{Level, Output, Speed}; | ||||
| use embassy_time::{Duration, Timer}; | ||||
| use embassy_time::Timer; | ||||
| use {defmt_rtt as _, panic_probe as _}; | ||||
|  | ||||
| #[embassy_executor::main] | ||||
| @@ -18,10 +18,10 @@ async fn main(_spawner: Spawner) { | ||||
|     loop { | ||||
|         info!("high"); | ||||
|         led.set_high(); | ||||
|         Timer::after(Duration::from_millis(300)).await; | ||||
|         Timer::after_millis(300).await; | ||||
|  | ||||
|         info!("low"); | ||||
|         led.set_low(); | ||||
|         Timer::after(Duration::from_millis(300)).await; | ||||
|         Timer::after_millis(300).await; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -10,9 +10,9 @@ use embassy_stm32::eth::generic_smi::GenericSMI; | ||||
| use embassy_stm32::eth::{Ethernet, PacketQueue}; | ||||
| use embassy_stm32::peripherals::ETH; | ||||
| use embassy_stm32::rng::Rng; | ||||
| use embassy_stm32::time::mhz; | ||||
| use embassy_stm32::time::Hertz; | ||||
| use embassy_stm32::{bind_interrupts, eth, peripherals, rng, Config}; | ||||
| use embassy_time::{Duration, Timer}; | ||||
| use embassy_time::Timer; | ||||
| use embedded_io_async::Write; | ||||
| use static_cell::make_static; | ||||
| use {defmt_rtt as _, panic_probe as _}; | ||||
| @@ -32,7 +32,25 @@ async fn net_task(stack: &'static Stack<Device>) -> ! { | ||||
| #[embassy_executor::main] | ||||
| async fn main(spawner: Spawner) -> ! { | ||||
|     let mut config = Config::default(); | ||||
|     config.rcc.sys_ck = Some(mhz(200)); | ||||
|     { | ||||
|         use embassy_stm32::rcc::*; | ||||
|         config.rcc.hse = Some(Hse { | ||||
|             freq: Hertz(8_000_000), | ||||
|             mode: HseMode::Bypass, | ||||
|         }); | ||||
|         config.rcc.pll_src = PllSource::HSE; | ||||
|         config.rcc.pll = Some(Pll { | ||||
|             prediv: PllPreDiv::DIV4, | ||||
|             mul: PllMul::MUL180, | ||||
|             divp: Some(Pllp::DIV2), // 8mhz / 4 * 180 / 2 = 180Mhz. | ||||
|             divq: None, | ||||
|             divr: None, | ||||
|         }); | ||||
|         config.rcc.ahb_pre = AHBPrescaler::DIV1; | ||||
|         config.rcc.apb1_pre = APBPrescaler::DIV4; | ||||
|         config.rcc.apb2_pre = APBPrescaler::DIV2; | ||||
|         config.rcc.sys = Sysclk::PLL1_P; | ||||
|     } | ||||
|     let p = embassy_stm32::init(config); | ||||
|  | ||||
|     info!("Hello World!"); | ||||
| @@ -58,9 +76,8 @@ async fn main(spawner: Spawner) -> ! { | ||||
|         p.PG13, | ||||
|         p.PB13, | ||||
|         p.PG11, | ||||
|         GenericSMI::new(), | ||||
|         GenericSMI::new(0), | ||||
|         mac_addr, | ||||
|         0, | ||||
|     ); | ||||
|  | ||||
|     let config = embassy_net::Config::dhcpv4(Default::default()); | ||||
| @@ -100,7 +117,7 @@ async fn main(spawner: Spawner) -> ! { | ||||
|         let r = socket.connect(remote_endpoint).await; | ||||
|         if let Err(e) = r { | ||||
|             info!("connect error: {:?}", e); | ||||
|             Timer::after(Duration::from_secs(1)).await; | ||||
|             Timer::after_secs(1).await; | ||||
|             continue; | ||||
|         } | ||||
|         info!("connected!"); | ||||
| @@ -111,7 +128,7 @@ async fn main(spawner: Spawner) -> ! { | ||||
|                 info!("write error: {:?}", e); | ||||
|                 break; | ||||
|             } | ||||
|             Timer::after(Duration::from_secs(1)).await; | ||||
|             Timer::after_secs(1).await; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -7,7 +7,7 @@ use embassy_executor::Spawner; | ||||
| use embassy_stm32::bind_interrupts; | ||||
| use embassy_stm32::flash::{Flash, InterruptHandler}; | ||||
| use embassy_stm32::gpio::{AnyPin, Level, Output, Pin, Speed}; | ||||
| use embassy_time::{Duration, Timer}; | ||||
| use embassy_time::Timer; | ||||
| use {defmt_rtt as _, panic_probe as _}; | ||||
|  | ||||
| bind_interrupts!(struct Irqs { | ||||
| @@ -35,11 +35,11 @@ async fn blinky(p: AnyPin) { | ||||
|     loop { | ||||
|         info!("high"); | ||||
|         led.set_high(); | ||||
|         Timer::after(Duration::from_millis(300)).await; | ||||
|         Timer::after_millis(300).await; | ||||
|  | ||||
|         info!("low"); | ||||
|         led.set_low(); | ||||
|         Timer::after(Duration::from_millis(300)).await; | ||||
|         Timer::after_millis(300).await; | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -4,19 +4,17 @@ | ||||
|  | ||||
| use defmt::info; | ||||
| use embassy_executor::Spawner; | ||||
| use embassy_stm32::time::Hertz; | ||||
| use embassy_stm32::Config; | ||||
| use embassy_time::{Duration, Timer}; | ||||
| use embassy_time::Timer; | ||||
| use {defmt_rtt as _, panic_probe as _}; | ||||
|  | ||||
| #[embassy_executor::main] | ||||
| async fn main(_spawner: Spawner) -> ! { | ||||
|     let mut config = Config::default(); | ||||
|     config.rcc.sys_ck = Some(Hertz(84_000_000)); | ||||
|     let config = Config::default(); | ||||
|     let _p = embassy_stm32::init(config); | ||||
|  | ||||
|     loop { | ||||
|         info!("Hello World!"); | ||||
|         Timer::after(Duration::from_secs(1)).await; | ||||
|         Timer::after_secs(1).await; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -5,10 +5,9 @@ | ||||
| use defmt::*; | ||||
| use embassy_executor::Spawner; | ||||
| use embassy_stm32::dma::NoDma; | ||||
| use embassy_stm32::i2c::{Error, I2c, TimeoutI2c}; | ||||
| use embassy_stm32::i2c::{Error, I2c}; | ||||
| use embassy_stm32::time::Hertz; | ||||
| use embassy_stm32::{bind_interrupts, i2c, peripherals}; | ||||
| use embassy_time::Duration; | ||||
| use {defmt_rtt as _, panic_probe as _}; | ||||
|  | ||||
| const ADDRESS: u8 = 0x5F; | ||||
| @@ -34,13 +33,9 @@ async fn main(_spawner: Spawner) { | ||||
|         Default::default(), | ||||
|     ); | ||||
|  | ||||
|     // I2C bus can freeze if SCL line is shorted or due to a broken device that clock stretches for too long. | ||||
|     // TimeoutI2c allows recovering from such errors by throwing `Error::Timeout` after a given delay. | ||||
|     let mut timeout_i2c = TimeoutI2c::new(&mut i2c, Duration::from_millis(1000)); | ||||
|  | ||||
|     let mut data = [0u8; 1]; | ||||
|  | ||||
|     match timeout_i2c.blocking_write_read(ADDRESS, &[WHOAMI], &mut data) { | ||||
|     match i2c.blocking_write_read(ADDRESS, &[WHOAMI], &mut data) { | ||||
|         Ok(()) => info!("Whoami: {}", data[0]), | ||||
|         Err(Error::Timeout) => error!("Operation timed out"), | ||||
|         Err(e) => error!("I2c Error: {:?}", e), | ||||
|   | ||||
| @@ -5,8 +5,8 @@ | ||||
| use defmt::*; | ||||
| use embassy_executor::Spawner; | ||||
| use embassy_stm32::gpio::{Level, Output, Speed}; | ||||
| use embassy_stm32::rcc::{Mco, Mco1Source, Mco2Source, McoClock}; | ||||
| use embassy_time::{Duration, Timer}; | ||||
| use embassy_stm32::rcc::{Mco, Mco1Source, Mco2Source, McoPrescaler}; | ||||
| use embassy_time::Timer; | ||||
| use {defmt_rtt as _, panic_probe as _}; | ||||
|  | ||||
| #[embassy_executor::main] | ||||
| @@ -14,17 +14,17 @@ async fn main(_spawner: Spawner) { | ||||
|     let p = embassy_stm32::init(Default::default()); | ||||
|     info!("Hello World!"); | ||||
|  | ||||
|     let _mco1 = Mco::new(p.MCO1, p.PA8, Mco1Source::Hsi, McoClock::DIV1); | ||||
|     let _mco2 = Mco::new(p.MCO2, p.PC9, Mco2Source::Pll, McoClock::DIV4); | ||||
|     let _mco1 = Mco::new(p.MCO1, p.PA8, Mco1Source::HSI, McoPrescaler::DIV1); | ||||
|     let _mco2 = Mco::new(p.MCO2, p.PC9, Mco2Source::PLL, McoPrescaler::DIV4); | ||||
|     let mut led = Output::new(p.PB7, Level::High, Speed::Low); | ||||
|  | ||||
|     loop { | ||||
|         info!("high"); | ||||
|         led.set_high(); | ||||
|         Timer::after(Duration::from_millis(300)).await; | ||||
|         Timer::after_millis(300).await; | ||||
|  | ||||
|         info!("low"); | ||||
|         led.set_low(); | ||||
|         Timer::after(Duration::from_millis(300)).await; | ||||
|         Timer::after_millis(300).await; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -62,7 +62,7 @@ use defmt::*; | ||||
| use embassy_executor::{Executor, InterruptExecutor}; | ||||
| use embassy_stm32::interrupt; | ||||
| use embassy_stm32::interrupt::{InterruptExt, Priority}; | ||||
| use embassy_time::{Duration, Instant, Timer}; | ||||
| use embassy_time::{Instant, Timer}; | ||||
| use static_cell::StaticCell; | ||||
| use {defmt_rtt as _, panic_probe as _}; | ||||
|  | ||||
| @@ -70,7 +70,7 @@ use {defmt_rtt as _, panic_probe as _}; | ||||
| async fn run_high() { | ||||
|     loop { | ||||
|         info!("        [high] tick!"); | ||||
|         Timer::after(Duration::from_ticks(27374)).await; | ||||
|         Timer::after_ticks(27374).await; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -87,7 +87,7 @@ async fn run_med() { | ||||
|         let ms = end.duration_since(start).as_ticks() / 33; | ||||
|         info!("    [med] done in {} ms", ms); | ||||
|  | ||||
|         Timer::after(Duration::from_ticks(23421)).await; | ||||
|         Timer::after_ticks(23421).await; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -104,7 +104,7 @@ async fn run_low() { | ||||
|         let ms = end.duration_since(start).as_ticks() / 33; | ||||
|         info!("[low] done in {} ms", ms); | ||||
|  | ||||
|         Timer::after(Duration::from_ticks(32983)).await; | ||||
|         Timer::after_ticks(32983).await; | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -8,7 +8,7 @@ use embassy_stm32::gpio::OutputType; | ||||
| use embassy_stm32::time::khz; | ||||
| use embassy_stm32::timer::simple_pwm::{PwmPin, SimplePwm}; | ||||
| use embassy_stm32::timer::Channel; | ||||
| use embassy_time::{Duration, Timer}; | ||||
| use embassy_time::Timer; | ||||
| use {defmt_rtt as _, panic_probe as _}; | ||||
|  | ||||
| #[embassy_executor::main] | ||||
| @@ -26,12 +26,12 @@ async fn main(_spawner: Spawner) { | ||||
|  | ||||
|     loop { | ||||
|         pwm.set_duty(Channel::Ch1, 0); | ||||
|         Timer::after(Duration::from_millis(300)).await; | ||||
|         Timer::after_millis(300).await; | ||||
|         pwm.set_duty(Channel::Ch1, max / 4); | ||||
|         Timer::after(Duration::from_millis(300)).await; | ||||
|         Timer::after_millis(300).await; | ||||
|         pwm.set_duty(Channel::Ch1, max / 2); | ||||
|         Timer::after(Duration::from_millis(300)).await; | ||||
|         Timer::after_millis(300).await; | ||||
|         pwm.set_duty(Channel::Ch1, max - 1); | ||||
|         Timer::after(Duration::from_millis(300)).await; | ||||
|         Timer::after_millis(300).await; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -9,7 +9,7 @@ use embassy_stm32::time::khz; | ||||
| use embassy_stm32::timer::complementary_pwm::{ComplementaryPwm, ComplementaryPwmPin}; | ||||
| use embassy_stm32::timer::simple_pwm::PwmPin; | ||||
| use embassy_stm32::timer::Channel; | ||||
| use embassy_time::{Duration, Timer}; | ||||
| use embassy_time::Timer; | ||||
| use {defmt_rtt as _, panic_probe as _}; | ||||
|  | ||||
| #[embassy_executor::main] | ||||
| @@ -43,12 +43,12 @@ async fn main(_spawner: Spawner) { | ||||
|  | ||||
|     loop { | ||||
|         pwm.set_duty(Channel::Ch1, 0); | ||||
|         Timer::after(Duration::from_millis(300)).await; | ||||
|         Timer::after_millis(300).await; | ||||
|         pwm.set_duty(Channel::Ch1, max / 4); | ||||
|         Timer::after(Duration::from_millis(300)).await; | ||||
|         Timer::after_millis(300).await; | ||||
|         pwm.set_duty(Channel::Ch1, max / 2); | ||||
|         Timer::after(Duration::from_millis(300)).await; | ||||
|         Timer::after_millis(300).await; | ||||
|         pwm.set_duty(Channel::Ch1, max - 1); | ||||
|         Timer::after(Duration::from_millis(300)).await; | ||||
|         Timer::after_millis(300).await; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -5,16 +5,14 @@ | ||||
| use chrono::{NaiveDate, NaiveDateTime}; | ||||
| use defmt::*; | ||||
| use embassy_executor::Spawner; | ||||
| use embassy_stm32::rtc::{Rtc, RtcClockSource, RtcConfig}; | ||||
| use embassy_stm32::rtc::{Rtc, RtcConfig}; | ||||
| use embassy_stm32::Config; | ||||
| use embassy_time::{Duration, Timer}; | ||||
| use embassy_time::Timer; | ||||
| use {defmt_rtt as _, panic_probe as _}; | ||||
|  | ||||
| #[embassy_executor::main] | ||||
| async fn main(_spawner: Spawner) { | ||||
|     let mut config = Config::default(); | ||||
|     config.rcc.lsi = true; | ||||
|     config.rcc.rtc = Option::Some(RtcClockSource::LSI); | ||||
|     let config = Config::default(); | ||||
|     let p = embassy_stm32::init(config); | ||||
|  | ||||
|     info!("Hello World!"); | ||||
| @@ -33,6 +31,6 @@ async fn main(_spawner: Spawner) { | ||||
|  | ||||
|         info!("{}", now.timestamp()); | ||||
|  | ||||
|         Timer::after(Duration::from_millis(1000)).await; | ||||
|         Timer::after_millis(1000).await; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
| use defmt::*; | ||||
| use embassy_executor::Spawner; | ||||
| use embassy_stm32::sdmmc::{DataBlock, Sdmmc}; | ||||
| use embassy_stm32::time::mhz; | ||||
| use embassy_stm32::time::{mhz, Hertz}; | ||||
| use embassy_stm32::{bind_interrupts, peripherals, sdmmc, Config}; | ||||
| use {defmt_rtt as _, panic_probe as _}; | ||||
|  | ||||
| @@ -20,8 +20,25 @@ bind_interrupts!(struct Irqs { | ||||
| #[embassy_executor::main] | ||||
| async fn main(_spawner: Spawner) { | ||||
|     let mut config = Config::default(); | ||||
|     config.rcc.sys_ck = Some(mhz(48)); | ||||
|     config.rcc.pll48 = true; | ||||
|     { | ||||
|         use embassy_stm32::rcc::*; | ||||
|         config.rcc.hse = Some(Hse { | ||||
|             freq: Hertz(8_000_000), | ||||
|             mode: HseMode::Bypass, | ||||
|         }); | ||||
|         config.rcc.pll_src = PllSource::HSE; | ||||
|         config.rcc.pll = Some(Pll { | ||||
|             prediv: PllPreDiv::DIV4, | ||||
|             mul: PllMul::MUL168, | ||||
|             divp: Some(Pllp::DIV2), // 8mhz / 4 * 168 / 2 = 168Mhz. | ||||
|             divq: Some(Pllq::DIV7), // 8mhz / 4 * 168 / 7 = 48Mhz. | ||||
|             divr: None, | ||||
|         }); | ||||
|         config.rcc.ahb_pre = AHBPrescaler::DIV1; | ||||
|         config.rcc.apb1_pre = APBPrescaler::DIV4; | ||||
|         config.rcc.apb2_pre = APBPrescaler::DIV2; | ||||
|         config.rcc.sys = Sysclk::PLL1_P; | ||||
|     } | ||||
|     let p = embassy_stm32::init(config); | ||||
|     info!("Hello World!"); | ||||
|  | ||||
|   | ||||
| @@ -7,7 +7,7 @@ use embassy_executor::Spawner; | ||||
| use embassy_net::tcp::TcpSocket; | ||||
| use embassy_net::{Stack, StackResources}; | ||||
| use embassy_stm32::rng::{self, Rng}; | ||||
| use embassy_stm32::time::mhz; | ||||
| use embassy_stm32::time::Hertz; | ||||
| use embassy_stm32::usb_otg::Driver; | ||||
| use embassy_stm32::{bind_interrupts, peripherals, usb_otg, Config}; | ||||
| use embassy_usb::class::cdc_ncm::embassy_net::{Device, Runner, State as NetState}; | ||||
| @@ -46,9 +46,25 @@ async fn main(spawner: Spawner) { | ||||
|     info!("Hello World!"); | ||||
|  | ||||
|     let mut config = Config::default(); | ||||
|     config.rcc.pll48 = true; | ||||
|     config.rcc.sys_ck = Some(mhz(48)); | ||||
|  | ||||
|     { | ||||
|         use embassy_stm32::rcc::*; | ||||
|         config.rcc.hse = Some(Hse { | ||||
|             freq: Hertz(8_000_000), | ||||
|             mode: HseMode::Bypass, | ||||
|         }); | ||||
|         config.rcc.pll_src = PllSource::HSE; | ||||
|         config.rcc.pll = Some(Pll { | ||||
|             prediv: PllPreDiv::DIV4, | ||||
|             mul: PllMul::MUL168, | ||||
|             divp: Some(Pllp::DIV2), // 8mhz / 4 * 168 / 2 = 168Mhz. | ||||
|             divq: Some(Pllq::DIV7), // 8mhz / 4 * 168 / 7 = 48Mhz. | ||||
|             divr: None, | ||||
|         }); | ||||
|         config.rcc.ahb_pre = AHBPrescaler::DIV1; | ||||
|         config.rcc.apb1_pre = APBPrescaler::DIV4; | ||||
|         config.rcc.apb2_pre = APBPrescaler::DIV2; | ||||
|         config.rcc.sys = Sysclk::PLL1_P; | ||||
|     } | ||||
|     let p = embassy_stm32::init(config); | ||||
|  | ||||
|     // Create the driver, from the HAL. | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|  | ||||
| use defmt::{panic, *}; | ||||
| use embassy_executor::Spawner; | ||||
| use embassy_stm32::time::mhz; | ||||
| use embassy_stm32::time::Hertz; | ||||
| use embassy_stm32::usb_otg::{Driver, Instance}; | ||||
| use embassy_stm32::{bind_interrupts, peripherals, usb_otg, Config}; | ||||
| use embassy_usb::class::cdc_acm::{CdcAcmClass, State}; | ||||
| @@ -22,9 +22,25 @@ async fn main(_spawner: Spawner) { | ||||
|     info!("Hello World!"); | ||||
|  | ||||
|     let mut config = Config::default(); | ||||
|     config.rcc.pll48 = true; | ||||
|     config.rcc.sys_ck = Some(mhz(48)); | ||||
|  | ||||
|     { | ||||
|         use embassy_stm32::rcc::*; | ||||
|         config.rcc.hse = Some(Hse { | ||||
|             freq: Hertz(8_000_000), | ||||
|             mode: HseMode::Bypass, | ||||
|         }); | ||||
|         config.rcc.pll_src = PllSource::HSE; | ||||
|         config.rcc.pll = Some(Pll { | ||||
|             prediv: PllPreDiv::DIV4, | ||||
|             mul: PllMul::MUL168, | ||||
|             divp: Some(Pllp::DIV2), // 8mhz / 4 * 168 / 2 = 168Mhz. | ||||
|             divq: Some(Pllq::DIV7), // 8mhz / 4 * 168 / 7 = 48Mhz. | ||||
|             divr: None, | ||||
|         }); | ||||
|         config.rcc.ahb_pre = AHBPrescaler::DIV1; | ||||
|         config.rcc.apb1_pre = APBPrescaler::DIV4; | ||||
|         config.rcc.apb2_pre = APBPrescaler::DIV2; | ||||
|         config.rcc.sys = Sysclk::PLL1_P; | ||||
|     } | ||||
|     let p = embassy_stm32::init(config); | ||||
|  | ||||
|     // Create the driver, from the HAL. | ||||
|   | ||||
| @@ -6,7 +6,7 @@ use defmt::*; | ||||
| use embassy_executor::Spawner; | ||||
| use embassy_stm32::gpio::{Level, Output, Speed}; | ||||
| use embassy_stm32::wdg::IndependentWatchdog; | ||||
| use embassy_time::{Duration, Timer}; | ||||
| use embassy_time::Timer; | ||||
| use {defmt_rtt as _, panic_probe as _}; | ||||
|  | ||||
| #[embassy_executor::main] | ||||
| @@ -24,11 +24,11 @@ async fn main(_spawner: Spawner) { | ||||
|     loop { | ||||
|         info!("high"); | ||||
|         led.set_high(); | ||||
|         Timer::after(Duration::from_millis(300)).await; | ||||
|         Timer::after_millis(300).await; | ||||
|  | ||||
|         info!("low"); | ||||
|         led.set_low(); | ||||
|         Timer::after(Duration::from_millis(300)).await; | ||||
|         Timer::after_millis(300).await; | ||||
|  | ||||
|         // Pet watchdog for 5 iterations and then stop. | ||||
|         // MCU should restart in 1 second after the last pet. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user