Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
{
"rust-analyzer.check.allTargets": false,
"rust-analyzer.check.extraArgs": [
"--examples",
],
"rust-analyzer.check.extraArgs": ["--examples"],
"rust-analyzer.cargo.target": "thumbv7em-none-eabihf",
"rust-analyzer.cargo.features": [
"stm32g484",
Expand Down
231 changes: 217 additions & 14 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -80,19 +80,225 @@ rt = ["stm32g4/rt"]
usb = ["dep:stm32-usbd"]
stm32g431 = ["stm32g4/stm32g431", "cat2"]
stm32g441 = ["stm32g4/stm32g441", "cat2"]
stm32g473 = ["stm32g4/stm32g473", "cat3", "adc3", "adc4", "adc5"]
stm32g474 = ["stm32g4/stm32g474", "cat3", "adc3", "adc4", "adc5"]
stm32g483 = ["stm32g4/stm32g483", "cat3", "adc3", "adc4", "adc5"]
stm32g484 = ["stm32g4/stm32g484", "cat3", "adc3", "adc4", "adc5"]
stm32g491 = ["stm32g4/stm32g491", "cat4", "adc3"]
stm32g4a1 = ["stm32g4/stm32g4a1", "cat4", "adc3"]
stm32g473 = ["stm32g4/stm32g473", "cat3"]
stm32g474 = ["stm32g4/stm32g474", "cat3"]
stm32g483 = ["stm32g4/stm32g483", "cat3"]
stm32g484 = ["stm32g4/stm32g484", "cat3"]
stm32g491 = ["stm32g4/stm32g491", "cat4"]
stm32g4a1 = ["stm32g4/stm32g4a1", "cat4"]

gpio-g43x = [
"comp1",
"comp2",
"comp3",
"comp4",
"crs",
"fdcan1",
"gpioa",
"gpiob",
"gpioc",
"gpiod",
"gpioe",
"gpiof",
"gpiog",
"i2c1",
"i2c2",
"i2c3",
"i2s",
"i2s2",
"i2s3",
"ir",
"lptim1",
"lpuart1",
"rcc",
"rtc",
"sai1",
"spi1",
"spi2",
"spi3",
"sys",
"tim1",
"tim15",
"tim16",
"tim17",
"tim2",
"tim3",
"tim4",
"tim8",
"uart4",
"ucpd1",
"usart1",
"usart2",
"usart3",
]
gpio-g47x = [
"adc3",
"adc4",
"adc5",
"comp1",
"comp2",
"comp3",
"comp4",
"comp5",
"comp6",
"comp7",
"crs",
"fdcan1",
"fdcan2",
"fdcan3",
"fmc",
"gpioa",
"gpiob",
"gpioc",
"gpiod",
"gpioe",
"gpiof",
"gpiog",
"hrtim1",
"i2c1",
"i2c2",
"i2c3",
"i2c4",
"i2s",
"i2s2",
"i2s3",
"ir",
"lptim1",
"lpuart1",
"quadspi1",
"rcc",
"rtc",
"sai1",
"spi1",
"spi2",
"spi3",
"spi4",
"sys",
"tim1",
"tim15",
"tim16",
"tim17",
"tim2",
"tim20",
"tim3",
"tim4",
"tim5",
"tim8",
"uart4",
"uart5",
"ucpd1",
"usart1",
"usart2",
"usart3",
]
gpio-g49x = [
"adc3",
"comp1",
"comp2",
"comp3",
"comp4",
"crs",
"fdcan1",
"fdcan2",
"gpioa",
"gpiob",
"gpioc",
"gpiod",
"gpioe",
"gpiof",
"gpiog",
"i2c1",
"i2c2",
"i2c3",
"i2s",
"i2s2",
"i2s3",
"ir",
"lptim1",
"lpuart1",
"quadspi1",
"rcc",
"rtc",
"sai1",
"spi1",
"spi2",
"spi3",
"sys",
"tim1",
"tim15",
"tim16",
"tim17",
"tim2",
"tim20",
"tim3",
"tim4",
"tim8",
"uart4",
"uart5",
"ucpd1",
"usart1",
"usart2",
"usart3",
]

gpio-g43x = []

gpio-g47x = []

gpio-g49x = []
adc3 = []
adc4 = []
adc5 = []
comp1 = []
comp2 = []
comp3 = []
comp4 = []
comp5 = []
comp6 = []
comp7 = []
crs = []
fdcan1 = []
fdcan2 = []
fdcan3 = []
fmc = []
gpioa = []
gpiob = []
gpioc = []
gpiod = []
gpioe = []
gpiof = []
gpiog = []
hrtim1 = []
i2c1 = []
i2c2 = []
i2c3 = []
i2c4 = []
i2s = []
i2s2 = []
i2s3 = []
ir = []
lptim1 = []
lpuart1 = []
quadspi1 = []
rcc = []
rtc = []
sai1 = []
spi1 = []
spi2 = []
spi3 = []
spi4 = []
sys = []
tim1 = []
tim15 = []
tim16 = []
tim17 = []
tim2 = []
tim20 = []
tim3 = []
tim4 = []
tim5 = []
tim8 = []
uart4 = []
uart5 = []
ucpd1 = []
usart1 = []
usart2 = []
usart3 = []

log-itm = ["cortex-m-log/itm"]
log-rtt = []
Expand All @@ -106,9 +312,6 @@ defmt = [
"embedded-io/defmt-03",
]
cordic = ["dep:fixed"]
adc3 = []
adc4 = []
adc5 = []

# Device category
cat2 = ["gpio-g43x"]
Expand Down
3 changes: 1 addition & 2 deletions examples/adc-continious.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ fn main() -> ! {

info!("Setup Gpio");
let gpioa = dp.GPIOA.split(&mut rcc);
let pa0 = gpioa.pa0.into_analog();

info!("Setup Adc1");
let mut delay = cp.SYST.delay(&rcc.clocks);
Expand All @@ -54,7 +53,7 @@ fn main() -> ! {
adc.set_auto_delay(true);
adc.set_continuous(Continuous::Continuous);
adc.reset_sequence();
adc.configure_channel(&pa0, Sequence::One, SampleTime::Cycles_640_5);
adc.configure_channel(&gpioa.pa0, Sequence::One, SampleTime::Cycles_640_5);
adc.configure_channel(&Vref, Sequence::Two, SampleTime::Cycles_640_5);
adc.configure_channel(&Temperature, Sequence::Three, SampleTime::Cycles_640_5);
let adc = adc.enable();
Expand Down
3 changes: 1 addition & 2 deletions examples/adc-one-shot.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,12 @@ fn main() -> ! {
info!("Setup Gpio");

let gpioa = dp.GPIOA.split(&mut rcc);
let pa7 = gpioa.pa7.into_analog();

info!("Enter Loop");

loop {
info!("Convert");
let sample = adc.convert(&pa7, SampleTime::Cycles_640_5);
let sample = adc.convert(&gpioa.pa7, SampleTime::Cycles_640_5);
info!("sample to mv");
let millivolts = adc.sample_to_millivolts(sample);
info!("pa7: {}mV", millivolts);
Expand Down
2 changes: 1 addition & 1 deletion examples/button.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ use cortex_m_rt::entry;

type ButtonPin = gpio::PC13<Input>;

// Make LED pin globally available
// Make LED and BUTTON pins globally available
static G_BUTTON: Mutex<RefCell<Option<ButtonPin>>> = Mutex::new(RefCell::new(None));
static G_LED_ON: AtomicBool = AtomicBool::new(true);

Expand Down
2 changes: 1 addition & 1 deletion examples/can-echo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ fn main() -> ! {
let tx = gpiob.pb9.into_alternate().speed(Speed::VeryHigh);

info!("-- Create CAN 1 instance");
let mut can = dp.FDCAN1.fdcan(tx, rx, &mut rcc);
let mut can = dp.FDCAN1.fdcan((tx, rx), &mut rcc);
can.set_protocol_exception_handling(false);

info!("-- Configure nominal timing");
Expand Down
34 changes: 14 additions & 20 deletions examples/comp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,53 +9,47 @@
#![no_std]

mod utils;
extern crate cortex_m_rt as rt;

use rt::entry;
use cortex_m_rt::entry;

#[entry]
fn main() -> ! {
use hal::comparator::{refint_input, ComparatorExt, ComparatorSplit, Config, Hysteresis};
use hal::gpio::GpioExt;
use hal::rcc::RccExt;
use hal::stm32;
use stm32g4xx_hal as hal;

let dp = stm32::Peripherals::take().expect("cannot take peripherals");
use stm32g4xx_hal::{
comparator::{refint_input, ComparatorExt, ComparatorSplit, Config, Hysteresis},
gpio::{GpioExt, PushPull},
pac,
rcc::RccExt,
};

let dp = pac::Peripherals::take().expect("cannot take peripherals");
let mut rcc = dp.RCC.constrain();

let gpioa = dp.GPIOA.split(&mut rcc);

let (comp1, comp2, ..) = dp.COMP.split(&mut rcc);

let pa1 = gpioa.pa1.into_analog();
let pa0 = gpioa.pa0.into_analog();
let comp1 = comp1.comparator(pa1, pa0, Config::default(), &rcc.clocks);
let comp1 = comp1.comparator(gpioa.pa1, gpioa.pa0, Config::default(), &rcc.clocks);
let comp1 = comp1.enable();

// led1 pa1 will be updated manually when to match comp1 value
let mut led1 = gpioa.pa5.into_push_pull_output();

let pa7 = gpioa.pa7.into_analog();
let comp2 = comp2.comparator(
pa7,
gpioa.pa7,
refint_input::VRefintM12,
Config::default()
.hysteresis(Hysteresis::None)
.output_inverted(),
&rcc.clocks,
);
let led2 = gpioa.pa12.into_push_pull_output();
let led2 = gpioa.pa12;
// Configure PA12 to the comparator's alternate function so it gets
// changed directly by the comparator.
comp2.output_pin(led2);
comp2.output_pin::<PushPull>(led2);
let _comp2 = comp2.enable().lock();

loop {
// Read comp1 output and update led1 accordingly
match comp1.output() {
true => led1.set_high(),
false => led1.set_low(),
}
led1.set_state(comp1.output().into());
}
}
Loading
Loading