Skip to content
Draft
Show file tree
Hide file tree
Changes from 2 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