diff options
Diffstat (limited to 'examples/stm32h7/src/bin')
| -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 | 31 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/eth_client.rs | 35 | ||||
| -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/usart.rs | 2 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/usart_dma.rs | 2 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/usart_split.rs | 2 | ||||
| -rw-r--r-- | examples/stm32h7/src/bin/usb_serial.rs | 25 |
18 files changed, 313 insertions, 76 deletions
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 26a386e49..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 | ||
| @@ -83,6 +100,9 @@ async fn main(spawner: Spawner) -> ! { | |||
| 83 | // Launch network task | 100 | // Launch network task |
| 84 | unwrap!(spawner.spawn(net_task(&stack))); | 101 | unwrap!(spawner.spawn(net_task(&stack))); |
| 85 | 102 | ||
| 103 | // Ensure DHCP configuration is up before trying connect | ||
| 104 | stack.wait_config_up().await; | ||
| 105 | |||
| 86 | info!("Network task initialized"); | 106 | info!("Network task initialized"); |
| 87 | 107 | ||
| 88 | // Then we can use it! | 108 | // Then we can use it! |
| @@ -99,6 +119,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 99 | let r = socket.connect(remote_endpoint).await; | 119 | let r = socket.connect(remote_endpoint).await; |
| 100 | if let Err(e) = r { | 120 | if let Err(e) = r { |
| 101 | info!("connect error: {:?}", e); | 121 | info!("connect error: {:?}", e); |
| 122 | Timer::after(Duration::from_secs(1)).await; | ||
| 102 | continue; | 123 | continue; |
| 103 | } | 124 | } |
| 104 | info!("connected!"); | 125 | info!("connected!"); |
| @@ -106,7 +127,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 106 | let r = socket.write_all(b"Hello\n").await; | 127 | let r = socket.write_all(b"Hello\n").await; |
| 107 | if let Err(e) = r { | 128 | if let Err(e) = r { |
| 108 | info!("write error: {:?}", e); | 129 | info!("write error: {:?}", e); |
| 109 | continue; | 130 | break; |
| 110 | } | 131 | } |
| 111 | Timer::after(Duration::from_secs(1)).await; | 132 | Timer::after(Duration::from_secs(1)).await; |
| 112 | } | 133 | } |
diff --git a/examples/stm32h7/src/bin/eth_client.rs b/examples/stm32h7/src/bin/eth_client.rs index 6664410c8..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 | ||
| @@ -82,12 +99,12 @@ async fn main(spawner: Spawner) -> ! { | |||
| 82 | )); | 99 | )); |
| 83 | 100 | ||
| 84 | // Launch network task | 101 | // Launch network task |
| 85 | unwrap!(spawner.spawn(net_task(&stack))); | 102 | unwrap!(spawner.spawn(net_task(stack))); |
| 86 | 103 | ||
| 87 | info!("Network task initialized"); | 104 | // Ensure DHCP configuration is up before trying connect |
| 105 | stack.wait_config_up().await; | ||
| 88 | 106 | ||
| 89 | // To ensure DHCP configuration before trying connect | 107 | info!("Network task initialized"); |
| 90 | Timer::after(Duration::from_secs(20)).await; | ||
| 91 | 108 | ||
| 92 | static STATE: TcpClientState<1, 1024, 1024> = TcpClientState::new(); | 109 | static STATE: TcpClientState<1, 1024, 1024> = TcpClientState::new(); |
| 93 | let client = TcpClient::new(&stack, &STATE); | 110 | let client = TcpClient::new(&stack, &STATE); |
| @@ -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/usart.rs b/examples/stm32h7/src/bin/usart.rs index 0abb94abb..db04d4e55 100644 --- a/examples/stm32h7/src/bin/usart.rs +++ b/examples/stm32h7/src/bin/usart.rs | |||
| @@ -20,7 +20,7 @@ async fn main_task() { | |||
| 20 | let p = embassy_stm32::init(Default::default()); | 20 | let p = embassy_stm32::init(Default::default()); |
| 21 | 21 | ||
| 22 | let config = Config::default(); | 22 | let config = Config::default(); |
| 23 | let mut usart = Uart::new(p.UART7, p.PF6, p.PF7, Irqs, NoDma, NoDma, config); | 23 | let mut usart = Uart::new(p.UART7, p.PF6, p.PF7, Irqs, NoDma, NoDma, config).unwrap(); |
| 24 | 24 | ||
| 25 | unwrap!(usart.blocking_write(b"Hello Embassy World!\r\n")); | 25 | unwrap!(usart.blocking_write(b"Hello Embassy World!\r\n")); |
| 26 | info!("wrote Hello, starting echo"); | 26 | info!("wrote Hello, starting echo"); |
diff --git a/examples/stm32h7/src/bin/usart_dma.rs b/examples/stm32h7/src/bin/usart_dma.rs index f1fe7fce6..249050fd1 100644 --- a/examples/stm32h7/src/bin/usart_dma.rs +++ b/examples/stm32h7/src/bin/usart_dma.rs | |||
| @@ -23,7 +23,7 @@ async fn main_task() { | |||
| 23 | let p = embassy_stm32::init(Default::default()); | 23 | let p = embassy_stm32::init(Default::default()); |
| 24 | 24 | ||
| 25 | let config = Config::default(); | 25 | let config = Config::default(); |
| 26 | let mut usart = Uart::new(p.UART7, p.PF6, p.PF7, Irqs, p.DMA1_CH0, NoDma, config); | 26 | let mut usart = Uart::new(p.UART7, p.PF6, p.PF7, Irqs, p.DMA1_CH0, NoDma, config).unwrap(); |
| 27 | 27 | ||
| 28 | for n in 0u32.. { | 28 | for n in 0u32.. { |
| 29 | let mut s: String<128> = String::new(); | 29 | let mut s: String<128> = String::new(); |
diff --git a/examples/stm32h7/src/bin/usart_split.rs b/examples/stm32h7/src/bin/usart_split.rs index aa0753450..61c9f1954 100644 --- a/examples/stm32h7/src/bin/usart_split.rs +++ b/examples/stm32h7/src/bin/usart_split.rs | |||
| @@ -36,7 +36,7 @@ async fn main(spawner: Spawner) -> ! { | |||
| 36 | info!("Hello World!"); | 36 | info!("Hello World!"); |
| 37 | 37 | ||
| 38 | let config = Config::default(); | 38 | let config = Config::default(); |
| 39 | let mut usart = Uart::new(p.UART7, p.PF6, p.PF7, Irqs, p.DMA1_CH0, p.DMA1_CH1, config); | 39 | let mut usart = Uart::new(p.UART7, p.PF6, p.PF7, Irqs, p.DMA1_CH0, p.DMA1_CH1, config).unwrap(); |
| 40 | unwrap!(usart.blocking_write(b"Type 8 chars to echo!\r\n")); | 40 | unwrap!(usart.blocking_write(b"Type 8 chars to echo!\r\n")); |
| 41 | 41 | ||
| 42 | let (mut tx, rx) = usart.split(); | 42 | let (mut tx, rx) = usart.split(); |
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. |
