8
									
								
								.github/workflows/rust.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/rust.yml
									
									
									
									
										vendored
									
									
								
							| @@ -57,6 +57,14 @@ jobs: | |||||||
|             features: nrf52840,defmt |             features: nrf52840,defmt | ||||||
|           - package: embassy-rp-examples |           - package: embassy-rp-examples | ||||||
|             target: thumbv6m-none-eabi |             target: thumbv6m-none-eabi | ||||||
|  |           - package: embassy-stm32 | ||||||
|  |             target: thumbv7em-none-eabi | ||||||
|  |             features: stm32f411ce | ||||||
|  |           - package: embassy-stm32 | ||||||
|  |             target: thumbv7em-none-eabi | ||||||
|  |             features: stm32f429zi | ||||||
|  |           - package: embassy-stm32-examples | ||||||
|  |             target: thumbv7em-none-eabi | ||||||
|  |  | ||||||
|     steps: |     steps: | ||||||
|       - uses: actions/checkout@v2 |       - uses: actions/checkout@v2 | ||||||
|   | |||||||
| @@ -153,7 +153,9 @@ impl_pin!(P0_30, 0, 30); | |||||||
| impl_pin!(P0_31, 0, 31); | impl_pin!(P0_31, 0, 31); | ||||||
|  |  | ||||||
| pub mod irqs { | pub mod irqs { | ||||||
|  |     use crate::pac::Interrupt as InterruptEnum; | ||||||
|     use embassy_macros::interrupt_declare as declare; |     use embassy_macros::interrupt_declare as declare; | ||||||
|  |  | ||||||
|     declare!(POWER_CLOCK); |     declare!(POWER_CLOCK); | ||||||
|     declare!(RADIO); |     declare!(RADIO); | ||||||
|     declare!(UARTE0_UART0); |     declare!(UARTE0_UART0); | ||||||
|   | |||||||
| @@ -158,7 +158,9 @@ impl_pin!(P0_30, 0, 30); | |||||||
| impl_pin!(P0_31, 0, 31); | impl_pin!(P0_31, 0, 31); | ||||||
|  |  | ||||||
| pub mod irqs { | pub mod irqs { | ||||||
|  |     use crate::pac::Interrupt as InterruptEnum; | ||||||
|     use embassy_macros::interrupt_declare as declare; |     use embassy_macros::interrupt_declare as declare; | ||||||
|  |  | ||||||
|     declare!(POWER_CLOCK); |     declare!(POWER_CLOCK); | ||||||
|     declare!(RADIO); |     declare!(RADIO); | ||||||
|     declare!(UARTE0_UART0); |     declare!(UARTE0_UART0); | ||||||
|   | |||||||
| @@ -159,7 +159,9 @@ impl_pin!(P0_30, 0, 30); | |||||||
| impl_pin!(P0_31, 0, 31); | impl_pin!(P0_31, 0, 31); | ||||||
|  |  | ||||||
| pub mod irqs { | pub mod irqs { | ||||||
|  |     use crate::pac::Interrupt as InterruptEnum; | ||||||
|     use embassy_macros::interrupt_declare as declare; |     use embassy_macros::interrupt_declare as declare; | ||||||
|  |  | ||||||
|     declare!(POWER_CLOCK); |     declare!(POWER_CLOCK); | ||||||
|     declare!(RADIO); |     declare!(RADIO); | ||||||
|     declare!(UARTE0_UART0); |     declare!(UARTE0_UART0); | ||||||
|   | |||||||
| @@ -157,7 +157,9 @@ impl_pin!(P0_30, 0, 30); | |||||||
| impl_pin!(P0_31, 0, 31); | impl_pin!(P0_31, 0, 31); | ||||||
|  |  | ||||||
| pub mod irqs { | pub mod irqs { | ||||||
|  |     use crate::pac::Interrupt as InterruptEnum; | ||||||
|     use embassy_macros::interrupt_declare as declare; |     use embassy_macros::interrupt_declare as declare; | ||||||
|  |  | ||||||
|     declare!(POWER_CLOCK); |     declare!(POWER_CLOCK); | ||||||
|     declare!(RADIO); |     declare!(RADIO); | ||||||
|     declare!(UARTE0_UART0); |     declare!(UARTE0_UART0); | ||||||
|   | |||||||
| @@ -172,7 +172,9 @@ impl_pin!(P0_30, 0, 30); | |||||||
| impl_pin!(P0_31, 0, 31); | impl_pin!(P0_31, 0, 31); | ||||||
|  |  | ||||||
| pub mod irqs { | pub mod irqs { | ||||||
|  |     use crate::pac::Interrupt as InterruptEnum; | ||||||
|     use embassy_macros::interrupt_declare as declare; |     use embassy_macros::interrupt_declare as declare; | ||||||
|  |  | ||||||
|     declare!(POWER_CLOCK); |     declare!(POWER_CLOCK); | ||||||
|     declare!(RADIO); |     declare!(RADIO); | ||||||
|     declare!(UARTE0_UART0); |     declare!(UARTE0_UART0); | ||||||
|   | |||||||
| @@ -212,7 +212,9 @@ impl_pin!(P1_14, 1, 14); | |||||||
| impl_pin!(P1_15, 1, 15); | impl_pin!(P1_15, 1, 15); | ||||||
|  |  | ||||||
| pub mod irqs { | pub mod irqs { | ||||||
|  |     use crate::pac::Interrupt as InterruptEnum; | ||||||
|     use embassy_macros::interrupt_declare as declare; |     use embassy_macros::interrupt_declare as declare; | ||||||
|  |  | ||||||
|     declare!(POWER_CLOCK); |     declare!(POWER_CLOCK); | ||||||
|     declare!(RADIO); |     declare!(RADIO); | ||||||
|     declare!(UARTE0_UART0); |     declare!(UARTE0_UART0); | ||||||
|   | |||||||
| @@ -217,7 +217,9 @@ impl_pin!(P1_14, 1, 14); | |||||||
| impl_pin!(P1_15, 1, 15); | impl_pin!(P1_15, 1, 15); | ||||||
|  |  | ||||||
| pub mod irqs { | pub mod irqs { | ||||||
|  |     use crate::pac::Interrupt as InterruptEnum; | ||||||
|     use embassy_macros::interrupt_declare as declare; |     use embassy_macros::interrupt_declare as declare; | ||||||
|  |  | ||||||
|     declare!(POWER_CLOCK); |     declare!(POWER_CLOCK); | ||||||
|     declare!(RADIO); |     declare!(RADIO); | ||||||
|     declare!(UARTE0_UART0); |     declare!(UARTE0_UART0); | ||||||
|   | |||||||
| @@ -1,9 +1,8 @@ | |||||||
| use core::sync::atomic::{compiler_fence, Ordering}; | use core::sync::atomic::{compiler_fence, Ordering}; | ||||||
|  |  | ||||||
| use defmt::{assert, *}; | use crate::fmt::{assert, *}; | ||||||
|  | use crate::pac::dma::vals; | ||||||
| use crate::{pac, peripherals}; | use crate::{pac, peripherals}; | ||||||
| use pac::dma::vals; |  | ||||||
|  |  | ||||||
| pub struct Dma<T: Channel> { | pub struct Dma<T: Channel> { | ||||||
|     inner: T, |     inner: T, | ||||||
|   | |||||||
| @@ -9,6 +9,7 @@ pub use embassy_extras::interrupt::Priority3 as Priority; | |||||||
|  |  | ||||||
| mod irqs { | mod irqs { | ||||||
|     use super::*; |     use super::*; | ||||||
|  |     use crate::pac::Interrupt as InterruptEnum; | ||||||
|  |  | ||||||
|     declare!(TIMER_IRQ_0); |     declare!(TIMER_IRQ_0); | ||||||
|     declare!(TIMER_IRQ_1); |     declare!(TIMER_IRQ_1); | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| use core::ops::Deref; | use core::ops::Deref; | ||||||
| use defmt::{assert, *}; |  | ||||||
|  |  | ||||||
|  | use crate::fmt::{assert, *}; | ||||||
| use crate::pac; | use crate::pac; | ||||||
|  |  | ||||||
| const XOSC_MHZ: u32 = 12; | const XOSC_MHZ: u32 = 12; | ||||||
|   | |||||||
							
								
								
									
										17
									
								
								embassy-stm32-examples/src/example_common.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								embassy-stm32-examples/src/example_common.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | #![macro_use] | ||||||
|  |  | ||||||
|  | use defmt_rtt as _; // global logger | ||||||
|  | use panic_probe as _; | ||||||
|  |  | ||||||
|  | pub use defmt::*; | ||||||
|  |  | ||||||
|  | use core::sync::atomic::{AtomicUsize, Ordering}; | ||||||
|  |  | ||||||
|  | defmt::timestamp! {"{=u64}", { | ||||||
|  |         static COUNT: AtomicUsize = AtomicUsize::new(0); | ||||||
|  |         // NOTE(no-CAS) `timestamps` runs with interrupts disabled | ||||||
|  |         let n = COUNT.load(Ordering::Relaxed); | ||||||
|  |         COUNT.store(n + 1, Ordering::Relaxed); | ||||||
|  |         n as u64 | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -19,6 +19,7 @@ futures = { version = "0.3.5", default-features = false, features = ["async-awai | |||||||
| rand_core = { version = "0.6.2", optional = true } | rand_core = { version = "0.6.2", optional = true } | ||||||
| sdio-host = { version = "0.5.0", optional = true } | sdio-host = { version = "0.5.0", optional = true } | ||||||
| embedded-sdmmc = { git = "https://github.com/thalesfragoso/embedded-sdmmc-rs", branch = "async", optional = true } | embedded-sdmmc = { git = "https://github.com/thalesfragoso/embedded-sdmmc-rs", branch = "async", optional = true } | ||||||
|  | critical-section = "0.2.1" | ||||||
|  |  | ||||||
| [build-dependencies] | [build-dependencies] | ||||||
| regex = "1.4.6" | regex = "1.4.6" | ||||||
|   | |||||||
| @@ -184,4 +184,4 @@ pub(crate) unsafe fn init() { | |||||||
|     interrupt::DMA2_Stream5::steal().enable(); |     interrupt::DMA2_Stream5::steal().enable(); | ||||||
|     interrupt::DMA2_Stream6::steal().enable(); |     interrupt::DMA2_Stream6::steal().enable(); | ||||||
|     interrupt::DMA2_Stream7::steal().enable(); |     interrupt::DMA2_Stream7::steal().enable(); | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										114
									
								
								embassy-stm32/src/fmt.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								embassy-stm32/src/fmt.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,114 @@ | |||||||
|  | #![macro_use] | ||||||
|  | #![allow(clippy::module_inception)] | ||||||
|  | #![allow(unused)] | ||||||
|  |  | ||||||
|  | #[cfg(all(feature = "defmt", feature = "log"))] | ||||||
|  | compile_error!("You may not enable both `defmt` and `log` features."); | ||||||
|  |  | ||||||
|  | pub use fmt::*; | ||||||
|  |  | ||||||
|  | #[cfg(feature = "defmt")] | ||||||
|  | mod fmt { | ||||||
|  |     pub use defmt::{ | ||||||
|  |         assert, assert_eq, assert_ne, debug, debug_assert, debug_assert_eq, debug_assert_ne, error, | ||||||
|  |         info, panic, todo, trace, unreachable, unwrap, warn, | ||||||
|  |     }; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[cfg(feature = "log")] | ||||||
|  | mod fmt { | ||||||
|  |     pub use core::{ | ||||||
|  |         assert, assert_eq, assert_ne, debug_assert, debug_assert_eq, debug_assert_ne, panic, todo, | ||||||
|  |         unreachable, | ||||||
|  |     }; | ||||||
|  |     pub use log::{debug, error, info, trace, warn}; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[cfg(not(any(feature = "defmt", feature = "log")))] | ||||||
|  | mod fmt { | ||||||
|  |     #![macro_use] | ||||||
|  |  | ||||||
|  |     pub use core::{ | ||||||
|  |         assert, assert_eq, assert_ne, debug_assert, debug_assert_eq, debug_assert_ne, panic, todo, | ||||||
|  |         unreachable, | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     macro_rules! trace { | ||||||
|  |         ($($msg:expr),+ $(,)?) => { | ||||||
|  |             () | ||||||
|  |         }; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     macro_rules! debug { | ||||||
|  |         ($($msg:expr),+ $(,)?) => { | ||||||
|  |             () | ||||||
|  |         }; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     macro_rules! info { | ||||||
|  |         ($($msg:expr),+ $(,)?) => { | ||||||
|  |             () | ||||||
|  |         }; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     macro_rules! warn { | ||||||
|  |         ($($msg:expr),+ $(,)?) => { | ||||||
|  |             () | ||||||
|  |         }; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     macro_rules! error { | ||||||
|  |         ($($msg:expr),+ $(,)?) => { | ||||||
|  |             () | ||||||
|  |         }; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[cfg(not(feature = "defmt"))] | ||||||
|  | macro_rules! unwrap { | ||||||
|  |     ($arg:expr) => { | ||||||
|  |         match $crate::fmt::Try::into_result($arg) { | ||||||
|  |             ::core::result::Result::Ok(t) => t, | ||||||
|  |             ::core::result::Result::Err(e) => { | ||||||
|  |                 ::core::panic!("unwrap of `{}` failed: {:?}", ::core::stringify!($arg), e); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  |     ($arg:expr, $($msg:expr),+ $(,)? ) => { | ||||||
|  |         match $crate::fmt::Try::into_result($arg) { | ||||||
|  |             ::core::result::Result::Ok(t) => t, | ||||||
|  |             ::core::result::Result::Err(e) => { | ||||||
|  |                 ::core::panic!("unwrap of `{}` failed: {}: {:?}", ::core::stringify!($arg), ::core::format_args!($($msg,)*), e); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[derive(Debug, Copy, Clone, Eq, PartialEq)] | ||||||
|  | pub struct NoneError; | ||||||
|  |  | ||||||
|  | pub trait Try { | ||||||
|  |     type Ok; | ||||||
|  |     type Error; | ||||||
|  |     fn into_result(self) -> Result<Self::Ok, Self::Error>; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | impl<T> Try for Option<T> { | ||||||
|  |     type Ok = T; | ||||||
|  |     type Error = NoneError; | ||||||
|  |  | ||||||
|  |     #[inline] | ||||||
|  |     fn into_result(self) -> Result<T, NoneError> { | ||||||
|  |         self.ok_or(NoneError) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | impl<T, E> Try for Result<T, E> { | ||||||
|  |     type Ok = T; | ||||||
|  |     type Error = E; | ||||||
|  |  | ||||||
|  |     #[inline] | ||||||
|  |     fn into_result(self) -> Self { | ||||||
|  |         self | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -103,7 +103,11 @@ impl<'d, T: Instance> Uart<'d, T> { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     #[cfg(feature = "_dma_v2")] |     #[cfg(feature = "_dma_v2")] | ||||||
|     pub async fn write_dma(&mut self, ch: &mut impl crate::dma::Channel, buffer: &[u8]) -> Result<(), Error> { |     pub async fn write_dma( | ||||||
|  |         &mut self, | ||||||
|  |         ch: &mut impl crate::dma::Channel, | ||||||
|  |         buffer: &[u8], | ||||||
|  |     ) -> Result<(), Error> { | ||||||
|         let ch_func = 4; // USART3_TX |         let ch_func = 4; // USART3_TX | ||||||
|         let r = self.inner.regs(); |         let r = self.inner.regs(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -0,0 +1 @@ | |||||||
|  |  | ||||||
|   | |||||||
| @@ -11,6 +11,6 @@ pub mod delay; | |||||||
| pub mod flash; | pub mod flash; | ||||||
| pub mod gpio; | pub mod gpio; | ||||||
| pub mod i2c; | pub mod i2c; | ||||||
|  | pub mod rng; | ||||||
| pub mod spi; | pub mod spi; | ||||||
| pub mod uart; | pub mod uart; | ||||||
| pub mod rng; |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user