From 3d1391ef2d634ca6a90c68be7cc69af02e3dc33b Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Thu, 15 Jul 2021 05:42:06 +0200 Subject: stm32/dma: impl all variants --- examples/stm32f4/src/bin/spi.rs | 2 +- examples/stm32f4/src/bin/usart.rs | 3 ++- examples/stm32f4/src/bin/usart_dma.rs | 11 +++++------ examples/stm32l4/src/bin/spi.rs | 2 +- examples/stm32l4/src/bin/usart.rs | 2 +- examples/stm32l4/src/bin/usart_dma.rs | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) (limited to 'examples') diff --git a/examples/stm32f4/src/bin/spi.rs b/examples/stm32f4/src/bin/spi.rs index dda0ee4ed..aa48ceed5 100644 --- a/examples/stm32f4/src/bin/spi.rs +++ b/examples/stm32f4/src/bin/spi.rs @@ -61,7 +61,7 @@ fn main() -> ! { let mut cs = Output::new(p.PE0, Level::High, Speed::VeryHigh); loop { - let mut buf = [0x0A; 4]; + let mut buf = [0x0Au8; 4]; unwrap!(cs.set_low()); unwrap!(spi.transfer(&mut buf)); unwrap!(cs.set_high()); diff --git a/examples/stm32f4/src/bin/usart.rs b/examples/stm32f4/src/bin/usart.rs index 42f154b05..31525036a 100644 --- a/examples/stm32f4/src/bin/usart.rs +++ b/examples/stm32f4/src/bin/usart.rs @@ -12,6 +12,7 @@ use cortex_m::prelude::_embedded_hal_blocking_serial_Write; use embassy::executor::Executor; use embassy::time::Clock; use embassy::util::Forever; +use embassy_stm32::dma::NoDma; use embassy_stm32::usart::{Config, Uart}; use example_common::*; @@ -23,7 +24,7 @@ async fn main_task() { let p = embassy_stm32::init(Default::default()); let config = Config::default(); - let mut usart = Uart::new(p.USART3, p.PD9, p.PD8, config); + let mut usart = Uart::new(p.USART3, p.PD9, p.PD8, NoDma, NoDma, config); usart.bwrite_all(b"Hello Embassy World!\r\n").unwrap(); info!("wrote Hello, starting echo"); diff --git a/examples/stm32f4/src/bin/usart_dma.rs b/examples/stm32f4/src/bin/usart_dma.rs index 66ca6242b..39e199d58 100644 --- a/examples/stm32f4/src/bin/usart_dma.rs +++ b/examples/stm32f4/src/bin/usart_dma.rs @@ -13,26 +13,25 @@ use cortex_m_rt::entry; use embassy::executor::Executor; use embassy::time::Clock; use embassy::util::Forever; +use embassy_stm32::dma::NoDma; use embassy_stm32::usart::{Config, Uart}; +use embassy_traits::uart::Write as _; use example_common::*; use heapless::String; use stm32f4::stm32f429 as pac; #[embassy::task] async fn main_task() { - let mut p = embassy_stm32::init(Default::default()); + let p = embassy_stm32::init(Default::default()); let config = Config::default(); - let mut usart = Uart::new(p.USART3, p.PD9, p.PD8, config); + let mut usart = Uart::new(p.USART3, p.PD9, p.PD8, p.DMA1_3, NoDma, config); for n in 0u32.. { let mut s: String<128> = String::new(); core::write!(&mut s, "Hello DMA World {}!\r\n", n).unwrap(); - usart - .write_dma(&mut p.DMA1_3, s.as_bytes()) - .await - .unwrap(); + usart.write(s.as_bytes()).await.unwrap(); info!("wrote DMA"); } } diff --git a/examples/stm32l4/src/bin/spi.rs b/examples/stm32l4/src/bin/spi.rs index 45ccfcebc..7cac01fd4 100644 --- a/examples/stm32l4/src/bin/spi.rs +++ b/examples/stm32l4/src/bin/spi.rs @@ -57,7 +57,7 @@ fn main() -> ! { let mut cs = Output::new(p.PE0, Level::High, Speed::VeryHigh); loop { - let mut buf = [0x0A; 4]; + let mut buf = [0x0Au8; 4]; unwrap!(cs.set_low()); unwrap!(spi.transfer(&mut buf)); unwrap!(cs.set_high()); diff --git a/examples/stm32l4/src/bin/usart.rs b/examples/stm32l4/src/bin/usart.rs index e9a44f151..f572b1eff 100644 --- a/examples/stm32l4/src/bin/usart.rs +++ b/examples/stm32l4/src/bin/usart.rs @@ -13,7 +13,7 @@ use cortex_m_rt::entry; use embassy::executor::Executor; use embassy::time::Clock; use embassy::util::Forever; -use embassy_stm32::dma_traits::NoDma; +use embassy_stm32::dma::NoDma; use embassy_stm32::pac; use embassy_stm32::usart::{Config, Uart}; use example_common::*; diff --git a/examples/stm32l4/src/bin/usart_dma.rs b/examples/stm32l4/src/bin/usart_dma.rs index 1eadd3ad4..12857bc78 100644 --- a/examples/stm32l4/src/bin/usart_dma.rs +++ b/examples/stm32l4/src/bin/usart_dma.rs @@ -13,7 +13,7 @@ use cortex_m_rt::entry; use embassy::executor::Executor; use embassy::time::Clock; use embassy::util::Forever; -use embassy_stm32::dma_traits::NoDma; +use embassy_stm32::dma::NoDma; use embassy_stm32::pac; use embassy_stm32::usart::{Config, Uart}; use embassy_traits::uart::Write as _; -- cgit From 63a0e188eae16bdf3c40ec627bbfbdcaa1cf4978 Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Thu, 15 Jul 2021 06:31:54 +0200 Subject: stm32/dma: fix h7 impls --- examples/stm32h7/src/bin/usart.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'examples') diff --git a/examples/stm32h7/src/bin/usart.rs b/examples/stm32h7/src/bin/usart.rs index d8e60158b..143f94491 100644 --- a/examples/stm32h7/src/bin/usart.rs +++ b/examples/stm32h7/src/bin/usart.rs @@ -1,4 +1,3 @@ - #![no_std] #![no_main] #![feature(trait_alias)] @@ -13,12 +12,12 @@ use cortex_m::prelude::_embedded_hal_blocking_serial_Write; use embassy::executor::Executor; use embassy::time::Clock; use embassy::util::Forever; +use embassy_stm32::dma::NoDma; use embassy_stm32::usart::{Config, Uart}; -use embassy_stm32::dma_traits::NoDma; use example_common::*; -use stm32h7xx_hal as hal; use hal::prelude::*; +use stm32h7xx_hal as hal; use cortex_m_rt::entry; use stm32h7::stm32h743 as pac; @@ -60,8 +59,7 @@ fn main() -> ! { let rcc = pp.RCC.constrain(); - rcc - .sys_ck(96.mhz()) + rcc.sys_ck(96.mhz()) .pclk1(48.mhz()) .pclk2(48.mhz()) .pclk3(48.mhz()) @@ -89,7 +87,6 @@ fn main() -> ! { w }); - unsafe { embassy::time::set_clock(&ZeroClock) }; let executor = EXECUTOR.put(Executor::new()); -- cgit From 0119ea809dba3a0b002174f615650a5a8fd9c22e Mon Sep 17 00:00:00 2001 From: Bob McWhirter Date: Fri, 16 Jul 2021 14:40:25 -0400 Subject: Get DMA on H7 working, add usart_dma example for H7. --- examples/stm32h7/src/bin/usart_dma.rs | 100 ++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 examples/stm32h7/src/bin/usart_dma.rs (limited to 'examples') diff --git a/examples/stm32h7/src/bin/usart_dma.rs b/examples/stm32h7/src/bin/usart_dma.rs new file mode 100644 index 000000000..fd5da8b35 --- /dev/null +++ b/examples/stm32h7/src/bin/usart_dma.rs @@ -0,0 +1,100 @@ +#![no_std] +#![no_main] +#![feature(trait_alias)] +#![feature(min_type_alias_impl_trait)] +#![feature(impl_trait_in_bindings)] +#![feature(type_alias_impl_trait)] +#![allow(incomplete_features)] + +#[path = "../example_common.rs"] +mod example_common; +use core::fmt::Write; +use embassy::executor::Executor; +use embassy::time::Clock; +use embassy::util::Forever; +use embassy_stm32::dma::NoDma; +use embassy_stm32::usart::{Config, Uart}; +use example_common::*; +use embassy_traits::uart::Write as _Write; + +use hal::prelude::*; +use stm32h7xx_hal as hal; + +use cortex_m_rt::entry; +use stm32h7::stm32h743 as pac; +use heapless::String; + +#[embassy::task] +async fn main_task() { + let p = embassy_stm32::init(Default::default()); + + let config = Config::default(); + let mut usart = Uart::new(p.UART7, p.PF6, p.PF7, p.DMA1_0, NoDma, config); + + for n in 0u32.. { + let mut s: String<128> = String::new(); + core::write!(&mut s, "Hello DMA World {}!\r\n", n).unwrap(); + + usart.write(s.as_bytes()).await.ok(); + + info!("wrote DMA"); + } + +} + +struct ZeroClock; + +impl Clock for ZeroClock { + fn now(&self) -> u64 { + 0 + } +} + +static EXECUTOR: Forever = Forever::new(); + +#[entry] +fn main() -> ! { + info!("Hello World!"); + + let pp = pac::Peripherals::take().unwrap(); + + let pwrcfg = pp.PWR.constrain().freeze(); + + let rcc = pp.RCC.constrain(); + + rcc.sys_ck(96.mhz()) + .pclk1(48.mhz()) + .pclk2(48.mhz()) + .pclk3(48.mhz()) + .pclk4(48.mhz()) + .pll1_q_ck(48.mhz()) + .freeze(pwrcfg, &pp.SYSCFG); + + let pp = unsafe { pac::Peripherals::steal() }; + + pp.DBGMCU.cr.modify(|_, w| { + w.dbgsleep_d1().set_bit(); + w.dbgstby_d1().set_bit(); + w.dbgstop_d1().set_bit(); + w.d1dbgcken().set_bit(); + w + }); + + pp.RCC.ahb4enr.modify(|_, w| { + w.gpioaen().set_bit(); + w.gpioben().set_bit(); + w.gpiocen().set_bit(); + w.gpioden().set_bit(); + w.gpioeen().set_bit(); + w.gpiofen().set_bit(); + w + }); + + unsafe { embassy::time::set_clock(&ZeroClock) }; + + let executor = EXECUTOR.put(Executor::new()); + + executor.run(|spawner| { + unwrap!(spawner.spawn(main_task())); + }) +} -- cgit From d7176da37c372d8a57283af540f4fecb532540aa Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Sat, 17 Jul 2021 08:04:33 +0200 Subject: stm32/examples: update DMA channel names --- examples/stm32f4/src/bin/usart_dma.rs | 2 +- examples/stm32h7/src/bin/usart_dma.rs | 2 +- examples/stm32l4/src/bin/usart_dma.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'examples') diff --git a/examples/stm32f4/src/bin/usart_dma.rs b/examples/stm32f4/src/bin/usart_dma.rs index 39e199d58..b578aebca 100644 --- a/examples/stm32f4/src/bin/usart_dma.rs +++ b/examples/stm32f4/src/bin/usart_dma.rs @@ -25,7 +25,7 @@ async fn main_task() { let p = embassy_stm32::init(Default::default()); let config = Config::default(); - let mut usart = Uart::new(p.USART3, p.PD9, p.PD8, p.DMA1_3, NoDma, config); + let mut usart = Uart::new(p.USART3, p.PD9, p.PD8, p.DMA1_CH3, NoDma, config); for n in 0u32.. { let mut s: String<128> = String::new(); diff --git a/examples/stm32h7/src/bin/usart_dma.rs b/examples/stm32h7/src/bin/usart_dma.rs index fd5da8b35..0073d5c66 100644 --- a/examples/stm32h7/src/bin/usart_dma.rs +++ b/examples/stm32h7/src/bin/usart_dma.rs @@ -29,7 +29,7 @@ async fn main_task() { let p = embassy_stm32::init(Default::default()); let config = Config::default(); - let mut usart = Uart::new(p.UART7, p.PF6, p.PF7, p.DMA1_0, NoDma, config); + let mut usart = Uart::new(p.UART7, p.PF6, p.PF7, p.DMA1_CH0, NoDma, config); for n in 0u32.. { let mut s: String<128> = String::new(); diff --git a/examples/stm32l4/src/bin/usart_dma.rs b/examples/stm32l4/src/bin/usart_dma.rs index 12857bc78..e325e3da3 100644 --- a/examples/stm32l4/src/bin/usart_dma.rs +++ b/examples/stm32l4/src/bin/usart_dma.rs @@ -25,7 +25,7 @@ async fn main_task() { let p = embassy_stm32::init(Default::default()); let config = Config::default(); - let mut usart = Uart::new(p.UART4, p.PA1, p.PA0, p.DMA1_3, NoDma, config); + let mut usart = Uart::new(p.UART4, p.PA1, p.PA0, p.DMA1_CH3, NoDma, config); for n in 0u32.. { let mut s: String<128> = String::new(); -- cgit