mirror of
https://github.com/embassy-rs/embassy.git
synced 2024-11-25 08:12:30 +00:00
Add stm32g0 examples
This commit is contained in:
parent
3c414e99cb
commit
bbe8d3d38a
@ -23,5 +23,7 @@ panic-probe = { version = "0.3", features = ["print-defmt"] }
|
||||
heapless = { version = "0.8", default-features = false }
|
||||
portable-atomic = { version = "1.5", features = ["unsafe-assume-single-core"] }
|
||||
|
||||
embedded-io-async = { version = "0.6.1" }
|
||||
|
||||
[profile.release]
|
||||
debug = 2
|
||||
|
34
examples/stm32g0/src/bin/adc.rs
Normal file
34
examples/stm32g0/src/bin/adc.rs
Normal file
@ -0,0 +1,34 @@
|
||||
#![no_std]
|
||||
#![no_main]
|
||||
|
||||
use defmt::*;
|
||||
use embassy_executor::Spawner;
|
||||
use embassy_stm32::adc::{Adc, SampleTime};
|
||||
use embassy_time::Timer;
|
||||
use {defmt_rtt as _, panic_probe as _};
|
||||
|
||||
#[embassy_executor::main]
|
||||
async fn main(_spawner: Spawner) {
|
||||
let p = embassy_stm32::init(Default::default());
|
||||
info!("Hello World!");
|
||||
|
||||
let mut adc = Adc::new(p.ADC1);
|
||||
adc.set_sample_time(SampleTime::CYCLES79_5);
|
||||
let mut pin = p.PA1;
|
||||
|
||||
let mut vrefint = adc.enable_vrefint();
|
||||
let vrefint_sample = adc.read(&mut vrefint);
|
||||
let convert_to_millivolts = |sample| {
|
||||
// From https://www.st.com/resource/en/datasheet/stm32g031g8.pdf
|
||||
// 6.3.3 Embedded internal reference voltage
|
||||
const VREFINT_MV: u32 = 1212; // mV
|
||||
|
||||
(u32::from(sample) * VREFINT_MV / u32::from(vrefint_sample)) as u16
|
||||
};
|
||||
|
||||
loop {
|
||||
let v = adc.read(&mut pin);
|
||||
info!("--> {} - {} mV", v, convert_to_millivolts(v));
|
||||
Timer::after_millis(100).await;
|
||||
}
|
||||
}
|
31
examples/stm32g0/src/bin/rtc.rs
Normal file
31
examples/stm32g0/src/bin/rtc.rs
Normal file
@ -0,0 +1,31 @@
|
||||
#![no_std]
|
||||
#![no_main]
|
||||
|
||||
use defmt::*;
|
||||
use embassy_executor::Spawner;
|
||||
use embassy_stm32::rtc::{DateTime, DayOfWeek, Rtc, RtcConfig};
|
||||
use embassy_stm32::Config;
|
||||
use embassy_time::Timer;
|
||||
use {defmt_rtt as _, panic_probe as _};
|
||||
|
||||
#[embassy_executor::main]
|
||||
async fn main(_spawner: Spawner) {
|
||||
let config = Config::default();
|
||||
let p = embassy_stm32::init(config);
|
||||
|
||||
info!("Hello World!");
|
||||
|
||||
let now = DateTime::from(2023, 6, 14, DayOfWeek::Friday, 15, 59, 10);
|
||||
|
||||
let mut rtc = Rtc::new(p.RTC, RtcConfig::default());
|
||||
|
||||
rtc.set_datetime(now.unwrap()).expect("datetime not set");
|
||||
|
||||
loop {
|
||||
let now: DateTime = rtc.now().unwrap().into();
|
||||
|
||||
info!("{}:{}:{}", now.hour(), now.minute(), now.second());
|
||||
|
||||
Timer::after_millis(1000).await;
|
||||
}
|
||||
}
|
25
examples/stm32g0/src/bin/usart.rs
Normal file
25
examples/stm32g0/src/bin/usart.rs
Normal file
@ -0,0 +1,25 @@
|
||||
#![no_std]
|
||||
#![no_main]
|
||||
|
||||
use defmt::*;
|
||||
use embassy_stm32::usart::{Config, Uart};
|
||||
use {defmt_rtt as _, panic_probe as _};
|
||||
|
||||
#[cortex_m_rt::entry]
|
||||
fn main() -> ! {
|
||||
info!("Hello World!");
|
||||
|
||||
let p = embassy_stm32::init(Default::default());
|
||||
|
||||
let config = Config::default();
|
||||
let mut usart = Uart::new_blocking(p.USART2, p.PA3, p.PA2, config).unwrap();
|
||||
|
||||
unwrap!(usart.blocking_write(b"Hello Embassy World!\r\n"));
|
||||
info!("wrote Hello, starting echo");
|
||||
|
||||
let mut buf = [0u8; 1];
|
||||
loop {
|
||||
unwrap!(usart.blocking_read(&mut buf));
|
||||
unwrap!(usart.blocking_write(&buf));
|
||||
}
|
||||
}
|
34
examples/stm32g0/src/bin/usart_buffered.rs
Normal file
34
examples/stm32g0/src/bin/usart_buffered.rs
Normal file
@ -0,0 +1,34 @@
|
||||
#![no_std]
|
||||
#![no_main]
|
||||
|
||||
use defmt::*;
|
||||
use embassy_executor::Spawner;
|
||||
use embassy_stm32::usart::{BufferedUart, Config};
|
||||
use embassy_stm32::{bind_interrupts, peripherals, usart};
|
||||
use embedded_io_async::{Read, Write};
|
||||
use {defmt_rtt as _, panic_probe as _};
|
||||
|
||||
bind_interrupts!(struct Irqs {
|
||||
USART1 => usart::BufferedInterruptHandler<peripherals::USART1>;
|
||||
});
|
||||
|
||||
#[embassy_executor::main]
|
||||
async fn main(_spawner: Spawner) {
|
||||
let p = embassy_stm32::init(Default::default());
|
||||
info!("Hi!");
|
||||
|
||||
let mut config = Config::default();
|
||||
config.baudrate = 115200;
|
||||
let mut tx_buf = [0u8; 256];
|
||||
let mut rx_buf = [0u8; 256];
|
||||
let mut usart = BufferedUart::new(p.USART1, Irqs, p.PB7, p.PB6, &mut tx_buf, &mut rx_buf, config).unwrap();
|
||||
|
||||
usart.write_all(b"Hello Embassy World!\r\n").await.unwrap();
|
||||
info!("wrote Hello, starting echo");
|
||||
|
||||
let mut buf = [0; 4];
|
||||
loop {
|
||||
usart.read_exact(&mut buf[..]).await.unwrap();
|
||||
usart.write_all(&buf[..]).await.unwrap();
|
||||
}
|
||||
}
|
27
examples/stm32g0/src/bin/usart_dma.rs
Normal file
27
examples/stm32g0/src/bin/usart_dma.rs
Normal file
@ -0,0 +1,27 @@
|
||||
#![no_std]
|
||||
#![no_main]
|
||||
|
||||
use defmt::*;
|
||||
use embassy_executor::Spawner;
|
||||
use embassy_stm32::usart::{Config, Uart};
|
||||
use embassy_stm32::{bind_interrupts, peripherals, usart};
|
||||
use {defmt_rtt as _, panic_probe as _};
|
||||
|
||||
bind_interrupts!(struct Irqs {
|
||||
USART1 => usart::InterruptHandler<peripherals::USART1>;
|
||||
});
|
||||
|
||||
#[embassy_executor::main]
|
||||
async fn main(_spawner: Spawner) {
|
||||
let p = embassy_stm32::init(Default::default());
|
||||
let mut usart = Uart::new(p.USART1, p.PB7, p.PB6, Irqs, p.DMA1_CH2, p.DMA1_CH3, Config::default()).unwrap();
|
||||
|
||||
usart.write(b"Hello Embassy World!\r\n").await.unwrap();
|
||||
info!("wrote Hello, starting echo");
|
||||
|
||||
let mut buf = [0; 5];
|
||||
loop {
|
||||
usart.read(&mut buf[..]).await.unwrap();
|
||||
usart.write(&buf[..]).await.unwrap();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user