Skip to main content

gpio/
gpio.rs

1#![no_std]
2#![no_main]
3
4use core::panic::PanicInfo;
5
6use embedded_hal::digital::{InputPin, OutputPin};
7use hal_mik32::gpio::port_0::{Pin09, Pin10};
8use hal_mik32::rcc::RCC;
9use mik32_pac::Peripherals;
10
11// GPIO 0.10 - button input.
12// GPIO 0.9  - LED output.
13#[unsafe(no_mangle)]
14pub extern "C" fn main() -> ! {
15    let p = Peripherals::take().unwrap();
16
17    let rcc_config = RCC::default();
18    RCC::init(&rcc_config);
19
20    p.pm.clk_apb_p_set().modify(|_, w| w.gpio_0().enable());
21    p.pm.clk_apb_m_set()
22        .modify(|_, w| w.pad_config().enable().pm().enable());
23
24    let mut led_pin = Pin09::new().into_output();
25    let mut button_pin = Pin10::new().into_pull_down_input();
26
27    loop {
28        if button_pin.is_high().unwrap() {
29            let _ = led_pin.set_high();
30        } else {
31            let _ = led_pin.set_low();
32        }
33
34        for _ in 0..1000 {
35            core::hint::spin_loop();
36        }
37    }
38}
39
40#[panic_handler]
41fn panic(_info: &PanicInfo) -> ! {
42    loop {}
43}
44
45#[unsafe(no_mangle)]
46#[inline(never)]
47pub extern "C" fn trap_handler() {
48    loop {}
49}