diff options
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/stm32f4/src/bin/eth.rs | 3 | ||||
| -rw-r--r-- | examples/stm32f7/src/bin/eth.rs | 3 | ||||
| -rw-r--r-- | examples/stm32h5/src/bin/eth.rs | 4 | ||||
| -rw-r--r-- | examples/stm32h5/src/bin/usb_serial.rs | 2 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/adc.rs | 34 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/camera.rs | 33 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/dac.rs | 32 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/dac_dma.rs | 33 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/eth.rs | 28 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/eth_client.rs | 27 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/fmc.rs | 24 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/low_level_timer_api.rs | 30 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/mco.rs | 4 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/pwm.rs | 29 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/rng.rs | 6 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/sdmmc.rs | 21 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/spi.rs | 23 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/spi_dma.rs | 23 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/usb_serial.rs | 25 |
19 files changed, 310 insertions, 74 deletions
diff --git a/examples/stm32f4/src/bin/eth.rs b/examples/stm32f4/src/bin/eth.rs index 5f1e62d0a..16bf5d949 100644 --- a/examples/stm32f4/src/bin/eth.rs +++ b/examples/stm32f4/src/bin/eth.rs | |||
| @@ -100,6 +100,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 100 | let r = socket.connect(remote_endpoint).await; | 100 | let r = socket.connect(remote_endpoint).await; |
| 101 | if let Err(e) = r { | 101 | if let Err(e) = r { |
| 102 | info!("connect error: {:?}", e); | 102 | info!("connect error: {:?}", e); |
| 103 | Timer::after(Duration::from_secs(1)).await; | ||
| 103 | continue; | 104 | continue; |
| 104 | } | 105 | } |
| 105 | info!("connected!"); | 106 | info!("connected!"); |
| @@ -108,7 +109,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 108 | let r = socket.write_all(&buf).await; | 109 | let r = socket.write_all(&buf).await; |
| 109 | if let Err(e) = r { | 110 | if let Err(e) = r { |
| 110 | info!("write error: {:?}", e); | 111 | info!("write error: {:?}", e); |
| 111 | continue; | 112 | break; |
| 112 | } | 113 | } |
| 113 | Timer::after(Duration::from_secs(1)).await; | 114 | Timer::after(Duration::from_secs(1)).await; |
| 114 | } | 115 | } |
diff --git a/examples/stm32f7/src/bin/eth.rs b/examples/stm32f7/src/bin/eth.rs index 01c38106e..93c97c8ee 100644 --- a/examples/stm32f7/src/bin/eth.rs +++ b/examples/stm32f7/src/bin/eth.rs | |||
| @@ -101,6 +101,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 101 | let r = socket.connect(remote_endpoint).await; | 101 | let r = socket.connect(remote_endpoint).await; |
| 102 | if let Err(e) = r { | 102 | if let Err(e) = r { |
| 103 | info!("connect error: {:?}", e); | 103 | info!("connect error: {:?}", e); |
| 104 | Timer::after(Duration::from_secs(1)).await; | ||
| 104 | continue; | 105 | continue; |
| 105 | } | 106 | } |
| 106 | info!("connected!"); | 107 | info!("connected!"); |
| @@ -109,7 +110,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 109 | let r = socket.write_all(&buf).await; | 110 | let r = socket.write_all(&buf).await; |
| 110 | if let Err(e) = r { | 111 | if let Err(e) = r { |
| 111 | info!("write error: {:?}", e); | 112 | info!("write error: {:?}", e); |
| 112 | continue; | 113 | break; |
| 113 | } | 114 | } |
| 114 | Timer::after(Duration::from_secs(1)).await; | 115 | Timer::after(Duration::from_secs(1)).await; |
| 115 | } | 116 | } |
diff --git a/examples/stm32h5/src/bin/eth.rs b/examples/stm32h5/src/bin/eth.rs index 41ef2acaa..4e92d0647 100644 --- a/examples/stm32h5/src/bin/eth.rs +++ b/examples/stm32h5/src/bin/eth.rs | |||
| @@ -53,7 +53,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 53 | config.rcc.apb2_pre = APBPrescaler::DIV1; | 53 | config.rcc.apb2_pre = APBPrescaler::DIV1; |
| 54 | config.rcc.apb3_pre = APBPrescaler::DIV1; | 54 | config.rcc.apb3_pre = APBPrescaler::DIV1; |
| 55 | config.rcc.sys = Sysclk::Pll1P; | 55 | config.rcc.sys = Sysclk::Pll1P; |
| 56 | config.rcc.voltage_scale = VoltageScale::SCALE0; | 56 | config.rcc.voltage_scale = VoltageScale::Scale0; |
| 57 | let p = embassy_stm32::init(config); | 57 | let p = embassy_stm32::init(config); |
| 58 | info!("Hello World!"); | 58 | info!("Hello World!"); |
| 59 | 59 | ||
| @@ -128,7 +128,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 128 | let r = socket.write_all(b"Hello\n").await; | 128 | let r = socket.write_all(b"Hello\n").await; |
| 129 | if let Err(e) = r { | 129 | if let Err(e) = r { |
| 130 | info!("write error: {:?}", e); | 130 | info!("write error: {:?}", e); |
| 131 | continue; | 131 | break; |
| 132 | } | 132 | } |
| 133 | Timer::after(Duration::from_secs(1)).await; | 133 | Timer::after(Duration::from_secs(1)).await; |
| 134 | } | 134 | } |
diff --git a/examples/stm32h5/src/bin/usb_serial.rs b/examples/stm32h5/src/bin/usb_serial.rs index 63c694aff..cbe540a06 100644 --- a/examples/stm32h5/src/bin/usb_serial.rs +++ b/examples/stm32h5/src/bin/usb_serial.rs | |||
| @@ -40,7 +40,7 @@ async fn main(_spawner: Spawner) { | |||
| 40 | config.rcc.apb2_pre = APBPrescaler::DIV2; | 40 | config.rcc.apb2_pre = APBPrescaler::DIV2; |
| 41 | config.rcc.apb3_pre = APBPrescaler::DIV4; | 41 | config.rcc.apb3_pre = APBPrescaler::DIV4; |
| 42 | config.rcc.sys = Sysclk::Pll1P; | 42 | config.rcc.sys = Sysclk::Pll1P; |
| 43 | config.rcc.voltage_scale = VoltageScale::SCALE0; | 43 | config.rcc.voltage_scale = VoltageScale::Scale0; |
| 44 | let p = embassy_stm32::init(config); | 44 | let p = embassy_stm32::init(config); |
| 45 | 45 | ||
| 46 | info!("Hello World!"); | 46 | info!("Hello World!"); |
diff --git a/examples/stm32h7/src/bin/adc.rs b/examples/stm32h7/src/bin/adc.rs index 0e1e28c72..77922d4bc 100644 --- a/examples/stm32h7/src/bin/adc.rs +++ b/examples/stm32h7/src/bin/adc.rs | |||
| @@ -5,8 +5,6 @@ | |||
| 5 | use defmt::*; | 5 | use defmt::*; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::adc::{Adc, SampleTime}; | 7 | use embassy_stm32::adc::{Adc, SampleTime}; |
| 8 | use embassy_stm32::rcc::AdcClockSource; | ||
| 9 | use embassy_stm32::time::mhz; | ||
| 10 | use embassy_stm32::Config; | 8 | use embassy_stm32::Config; |
| 11 | use embassy_time::{Delay, Duration, Timer}; | 9 | use embassy_time::{Delay, Duration, Timer}; |
| 12 | use {defmt_rtt as _, panic_probe as _}; | 10 | use {defmt_rtt as _, panic_probe as _}; |
| @@ -14,10 +12,34 @@ use {defmt_rtt as _, panic_probe as _}; | |||
| 14 | #[embassy_executor::main] | 12 | #[embassy_executor::main] |
| 15 | async fn main(_spawner: Spawner) { | 13 | async fn main(_spawner: Spawner) { |
| 16 | let mut config = Config::default(); | 14 | let mut config = Config::default(); |
| 17 | config.rcc.sys_ck = Some(mhz(400)); | 15 | { |
| 18 | config.rcc.hclk = Some(mhz(200)); | 16 | use embassy_stm32::rcc::*; |
| 19 | config.rcc.per_ck = Some(mhz(64)); | 17 | config.rcc.hsi = Some(Hsi::Mhz64); |
| 20 | config.rcc.adc_clock_source = AdcClockSource::PerCk; | 18 | config.rcc.csi = true; |
| 19 | config.rcc.pll_src = PllSource::Hsi; | ||
| 20 | config.rcc.pll1 = Some(Pll { | ||
| 21 | prediv: 4, | ||
| 22 | mul: 50, | ||
| 23 | divp: Some(2), | ||
| 24 | divq: Some(8), // SPI1 cksel defaults to pll1_q | ||
| 25 | divr: None, | ||
| 26 | }); | ||
| 27 | config.rcc.pll2 = Some(Pll { | ||
| 28 | prediv: 4, | ||
| 29 | mul: 50, | ||
| 30 | divp: Some(8), // 100mhz | ||
| 31 | divq: None, | ||
| 32 | divr: None, | ||
| 33 | }); | ||
| 34 | config.rcc.sys = Sysclk::Pll1P; // 400 Mhz | ||
| 35 | config.rcc.ahb_pre = AHBPrescaler::DIV2; // 200 Mhz | ||
| 36 | config.rcc.apb1_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 37 | config.rcc.apb2_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 38 | config.rcc.apb3_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 39 | config.rcc.apb4_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 40 | config.rcc.voltage_scale = VoltageScale::Scale1; | ||
| 41 | config.rcc.adc_clock_source = AdcClockSource::PLL2_P; | ||
| 42 | } | ||
| 21 | let mut p = embassy_stm32::init(config); | 43 | let mut p = embassy_stm32::init(config); |
| 22 | 44 | ||
| 23 | info!("Hello World!"); | 45 | info!("Hello World!"); |
diff --git a/examples/stm32h7/src/bin/camera.rs b/examples/stm32h7/src/bin/camera.rs index 6f75a0630..de8ddc292 100644 --- a/examples/stm32h7/src/bin/camera.rs +++ b/examples/stm32h7/src/bin/camera.rs | |||
| @@ -6,8 +6,8 @@ use embassy_executor::Spawner; | |||
| 6 | use embassy_stm32::dcmi::{self, *}; | 6 | use embassy_stm32::dcmi::{self, *}; |
| 7 | use embassy_stm32::gpio::{Level, Output, Speed}; | 7 | use embassy_stm32::gpio::{Level, Output, Speed}; |
| 8 | use embassy_stm32::i2c::I2c; | 8 | use embassy_stm32::i2c::I2c; |
| 9 | use embassy_stm32::rcc::{Mco, Mco1Source, McoClock}; | 9 | use embassy_stm32::rcc::{Mco, Mco1Source}; |
| 10 | use embassy_stm32::time::{khz, mhz}; | 10 | use embassy_stm32::time::khz; |
| 11 | use embassy_stm32::{bind_interrupts, i2c, peripherals, Config}; | 11 | use embassy_stm32::{bind_interrupts, i2c, peripherals, Config}; |
| 12 | use embassy_time::{Duration, Timer}; | 12 | use embassy_time::{Duration, Timer}; |
| 13 | use ov7725::*; | 13 | use ov7725::*; |
| @@ -26,17 +26,30 @@ bind_interrupts!(struct Irqs { | |||
| 26 | #[embassy_executor::main] | 26 | #[embassy_executor::main] |
| 27 | async fn main(_spawner: Spawner) { | 27 | async fn main(_spawner: Spawner) { |
| 28 | let mut config = Config::default(); | 28 | let mut config = Config::default(); |
| 29 | config.rcc.sys_ck = Some(mhz(400)); | 29 | { |
| 30 | config.rcc.hclk = Some(mhz(400)); | 30 | use embassy_stm32::rcc::*; |
| 31 | config.rcc.pll1.q_ck = Some(mhz(100)); | 31 | config.rcc.hsi = Some(Hsi::Mhz64); |
| 32 | config.rcc.pclk1 = Some(mhz(100)); | 32 | config.rcc.csi = true; |
| 33 | config.rcc.pclk2 = Some(mhz(100)); | 33 | config.rcc.pll_src = PllSource::Hsi; |
| 34 | config.rcc.pclk3 = Some(mhz(100)); | 34 | config.rcc.pll1 = Some(Pll { |
| 35 | config.rcc.pclk4 = Some(mhz(100)); | 35 | prediv: 4, |
| 36 | mul: 50, | ||
| 37 | divp: Some(2), | ||
| 38 | divq: Some(8), // 100mhz | ||
| 39 | divr: None, | ||
| 40 | }); | ||
| 41 | config.rcc.sys = Sysclk::Pll1P; // 400 Mhz | ||
| 42 | config.rcc.ahb_pre = AHBPrescaler::DIV2; // 200 Mhz | ||
| 43 | config.rcc.apb1_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 44 | config.rcc.apb2_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 45 | config.rcc.apb3_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 46 | config.rcc.apb4_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 47 | config.rcc.voltage_scale = VoltageScale::Scale1; | ||
| 48 | } | ||
| 36 | let p = embassy_stm32::init(config); | 49 | let p = embassy_stm32::init(config); |
| 37 | 50 | ||
| 38 | defmt::info!("Hello World!"); | 51 | defmt::info!("Hello World!"); |
| 39 | let mco = Mco::new(p.MCO1, p.PA8, Mco1Source::Hsi, McoClock::Divided(3)); | 52 | let mco = Mco::new(p.MCO1, p.PA8, Mco1Source::HSI, 3); |
| 40 | 53 | ||
| 41 | let mut led = Output::new(p.PE3, Level::High, Speed::Low); | 54 | let mut led = Output::new(p.PE3, Level::High, Speed::Low); |
| 42 | let cam_i2c = I2c::new( | 55 | let cam_i2c = I2c::new( |
diff --git a/examples/stm32h7/src/bin/dac.rs b/examples/stm32h7/src/bin/dac.rs index ee078286b..93df7a319 100644 --- a/examples/stm32h7/src/bin/dac.rs +++ b/examples/stm32h7/src/bin/dac.rs | |||
| @@ -6,7 +6,6 @@ use cortex_m_rt::entry; | |||
| 6 | use defmt::*; | 6 | use defmt::*; |
| 7 | use embassy_stm32::dac::{DacCh1, DacChannel, Value}; | 7 | use embassy_stm32::dac::{DacCh1, DacChannel, Value}; |
| 8 | use embassy_stm32::dma::NoDma; | 8 | use embassy_stm32::dma::NoDma; |
| 9 | use embassy_stm32::time::mhz; | ||
| 10 | use embassy_stm32::Config; | 9 | use embassy_stm32::Config; |
| 11 | use {defmt_rtt as _, panic_probe as _}; | 10 | use {defmt_rtt as _, panic_probe as _}; |
| 12 | 11 | ||
| @@ -15,9 +14,34 @@ fn main() -> ! { | |||
| 15 | info!("Hello World, dude!"); | 14 | info!("Hello World, dude!"); |
| 16 | 15 | ||
| 17 | let mut config = Config::default(); | 16 | let mut config = Config::default(); |
| 18 | config.rcc.sys_ck = Some(mhz(400)); | 17 | { |
| 19 | config.rcc.hclk = Some(mhz(200)); | 18 | use embassy_stm32::rcc::*; |
| 20 | config.rcc.pll1.q_ck = Some(mhz(100)); | 19 | config.rcc.hsi = Some(Hsi::Mhz64); |
| 20 | config.rcc.csi = true; | ||
| 21 | config.rcc.pll_src = PllSource::Hsi; | ||
| 22 | config.rcc.pll1 = Some(Pll { | ||
| 23 | prediv: 4, | ||
| 24 | mul: 50, | ||
| 25 | divp: Some(2), | ||
| 26 | divq: Some(8), // SPI1 cksel defaults to pll1_q | ||
| 27 | divr: None, | ||
| 28 | }); | ||
| 29 | config.rcc.pll2 = Some(Pll { | ||
| 30 | prediv: 4, | ||
| 31 | mul: 50, | ||
| 32 | divp: Some(8), // 100mhz | ||
| 33 | divq: None, | ||
| 34 | divr: None, | ||
| 35 | }); | ||
| 36 | config.rcc.sys = Sysclk::Pll1P; // 400 Mhz | ||
| 37 | config.rcc.ahb_pre = AHBPrescaler::DIV2; // 200 Mhz | ||
| 38 | config.rcc.apb1_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 39 | config.rcc.apb2_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 40 | config.rcc.apb3_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 41 | config.rcc.apb4_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 42 | config.rcc.voltage_scale = VoltageScale::Scale1; | ||
| 43 | config.rcc.adc_clock_source = AdcClockSource::PLL2_P; | ||
| 44 | } | ||
| 21 | let p = embassy_stm32::init(config); | 45 | let p = embassy_stm32::init(config); |
| 22 | 46 | ||
| 23 | let mut dac = DacCh1::new(p.DAC1, NoDma, p.PA4); | 47 | let mut dac = DacCh1::new(p.DAC1, NoDma, p.PA4); |
diff --git a/examples/stm32h7/src/bin/dac_dma.rs b/examples/stm32h7/src/bin/dac_dma.rs index a9cb5d1ed..8c921abca 100644 --- a/examples/stm32h7/src/bin/dac_dma.rs +++ b/examples/stm32h7/src/bin/dac_dma.rs | |||
| @@ -8,7 +8,7 @@ use embassy_stm32::dac::{DacChannel, ValueArray}; | |||
| 8 | use embassy_stm32::pac::timer::vals::{Mms, Opm}; | 8 | use embassy_stm32::pac::timer::vals::{Mms, Opm}; |
| 9 | use embassy_stm32::peripherals::{TIM6, TIM7}; | 9 | use embassy_stm32::peripherals::{TIM6, TIM7}; |
| 10 | use embassy_stm32::rcc::low_level::RccPeripheral; | 10 | use embassy_stm32::rcc::low_level::RccPeripheral; |
| 11 | use embassy_stm32::time::{mhz, Hertz}; | 11 | use embassy_stm32::time::Hertz; |
| 12 | use embassy_stm32::timer::low_level::Basic16bitInstance; | 12 | use embassy_stm32::timer::low_level::Basic16bitInstance; |
| 13 | use micromath::F32Ext; | 13 | use micromath::F32Ext; |
| 14 | use {defmt_rtt as _, panic_probe as _}; | 14 | use {defmt_rtt as _, panic_probe as _}; |
| @@ -22,9 +22,34 @@ pub type Dac2Type = | |||
| 22 | #[embassy_executor::main] | 22 | #[embassy_executor::main] |
| 23 | async fn main(spawner: Spawner) { | 23 | async fn main(spawner: Spawner) { |
| 24 | let mut config = embassy_stm32::Config::default(); | 24 | let mut config = embassy_stm32::Config::default(); |
| 25 | config.rcc.sys_ck = Some(mhz(400)); | 25 | { |
| 26 | config.rcc.hclk = Some(mhz(100)); | 26 | use embassy_stm32::rcc::*; |
| 27 | config.rcc.pll1.q_ck = Some(mhz(100)); | 27 | config.rcc.hsi = Some(Hsi::Mhz64); |
| 28 | config.rcc.csi = true; | ||
| 29 | config.rcc.pll_src = PllSource::Hsi; | ||
| 30 | config.rcc.pll1 = Some(Pll { | ||
| 31 | prediv: 4, | ||
| 32 | mul: 50, | ||
| 33 | divp: Some(2), | ||
| 34 | divq: Some(8), // SPI1 cksel defaults to pll1_q | ||
| 35 | divr: None, | ||
| 36 | }); | ||
| 37 | config.rcc.pll2 = Some(Pll { | ||
| 38 | prediv: 4, | ||
| 39 | mul: 50, | ||
| 40 | divp: Some(8), // 100mhz | ||
| 41 | divq: None, | ||
| 42 | divr: None, | ||
| 43 | }); | ||
| 44 | config.rcc.sys = Sysclk::Pll1P; // 400 Mhz | ||
| 45 | config.rcc.ahb_pre = AHBPrescaler::DIV2; // 200 Mhz | ||
| 46 | config.rcc.apb1_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 47 | config.rcc.apb2_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 48 | config.rcc.apb3_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 49 | config.rcc.apb4_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 50 | config.rcc.voltage_scale = VoltageScale::Scale1; | ||
| 51 | config.rcc.adc_clock_source = AdcClockSource::PLL2_P; | ||
| 52 | } | ||
| 28 | 53 | ||
| 29 | // Initialize the board and obtain a Peripherals instance | 54 | // Initialize the board and obtain a Peripherals instance |
| 30 | let p: embassy_stm32::Peripherals = embassy_stm32::init(config); | 55 | let p: embassy_stm32::Peripherals = embassy_stm32::init(config); |
diff --git a/examples/stm32h7/src/bin/eth.rs b/examples/stm32h7/src/bin/eth.rs index e691c6d06..1b5d71ed3 100644 --- a/examples/stm32h7/src/bin/eth.rs +++ b/examples/stm32h7/src/bin/eth.rs | |||
| @@ -10,7 +10,6 @@ use embassy_stm32::eth::generic_smi::GenericSMI; | |||
| 10 | use embassy_stm32::eth::{Ethernet, PacketQueue}; | 10 | use embassy_stm32::eth::{Ethernet, PacketQueue}; |
| 11 | use embassy_stm32::peripherals::ETH; | 11 | use embassy_stm32::peripherals::ETH; |
| 12 | use embassy_stm32::rng::Rng; | 12 | use embassy_stm32::rng::Rng; |
| 13 | use embassy_stm32::time::mhz; | ||
| 14 | use embassy_stm32::{bind_interrupts, eth, peripherals, rng, Config}; | 13 | use embassy_stm32::{bind_interrupts, eth, peripherals, rng, Config}; |
| 15 | use embassy_time::{Duration, Timer}; | 14 | use embassy_time::{Duration, Timer}; |
| 16 | use embedded_io_async::Write; | 15 | use embedded_io_async::Write; |
| @@ -33,9 +32,27 @@ async fn net_task(stack: &'static Stack<Device>) -> ! { | |||
| 33 | #[embassy_executor::main] | 32 | #[embassy_executor::main] |
| 34 | async fn main(spawner: Spawner) -> ! { | 33 | async fn main(spawner: Spawner) -> ! { |
| 35 | let mut config = Config::default(); | 34 | let mut config = Config::default(); |
| 36 | config.rcc.sys_ck = Some(mhz(400)); | 35 | { |
| 37 | config.rcc.hclk = Some(mhz(200)); | 36 | use embassy_stm32::rcc::*; |
| 38 | config.rcc.pll1.q_ck = Some(mhz(100)); | 37 | config.rcc.hsi = Some(Hsi::Mhz64); |
| 38 | config.rcc.csi = true; | ||
| 39 | config.rcc.hsi48 = true; // needed for RNG | ||
| 40 | config.rcc.pll_src = PllSource::Hsi; | ||
| 41 | config.rcc.pll1 = Some(Pll { | ||
| 42 | prediv: 4, | ||
| 43 | mul: 50, | ||
| 44 | divp: Some(2), | ||
| 45 | divq: None, | ||
| 46 | divr: None, | ||
| 47 | }); | ||
| 48 | config.rcc.sys = Sysclk::Pll1P; // 400 Mhz | ||
| 49 | config.rcc.ahb_pre = AHBPrescaler::DIV2; // 200 Mhz | ||
| 50 | config.rcc.apb1_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 51 | config.rcc.apb2_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 52 | config.rcc.apb3_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 53 | config.rcc.apb4_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 54 | config.rcc.voltage_scale = VoltageScale::Scale1; | ||
| 55 | } | ||
| 39 | let p = embassy_stm32::init(config); | 56 | let p = embassy_stm32::init(config); |
| 40 | info!("Hello World!"); | 57 | info!("Hello World!"); |
| 41 | 58 | ||
| @@ -102,6 +119,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 102 | let r = socket.connect(remote_endpoint).await; | 119 | let r = socket.connect(remote_endpoint).await; |
| 103 | if let Err(e) = r { | 120 | if let Err(e) = r { |
| 104 | info!("connect error: {:?}", e); | 121 | info!("connect error: {:?}", e); |
| 122 | Timer::after(Duration::from_secs(1)).await; | ||
| 105 | continue; | 123 | continue; |
| 106 | } | 124 | } |
| 107 | info!("connected!"); | 125 | info!("connected!"); |
| @@ -109,7 +127,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 109 | let r = socket.write_all(b"Hello\n").await; | 127 | let r = socket.write_all(b"Hello\n").await; |
| 110 | if let Err(e) = r { | 128 | if let Err(e) = r { |
| 111 | info!("write error: {:?}", e); | 129 | info!("write error: {:?}", e); |
| 112 | continue; | 130 | break; |
| 113 | } | 131 | } |
| 114 | Timer::after(Duration::from_secs(1)).await; | 132 | Timer::after(Duration::from_secs(1)).await; |
| 115 | } | 133 | } |
diff --git a/examples/stm32h7/src/bin/eth_client.rs b/examples/stm32h7/src/bin/eth_client.rs index ebef54c3c..3abd31c73 100644 --- a/examples/stm32h7/src/bin/eth_client.rs +++ b/examples/stm32h7/src/bin/eth_client.rs | |||
| @@ -10,7 +10,6 @@ use embassy_stm32::eth::generic_smi::GenericSMI; | |||
| 10 | use embassy_stm32::eth::{Ethernet, PacketQueue}; | 10 | use embassy_stm32::eth::{Ethernet, PacketQueue}; |
| 11 | use embassy_stm32::peripherals::ETH; | 11 | use embassy_stm32::peripherals::ETH; |
| 12 | use embassy_stm32::rng::Rng; | 12 | use embassy_stm32::rng::Rng; |
| 13 | use embassy_stm32::time::mhz; | ||
| 14 | use embassy_stm32::{bind_interrupts, eth, peripherals, rng, Config}; | 13 | use embassy_stm32::{bind_interrupts, eth, peripherals, rng, Config}; |
| 15 | use embassy_time::{Duration, Timer}; | 14 | use embassy_time::{Duration, Timer}; |
| 16 | use embedded_io_async::Write; | 15 | use embedded_io_async::Write; |
| @@ -34,9 +33,27 @@ async fn net_task(stack: &'static Stack<Device>) -> ! { | |||
| 34 | #[embassy_executor::main] | 33 | #[embassy_executor::main] |
| 35 | async fn main(spawner: Spawner) -> ! { | 34 | async fn main(spawner: Spawner) -> ! { |
| 36 | let mut config = Config::default(); | 35 | let mut config = Config::default(); |
| 37 | config.rcc.sys_ck = Some(mhz(400)); | 36 | { |
| 38 | config.rcc.hclk = Some(mhz(200)); | 37 | use embassy_stm32::rcc::*; |
| 39 | config.rcc.pll1.q_ck = Some(mhz(100)); | 38 | config.rcc.hsi = Some(Hsi::Mhz64); |
| 39 | config.rcc.csi = true; | ||
| 40 | config.rcc.hsi48 = true; // needed for RNG | ||
| 41 | config.rcc.pll_src = PllSource::Hsi; | ||
| 42 | config.rcc.pll1 = Some(Pll { | ||
| 43 | prediv: 4, | ||
| 44 | mul: 50, | ||
| 45 | divp: Some(2), | ||
| 46 | divq: None, | ||
| 47 | divr: None, | ||
| 48 | }); | ||
| 49 | config.rcc.sys = Sysclk::Pll1P; // 400 Mhz | ||
| 50 | config.rcc.ahb_pre = AHBPrescaler::DIV2; // 200 Mhz | ||
| 51 | config.rcc.apb1_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 52 | config.rcc.apb2_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 53 | config.rcc.apb3_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 54 | config.rcc.apb4_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 55 | config.rcc.voltage_scale = VoltageScale::Scale1; | ||
| 56 | } | ||
| 40 | let p = embassy_stm32::init(config); | 57 | let p = embassy_stm32::init(config); |
| 41 | info!("Hello World!"); | 58 | info!("Hello World!"); |
| 42 | 59 | ||
| @@ -108,7 +125,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 108 | let r = connection.write_all(b"Hello\n").await; | 125 | let r = connection.write_all(b"Hello\n").await; |
| 109 | if let Err(e) = r { | 126 | if let Err(e) = r { |
| 110 | info!("write error: {:?}", e); | 127 | info!("write error: {:?}", e); |
| 111 | continue; | 128 | break; |
| 112 | } | 129 | } |
| 113 | Timer::after(Duration::from_secs(1)).await; | 130 | Timer::after(Duration::from_secs(1)).await; |
| 114 | } | 131 | } |
diff --git a/examples/stm32h7/src/bin/fmc.rs b/examples/stm32h7/src/bin/fmc.rs index 85c690fe6..de0b351df 100644 --- a/examples/stm32h7/src/bin/fmc.rs +++ b/examples/stm32h7/src/bin/fmc.rs | |||
| @@ -5,7 +5,6 @@ | |||
| 5 | use defmt::*; | 5 | use defmt::*; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::fmc::Fmc; | 7 | use embassy_stm32::fmc::Fmc; |
| 8 | use embassy_stm32::time::mhz; | ||
| 9 | use embassy_stm32::Config; | 8 | use embassy_stm32::Config; |
| 10 | use embassy_time::{Delay, Duration, Timer}; | 9 | use embassy_time::{Delay, Duration, Timer}; |
| 11 | use {defmt_rtt as _, panic_probe as _}; | 10 | use {defmt_rtt as _, panic_probe as _}; |
| @@ -13,9 +12,26 @@ use {defmt_rtt as _, panic_probe as _}; | |||
| 13 | #[embassy_executor::main] | 12 | #[embassy_executor::main] |
| 14 | async fn main(_spawner: Spawner) { | 13 | async fn main(_spawner: Spawner) { |
| 15 | let mut config = Config::default(); | 14 | let mut config = Config::default(); |
| 16 | config.rcc.sys_ck = Some(mhz(400)); | 15 | { |
| 17 | config.rcc.hclk = Some(mhz(200)); | 16 | use embassy_stm32::rcc::*; |
| 18 | config.rcc.pll1.q_ck = Some(mhz(100)); | 17 | config.rcc.hsi = Some(Hsi::Mhz64); |
| 18 | config.rcc.csi = true; | ||
| 19 | config.rcc.pll_src = PllSource::Hsi; | ||
| 20 | config.rcc.pll1 = Some(Pll { | ||
| 21 | prediv: 4, | ||
| 22 | mul: 50, | ||
| 23 | divp: Some(2), | ||
| 24 | divq: Some(8), // 100mhz | ||
| 25 | divr: None, | ||
| 26 | }); | ||
| 27 | config.rcc.sys = Sysclk::Pll1P; // 400 Mhz | ||
| 28 | config.rcc.ahb_pre = AHBPrescaler::DIV2; // 200 Mhz | ||
| 29 | config.rcc.apb1_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 30 | config.rcc.apb2_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 31 | config.rcc.apb3_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 32 | config.rcc.apb4_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 33 | config.rcc.voltage_scale = VoltageScale::Scale1; | ||
| 34 | } | ||
| 19 | let p = embassy_stm32::init(config); | 35 | let p = embassy_stm32::init(config); |
| 20 | 36 | ||
| 21 | info!("Hello World!"); | 37 | info!("Hello World!"); |
diff --git a/examples/stm32h7/src/bin/low_level_timer_api.rs b/examples/stm32h7/src/bin/low_level_timer_api.rs index 45b0872b5..a1e955c39 100644 --- a/examples/stm32h7/src/bin/low_level_timer_api.rs +++ b/examples/stm32h7/src/bin/low_level_timer_api.rs | |||
| @@ -6,7 +6,7 @@ use defmt::*; | |||
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::gpio::low_level::AFType; | 7 | use embassy_stm32::gpio::low_level::AFType; |
| 8 | use embassy_stm32::gpio::Speed; | 8 | use embassy_stm32::gpio::Speed; |
| 9 | use embassy_stm32::time::{khz, mhz, Hertz}; | 9 | use embassy_stm32::time::{khz, Hertz}; |
| 10 | use embassy_stm32::timer::*; | 10 | use embassy_stm32::timer::*; |
| 11 | use embassy_stm32::{into_ref, Config, Peripheral, PeripheralRef}; | 11 | use embassy_stm32::{into_ref, Config, Peripheral, PeripheralRef}; |
| 12 | use embassy_time::{Duration, Timer}; | 12 | use embassy_time::{Duration, Timer}; |
| @@ -15,13 +15,27 @@ use {defmt_rtt as _, panic_probe as _}; | |||
| 15 | #[embassy_executor::main] | 15 | #[embassy_executor::main] |
| 16 | async fn main(_spawner: Spawner) { | 16 | async fn main(_spawner: Spawner) { |
| 17 | let mut config = Config::default(); | 17 | let mut config = Config::default(); |
| 18 | config.rcc.sys_ck = Some(mhz(400)); | 18 | { |
| 19 | config.rcc.hclk = Some(mhz(400)); | 19 | use embassy_stm32::rcc::*; |
| 20 | config.rcc.pll1.q_ck = Some(mhz(100)); | 20 | config.rcc.hsi = Some(Hsi::Mhz64); |
| 21 | config.rcc.pclk1 = Some(mhz(100)); | 21 | config.rcc.csi = true; |
| 22 | config.rcc.pclk2 = Some(mhz(100)); | 22 | config.rcc.hsi48 = true; // needed for RNG |
| 23 | config.rcc.pclk3 = Some(mhz(100)); | 23 | config.rcc.pll_src = PllSource::Hsi; |
| 24 | config.rcc.pclk4 = Some(mhz(100)); | 24 | config.rcc.pll1 = Some(Pll { |
| 25 | prediv: 4, | ||
| 26 | mul: 50, | ||
| 27 | divp: Some(2), | ||
| 28 | divq: Some(8), // 100 Mhz | ||
| 29 | divr: None, | ||
| 30 | }); | ||
| 31 | config.rcc.sys = Sysclk::Pll1P; // 400 Mhz | ||
| 32 | config.rcc.ahb_pre = AHBPrescaler::DIV2; // 200 Mhz | ||
| 33 | config.rcc.apb1_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 34 | config.rcc.apb2_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 35 | config.rcc.apb3_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 36 | config.rcc.apb4_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 37 | config.rcc.voltage_scale = VoltageScale::Scale1; | ||
| 38 | } | ||
| 25 | let p = embassy_stm32::init(config); | 39 | let p = embassy_stm32::init(config); |
| 26 | 40 | ||
| 27 | info!("Hello World!"); | 41 | info!("Hello World!"); |
diff --git a/examples/stm32h7/src/bin/mco.rs b/examples/stm32h7/src/bin/mco.rs index 036455d5e..9d6d805ae 100644 --- a/examples/stm32h7/src/bin/mco.rs +++ b/examples/stm32h7/src/bin/mco.rs | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | use defmt::*; | 5 | use defmt::*; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::gpio::{Level, Output, Speed}; | 7 | use embassy_stm32::gpio::{Level, Output, Speed}; |
| 8 | use embassy_stm32::rcc::{Mco, Mco1Source, McoClock}; | 8 | use embassy_stm32::rcc::{Mco, Mco1Source}; |
| 9 | use embassy_time::{Duration, Timer}; | 9 | use embassy_time::{Duration, Timer}; |
| 10 | use {defmt_rtt as _, panic_probe as _}; | 10 | use {defmt_rtt as _, panic_probe as _}; |
| 11 | 11 | ||
| @@ -16,7 +16,7 @@ async fn main(_spawner: Spawner) { | |||
| 16 | 16 | ||
| 17 | let mut led = Output::new(p.PB14, Level::High, Speed::Low); | 17 | let mut led = Output::new(p.PB14, Level::High, Speed::Low); |
| 18 | 18 | ||
| 19 | let _mco = Mco::new(p.MCO1, p.PA8, Mco1Source::Hsi, McoClock::Divided(8)); | 19 | let _mco = Mco::new(p.MCO1, p.PA8, Mco1Source::HSI, 8); |
| 20 | 20 | ||
| 21 | loop { | 21 | loop { |
| 22 | info!("high"); | 22 | info!("high"); |
diff --git a/examples/stm32h7/src/bin/pwm.rs b/examples/stm32h7/src/bin/pwm.rs index aa5ec1bcf..5c8e57aa2 100644 --- a/examples/stm32h7/src/bin/pwm.rs +++ b/examples/stm32h7/src/bin/pwm.rs | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | use defmt::*; | 5 | use defmt::*; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::gpio::OutputType; | 7 | use embassy_stm32::gpio::OutputType; |
| 8 | use embassy_stm32::time::{khz, mhz}; | 8 | use embassy_stm32::time::khz; |
| 9 | use embassy_stm32::timer::simple_pwm::{PwmPin, SimplePwm}; | 9 | use embassy_stm32::timer::simple_pwm::{PwmPin, SimplePwm}; |
| 10 | use embassy_stm32::timer::Channel; | 10 | use embassy_stm32::timer::Channel; |
| 11 | use embassy_stm32::Config; | 11 | use embassy_stm32::Config; |
| @@ -15,13 +15,26 @@ use {defmt_rtt as _, panic_probe as _}; | |||
| 15 | #[embassy_executor::main] | 15 | #[embassy_executor::main] |
| 16 | async fn main(_spawner: Spawner) { | 16 | async fn main(_spawner: Spawner) { |
| 17 | let mut config = Config::default(); | 17 | let mut config = Config::default(); |
| 18 | config.rcc.sys_ck = Some(mhz(400)); | 18 | { |
| 19 | config.rcc.hclk = Some(mhz(400)); | 19 | use embassy_stm32::rcc::*; |
| 20 | config.rcc.pll1.q_ck = Some(mhz(100)); | 20 | config.rcc.hsi = Some(Hsi::Mhz64); |
| 21 | config.rcc.pclk1 = Some(mhz(100)); | 21 | config.rcc.csi = true; |
| 22 | config.rcc.pclk2 = Some(mhz(100)); | 22 | config.rcc.pll_src = PllSource::Hsi; |
| 23 | config.rcc.pclk3 = Some(mhz(100)); | 23 | config.rcc.pll1 = Some(Pll { |
| 24 | config.rcc.pclk4 = Some(mhz(100)); | 24 | prediv: 4, |
| 25 | mul: 50, | ||
| 26 | divp: Some(2), | ||
| 27 | divq: None, | ||
| 28 | divr: None, | ||
| 29 | }); | ||
| 30 | config.rcc.sys = Sysclk::Pll1P; // 400 Mhz | ||
| 31 | config.rcc.ahb_pre = AHBPrescaler::DIV2; // 200 Mhz | ||
| 32 | config.rcc.apb1_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 33 | config.rcc.apb2_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 34 | config.rcc.apb3_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 35 | config.rcc.apb4_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 36 | config.rcc.voltage_scale = VoltageScale::Scale1; | ||
| 37 | } | ||
| 25 | let p = embassy_stm32::init(config); | 38 | let p = embassy_stm32::init(config); |
| 26 | info!("Hello World!"); | 39 | info!("Hello World!"); |
| 27 | 40 | ||
diff --git a/examples/stm32h7/src/bin/rng.rs b/examples/stm32h7/src/bin/rng.rs index 7c8c50eca..af1d6ebb8 100644 --- a/examples/stm32h7/src/bin/rng.rs +++ b/examples/stm32h7/src/bin/rng.rs | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | use defmt::*; | 5 | use defmt::*; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::rng::Rng; | 7 | use embassy_stm32::rng::Rng; |
| 8 | use embassy_stm32::{bind_interrupts, peripherals, rng}; | 8 | use embassy_stm32::{bind_interrupts, peripherals, rng, Config}; |
| 9 | use {defmt_rtt as _, panic_probe as _}; | 9 | use {defmt_rtt as _, panic_probe as _}; |
| 10 | 10 | ||
| 11 | bind_interrupts!(struct Irqs { | 11 | bind_interrupts!(struct Irqs { |
| @@ -14,7 +14,9 @@ bind_interrupts!(struct Irqs { | |||
| 14 | 14 | ||
| 15 | #[embassy_executor::main] | 15 | #[embassy_executor::main] |
| 16 | async fn main(_spawner: Spawner) { | 16 | async fn main(_spawner: Spawner) { |
| 17 | let p = embassy_stm32::init(Default::default()); | 17 | let mut config = Config::default(); |
| 18 | config.rcc.hsi48 = true; // needed for RNG. | ||
| 19 | let p = embassy_stm32::init(config); | ||
| 18 | info!("Hello World!"); | 20 | info!("Hello World!"); |
| 19 | 21 | ||
| 20 | let mut rng = Rng::new(p.RNG, Irqs); | 22 | let mut rng = Rng::new(p.RNG, Irqs); |
diff --git a/examples/stm32h7/src/bin/sdmmc.rs b/examples/stm32h7/src/bin/sdmmc.rs index ce91b6b1c..752aefdf7 100644 --- a/examples/stm32h7/src/bin/sdmmc.rs +++ b/examples/stm32h7/src/bin/sdmmc.rs | |||
| @@ -16,7 +16,26 @@ bind_interrupts!(struct Irqs { | |||
| 16 | #[embassy_executor::main] | 16 | #[embassy_executor::main] |
| 17 | async fn main(_spawner: Spawner) -> ! { | 17 | async fn main(_spawner: Spawner) -> ! { |
| 18 | let mut config = Config::default(); | 18 | let mut config = Config::default(); |
| 19 | config.rcc.sys_ck = Some(mhz(200)); | 19 | { |
| 20 | use embassy_stm32::rcc::*; | ||
| 21 | config.rcc.hsi = Some(Hsi::Mhz64); | ||
| 22 | config.rcc.csi = true; | ||
| 23 | config.rcc.pll_src = PllSource::Hsi; | ||
| 24 | config.rcc.pll1 = Some(Pll { | ||
| 25 | prediv: 4, | ||
| 26 | mul: 50, | ||
| 27 | divp: Some(2), | ||
| 28 | divq: Some(4), // default clock chosen by SDMMCSEL. 200 Mhz | ||
| 29 | divr: None, | ||
| 30 | }); | ||
| 31 | config.rcc.sys = Sysclk::Pll1P; // 400 Mhz | ||
| 32 | config.rcc.ahb_pre = AHBPrescaler::DIV2; // 200 Mhz | ||
| 33 | config.rcc.apb1_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 34 | config.rcc.apb2_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 35 | config.rcc.apb3_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 36 | config.rcc.apb4_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 37 | config.rcc.voltage_scale = VoltageScale::Scale1; | ||
| 38 | } | ||
| 20 | let p = embassy_stm32::init(config); | 39 | let p = embassy_stm32::init(config); |
| 21 | info!("Hello World!"); | 40 | info!("Hello World!"); |
| 22 | 41 | ||
diff --git a/examples/stm32h7/src/bin/spi.rs b/examples/stm32h7/src/bin/spi.rs index 28bba2b8d..9fe46f031 100644 --- a/examples/stm32h7/src/bin/spi.rs +++ b/examples/stm32h7/src/bin/spi.rs | |||
| @@ -38,9 +38,26 @@ fn main() -> ! { | |||
| 38 | info!("Hello World!"); | 38 | info!("Hello World!"); |
| 39 | 39 | ||
| 40 | let mut config = Config::default(); | 40 | let mut config = Config::default(); |
| 41 | config.rcc.sys_ck = Some(mhz(400)); | 41 | { |
| 42 | config.rcc.hclk = Some(mhz(200)); | 42 | use embassy_stm32::rcc::*; |
| 43 | config.rcc.pll1.q_ck = Some(mhz(100)); | 43 | config.rcc.hsi = Some(Hsi::Mhz64); |
| 44 | config.rcc.csi = true; | ||
| 45 | config.rcc.pll_src = PllSource::Hsi; | ||
| 46 | config.rcc.pll1 = Some(Pll { | ||
| 47 | prediv: 4, | ||
| 48 | mul: 50, | ||
| 49 | divp: Some(2), | ||
| 50 | divq: Some(4), // used by SPI3. 100Mhz. | ||
| 51 | divr: None, | ||
| 52 | }); | ||
| 53 | config.rcc.sys = Sysclk::Pll1P; // 400 Mhz | ||
| 54 | config.rcc.ahb_pre = AHBPrescaler::DIV2; // 200 Mhz | ||
| 55 | config.rcc.apb1_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 56 | config.rcc.apb2_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 57 | config.rcc.apb3_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 58 | config.rcc.apb4_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 59 | config.rcc.voltage_scale = VoltageScale::Scale1; | ||
| 60 | } | ||
| 44 | let p = embassy_stm32::init(config); | 61 | let p = embassy_stm32::init(config); |
| 45 | 62 | ||
| 46 | let mut spi_config = spi::Config::default(); | 63 | let mut spi_config = spi::Config::default(); |
diff --git a/examples/stm32h7/src/bin/spi_dma.rs b/examples/stm32h7/src/bin/spi_dma.rs index f6e30cfa5..88d65d5be 100644 --- a/examples/stm32h7/src/bin/spi_dma.rs +++ b/examples/stm32h7/src/bin/spi_dma.rs | |||
| @@ -34,9 +34,26 @@ fn main() -> ! { | |||
| 34 | info!("Hello World!"); | 34 | info!("Hello World!"); |
| 35 | 35 | ||
| 36 | let mut config = Config::default(); | 36 | let mut config = Config::default(); |
| 37 | config.rcc.sys_ck = Some(mhz(400)); | 37 | { |
| 38 | config.rcc.hclk = Some(mhz(200)); | 38 | use embassy_stm32::rcc::*; |
| 39 | config.rcc.pll1.q_ck = Some(mhz(100)); | 39 | config.rcc.hsi = Some(Hsi::Mhz64); |
| 40 | config.rcc.csi = true; | ||
| 41 | config.rcc.pll_src = PllSource::Hsi; | ||
| 42 | config.rcc.pll1 = Some(Pll { | ||
| 43 | prediv: 4, | ||
| 44 | mul: 50, | ||
| 45 | divp: Some(2), | ||
| 46 | divq: Some(4), // used by SPI3. 100Mhz. | ||
| 47 | divr: None, | ||
| 48 | }); | ||
| 49 | config.rcc.sys = Sysclk::Pll1P; // 400 Mhz | ||
| 50 | config.rcc.ahb_pre = AHBPrescaler::DIV2; // 200 Mhz | ||
| 51 | config.rcc.apb1_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 52 | config.rcc.apb2_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 53 | config.rcc.apb3_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 54 | config.rcc.apb4_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 55 | config.rcc.voltage_scale = VoltageScale::Scale1; | ||
| 56 | } | ||
| 40 | let p = embassy_stm32::init(config); | 57 | let p = embassy_stm32::init(config); |
| 41 | 58 | ||
| 42 | let mut spi_config = spi::Config::default(); | 59 | let mut spi_config = spi::Config::default(); |
diff --git a/examples/stm32h7/src/bin/usb_serial.rs b/examples/stm32h7/src/bin/usb_serial.rs index 97291f60c..14de43568 100644 --- a/examples/stm32h7/src/bin/usb_serial.rs +++ b/examples/stm32h7/src/bin/usb_serial.rs | |||
| @@ -4,7 +4,6 @@ | |||
| 4 | 4 | ||
| 5 | use defmt::{panic, *}; | 5 | use defmt::{panic, *}; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::time::mhz; | ||
| 8 | use embassy_stm32::usb_otg::{Driver, Instance}; | 7 | use embassy_stm32::usb_otg::{Driver, Instance}; |
| 9 | use embassy_stm32::{bind_interrupts, peripherals, usb_otg, Config}; | 8 | use embassy_stm32::{bind_interrupts, peripherals, usb_otg, Config}; |
| 10 | use embassy_usb::class::cdc_acm::{CdcAcmClass, State}; | 9 | use embassy_usb::class::cdc_acm::{CdcAcmClass, State}; |
| @@ -22,9 +21,27 @@ async fn main(_spawner: Spawner) { | |||
| 22 | info!("Hello World!"); | 21 | info!("Hello World!"); |
| 23 | 22 | ||
| 24 | let mut config = Config::default(); | 23 | let mut config = Config::default(); |
| 25 | config.rcc.sys_ck = Some(mhz(400)); | 24 | { |
| 26 | config.rcc.hclk = Some(mhz(200)); | 25 | use embassy_stm32::rcc::*; |
| 27 | config.rcc.pll1.q_ck = Some(mhz(100)); | 26 | config.rcc.hsi = Some(Hsi::Mhz64); |
| 27 | config.rcc.csi = true; | ||
| 28 | config.rcc.hsi48 = true; // needed for USB | ||
| 29 | config.rcc.pll_src = PllSource::Hsi; | ||
| 30 | config.rcc.pll1 = Some(Pll { | ||
| 31 | prediv: 4, | ||
| 32 | mul: 50, | ||
| 33 | divp: Some(2), | ||
| 34 | divq: None, | ||
| 35 | divr: None, | ||
| 36 | }); | ||
| 37 | config.rcc.sys = Sysclk::Pll1P; // 400 Mhz | ||
| 38 | config.rcc.ahb_pre = AHBPrescaler::DIV2; // 200 Mhz | ||
| 39 | config.rcc.apb1_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 40 | config.rcc.apb2_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 41 | config.rcc.apb3_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 42 | config.rcc.apb4_pre = APBPrescaler::DIV2; // 100 Mhz | ||
| 43 | config.rcc.voltage_scale = VoltageScale::Scale1; | ||
| 44 | } | ||
| 28 | let p = embassy_stm32::init(config); | 45 | let p = embassy_stm32::init(config); |
| 29 | 46 | ||
| 30 | // Create the driver, from the HAL. | 47 | // Create the driver, from the HAL. |
