1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-01-05 16:10:31 +02:00

Add pages with PAC and HAL examples.

This commit is contained in:
Andrew Walbran 2023-02-02 16:13:24 +00:00
parent 780afddc11
commit f8f6922b0c
10 changed files with 77 additions and 6 deletions

View File

@ -239,9 +239,9 @@
- [`no_std`](bare-metal/no_std.md)
- [A minimal example](bare-metal/minimal.md)
- [`alloc`](bare-metal/alloc.md)
- [Microcontrollers]()
- [PACs]()
- [HAL crates]()
- [Microcontrollers](bare-metal/microcontrollers.md)
- [PACs](bare-metal/microcontrollers/pacs.md)
- [HAL crates](bare-metal/microcontrollers/hals.md)
- [The type state pattern]()
# Day 5A: Afternoon

View File

@ -0,0 +1 @@
# Microcontrollers

View File

@ -121,11 +121,12 @@ dependencies = [
]
[[package]]
name = "microcontroller-example"
name = "microcontroller-examples"
version = "0.1.0"
dependencies = [
"cortex-m-rt",
"embedded-hal",
"gd32f1",
"gd32f1x0-hal",
"panic-halt",
]

View File

@ -1,10 +1,17 @@
[package]
name = "microcontroller-example"
name = "microcontroller-examples"
version = "0.1.0"
edition = "2021"
[dependencies]
cortex-m-rt = "0.7.0"
embedded-hal = "0.2.6"
gd32f1 = { version = "0.6.0", features = ["gd32f130", "rt"] }
gd32f1x0-hal = { version = "0.7.1", features = ["rt", "gd32f130x8"] }
panic-halt = "0.2.0"
[[bin]]
name = "pac"
[[bin]]
name = "hal"

View File

@ -19,17 +19,20 @@
extern crate panic_halt as _;
use cortex_m_rt::entry;
use embedded_hal::digital::v2::OutputPin;
use gd32f1x0_hal::{pac::Peripherals, prelude::*};
#[entry]
fn main() -> ! {
let p = Peripherals::take().unwrap();
let mut rcu = p.RCU.constrain();
// Enable GPIOC.
let mut gpioc = p.GPIOC.split(&mut rcu.ahb);
// Configure PC9 as a push-pull output.
let mut led = gpioc.pc9.into_push_pull_output(&mut gpioc.config);
// Set PC9 high to turn the LED on.
led.set_high().unwrap();
loop {}

View File

@ -0,0 +1,41 @@
// Copyright 2023 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ANCHOR: Example
#![no_main]
#![no_std]
extern crate panic_halt as _;
use cortex_m_rt::entry;
use gd32f1::gd32f130::Peripherals;
#[entry]
fn main() -> ! {
let p = Peripherals::take().unwrap();
let gpioc = p.GPIOC;
// Enable GPIOC.
p.RCU.ahben.modify(|_, w| w.pcen().enabled());
// Configure PC9 as a push-pull output.
gpioc.pud.modify(|_, w| w.pud9().floating());
gpioc.omode.modify(|_, w| w.om9().push_pull());
gpioc.ctl.modify(|_, w| w.ctl9().output());
// Set PC9 high to turn the LED on.
gpioc.bop.write(|w| w.bop9().set());
loop {}
}

View File

@ -0,0 +1,5 @@
# HAL crates
```rust,editable,compile_fail
{{#include examples/src/bin/hal.rs:Example}}
```

View File

@ -0,0 +1,13 @@
# PACs
```rust,editable,compile_fail
{{#include examples/src/bin/pac.rs:Example}}
```
<details>
* `cortex-m-rt` provides the vector table, among other things.
* If you `cargo install cargo-binutils` then you can run
`cargo objdump --bin pac -- -d --no-show-raw-insn` to see the resulting binary.
</details>