diff options
| author | Chen Yuheng <[email protected]> | 2024-06-18 17:01:37 +0800 |
|---|---|---|
| committer | Chen Yuheng <[email protected]> | 2024-06-18 17:01:37 +0800 |
| commit | bbe8d3d38a03c66b9c8e2bb70ae067f8ad674059 (patch) | |
| tree | c9e65d2ad2cc302cf0f550f629eb3da9f7a6b9b9 /examples/stm32g0 | |
| parent | 3c414e99cb3df9a040a92ac413aa3d87faf87dc3 (diff) | |
Add stm32g0 examples
Diffstat (limited to 'examples/stm32g0')
| -rw-r--r-- | examples/stm32g0/Cargo.toml | 2 | ||||
| -rw-r--r-- | examples/stm32g0/src/bin/adc.rs | 34 | ||||
| -rw-r--r-- | examples/stm32g0/src/bin/rtc.rs | 31 | ||||
| -rw-r--r-- | examples/stm32g0/src/bin/usart.rs | 25 | ||||
| -rw-r--r-- | examples/stm32g0/src/bin/usart_buffered.rs | 34 | ||||
| -rw-r--r-- | examples/stm32g0/src/bin/usart_dma.rs | 27 |
6 files changed, 153 insertions, 0 deletions
diff --git a/examples/stm32g0/Cargo.toml b/examples/stm32g0/Cargo.toml index 15e58d5d1..b9d710ca7 100644 --- a/examples/stm32g0/Cargo.toml +++ b/examples/stm32g0/Cargo.toml | |||
| @@ -23,5 +23,7 @@ panic-probe = { version = "0.3", features = ["print-defmt"] } | |||
| 23 | heapless = { version = "0.8", default-features = false } | 23 | heapless = { version = "0.8", default-features = false } |
| 24 | portable-atomic = { version = "1.5", features = ["unsafe-assume-single-core"] } | 24 | portable-atomic = { version = "1.5", features = ["unsafe-assume-single-core"] } |
| 25 | 25 | ||
| 26 | embedded-io-async = { version = "0.6.1" } | ||
| 27 | |||
| 26 | [profile.release] | 28 | [profile.release] |
| 27 | debug = 2 | 29 | debug = 2 |
diff --git a/examples/stm32g0/src/bin/adc.rs b/examples/stm32g0/src/bin/adc.rs new file mode 100644 index 000000000..a35119e3d --- /dev/null +++ b/examples/stm32g0/src/bin/adc.rs | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | #![no_std] | ||
| 2 | #![no_main] | ||
| 3 | |||
| 4 | use defmt::*; | ||
| 5 | use embassy_executor::Spawner; | ||
| 6 | use embassy_stm32::adc::{Adc, SampleTime}; | ||
| 7 | use embassy_time::Timer; | ||
| 8 | use {defmt_rtt as _, panic_probe as _}; | ||
| 9 | |||
| 10 | #[embassy_executor::main] | ||
| 11 | async fn main(_spawner: Spawner) { | ||
| 12 | let p = embassy_stm32::init(Default::default()); | ||
| 13 | info!("Hello World!"); | ||
| 14 | |||
| 15 | let mut adc = Adc::new(p.ADC1); | ||
| 16 | adc.set_sample_time(SampleTime::CYCLES79_5); | ||
| 17 | let mut pin = p.PA1; | ||
| 18 | |||
| 19 | let mut vrefint = adc.enable_vrefint(); | ||
| 20 | let vrefint_sample = adc.read(&mut vrefint); | ||
| 21 | let convert_to_millivolts = |sample| { | ||
| 22 | // From https://www.st.com/resource/en/datasheet/stm32g031g8.pdf | ||
| 23 | // 6.3.3 Embedded internal reference voltage | ||
| 24 | const VREFINT_MV: u32 = 1212; // mV | ||
| 25 | |||
| 26 | (u32::from(sample) * VREFINT_MV / u32::from(vrefint_sample)) as u16 | ||
| 27 | }; | ||
| 28 | |||
| 29 | loop { | ||
| 30 | let v = adc.read(&mut pin); | ||
| 31 | info!("--> {} - {} mV", v, convert_to_millivolts(v)); | ||
| 32 | Timer::after_millis(100).await; | ||
| 33 | } | ||
| 34 | } | ||
diff --git a/examples/stm32g0/src/bin/rtc.rs b/examples/stm32g0/src/bin/rtc.rs new file mode 100644 index 000000000..c02c1ecd7 --- /dev/null +++ b/examples/stm32g0/src/bin/rtc.rs | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | #![no_std] | ||
| 2 | #![no_main] | ||
| 3 | |||
| 4 | use defmt::*; | ||
| 5 | use embassy_executor::Spawner; | ||
| 6 | use embassy_stm32::rtc::{DateTime, DayOfWeek, Rtc, RtcConfig}; | ||
| 7 | use embassy_stm32::Config; | ||
| 8 | use embassy_time::Timer; | ||
| 9 | use {defmt_rtt as _, panic_probe as _}; | ||
| 10 | |||
| 11 | #[embassy_executor::main] | ||
| 12 | async fn main(_spawner: Spawner) { | ||
| 13 | let config = Config::default(); | ||
| 14 | let p = embassy_stm32::init(config); | ||
| 15 | |||
| 16 | info!("Hello World!"); | ||
| 17 | |||
| 18 | let now = DateTime::from(2023, 6, 14, DayOfWeek::Friday, 15, 59, 10); | ||
| 19 | |||
| 20 | let mut rtc = Rtc::new(p.RTC, RtcConfig::default()); | ||
| 21 | |||
| 22 | rtc.set_datetime(now.unwrap()).expect("datetime not set"); | ||
| 23 | |||
| 24 | loop { | ||
| 25 | let now: DateTime = rtc.now().unwrap().into(); | ||
| 26 | |||
| 27 | info!("{}:{}:{}", now.hour(), now.minute(), now.second()); | ||
| 28 | |||
| 29 | Timer::after_millis(1000).await; | ||
| 30 | } | ||
| 31 | } | ||
diff --git a/examples/stm32g0/src/bin/usart.rs b/examples/stm32g0/src/bin/usart.rs new file mode 100644 index 000000000..037a5c833 --- /dev/null +++ b/examples/stm32g0/src/bin/usart.rs | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | #![no_std] | ||
| 2 | #![no_main] | ||
| 3 | |||
| 4 | use defmt::*; | ||
| 5 | use embassy_stm32::usart::{Config, Uart}; | ||
| 6 | use {defmt_rtt as _, panic_probe as _}; | ||
| 7 | |||
| 8 | #[cortex_m_rt::entry] | ||
| 9 | fn main() -> ! { | ||
| 10 | info!("Hello World!"); | ||
| 11 | |||
| 12 | let p = embassy_stm32::init(Default::default()); | ||
| 13 | |||
| 14 | let config = Config::default(); | ||
| 15 | let mut usart = Uart::new_blocking(p.USART2, p.PA3, p.PA2, config).unwrap(); | ||
| 16 | |||
| 17 | unwrap!(usart.blocking_write(b"Hello Embassy World!\r\n")); | ||
| 18 | info!("wrote Hello, starting echo"); | ||
| 19 | |||
| 20 | let mut buf = [0u8; 1]; | ||
| 21 | loop { | ||
| 22 | unwrap!(usart.blocking_read(&mut buf)); | ||
| 23 | unwrap!(usart.blocking_write(&buf)); | ||
| 24 | } | ||
| 25 | } | ||
diff --git a/examples/stm32g0/src/bin/usart_buffered.rs b/examples/stm32g0/src/bin/usart_buffered.rs new file mode 100644 index 000000000..c097a0c5a --- /dev/null +++ b/examples/stm32g0/src/bin/usart_buffered.rs | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | #![no_std] | ||
| 2 | #![no_main] | ||
| 3 | |||
| 4 | use defmt::*; | ||
| 5 | use embassy_executor::Spawner; | ||
| 6 | use embassy_stm32::usart::{BufferedUart, Config}; | ||
| 7 | use embassy_stm32::{bind_interrupts, peripherals, usart}; | ||
| 8 | use embedded_io_async::{Read, Write}; | ||
| 9 | use {defmt_rtt as _, panic_probe as _}; | ||
| 10 | |||
| 11 | bind_interrupts!(struct Irqs { | ||
| 12 | USART1 => usart::BufferedInterruptHandler<peripherals::USART1>; | ||
| 13 | }); | ||
| 14 | |||
| 15 | #[embassy_executor::main] | ||
| 16 | async fn main(_spawner: Spawner) { | ||
| 17 | let p = embassy_stm32::init(Default::default()); | ||
| 18 | info!("Hi!"); | ||
| 19 | |||
| 20 | let mut config = Config::default(); | ||
| 21 | config.baudrate = 115200; | ||
| 22 | let mut tx_buf = [0u8; 256]; | ||
| 23 | let mut rx_buf = [0u8; 256]; | ||
| 24 | let mut usart = BufferedUart::new(p.USART1, Irqs, p.PB7, p.PB6, &mut tx_buf, &mut rx_buf, config).unwrap(); | ||
| 25 | |||
| 26 | usart.write_all(b"Hello Embassy World!\r\n").await.unwrap(); | ||
| 27 | info!("wrote Hello, starting echo"); | ||
| 28 | |||
| 29 | let mut buf = [0; 4]; | ||
| 30 | loop { | ||
| 31 | usart.read_exact(&mut buf[..]).await.unwrap(); | ||
| 32 | usart.write_all(&buf[..]).await.unwrap(); | ||
| 33 | } | ||
| 34 | } | ||
diff --git a/examples/stm32g0/src/bin/usart_dma.rs b/examples/stm32g0/src/bin/usart_dma.rs new file mode 100644 index 000000000..8212153ab --- /dev/null +++ b/examples/stm32g0/src/bin/usart_dma.rs | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | #![no_std] | ||
| 2 | #![no_main] | ||
| 3 | |||
| 4 | use defmt::*; | ||
| 5 | use embassy_executor::Spawner; | ||
| 6 | use embassy_stm32::usart::{Config, Uart}; | ||
| 7 | use embassy_stm32::{bind_interrupts, peripherals, usart}; | ||
| 8 | use {defmt_rtt as _, panic_probe as _}; | ||
| 9 | |||
| 10 | bind_interrupts!(struct Irqs { | ||
| 11 | USART1 => usart::InterruptHandler<peripherals::USART1>; | ||
| 12 | }); | ||
| 13 | |||
| 14 | #[embassy_executor::main] | ||
| 15 | async fn main(_spawner: Spawner) { | ||
| 16 | let p = embassy_stm32::init(Default::default()); | ||
| 17 | let mut usart = Uart::new(p.USART1, p.PB7, p.PB6, Irqs, p.DMA1_CH2, p.DMA1_CH3, Config::default()).unwrap(); | ||
| 18 | |||
| 19 | usart.write(b"Hello Embassy World!\r\n").await.unwrap(); | ||
| 20 | info!("wrote Hello, starting echo"); | ||
| 21 | |||
| 22 | let mut buf = [0; 5]; | ||
| 23 | loop { | ||
| 24 | usart.read(&mut buf[..]).await.unwrap(); | ||
| 25 | usart.write(&buf[..]).await.unwrap(); | ||
| 26 | } | ||
| 27 | } | ||
