I want to do this, and I don't mind going unsafe and passing a ptr

```rust
    let mut p: embassy_stm32::Peripherals = embassy_stm32::init(config);
    let p_ptr: *mut embassy_stm32::Peripherals =
        p as *const embassy_stm32::Peripherals as *mut embassy_stm32::Peripherals;
    let p_mut: &mut embassy_stm32::Peripherals = unsafe { &mut *p_ptr };

error[E0605]: non-primitive cast: `embassy_stm32::Peripherals` as `*const embassy_stm32::Peripherals`
   --> src/main.rs:154:9
    |
154 |         p as *const embassy_stm32::Peripherals as *mut embassy_stm32::Peripherals;
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invalid cast
    |
help: consider borrowing the value
    |
154 |         &p as *const embassy_stm32::Peripherals as *mut embassy_stm32::Peripherals;
    |         +

// if I do that
error[E0382]: borrow of partially moved value: `p`
   --> src/main.rs:154:9
    |
130 |     let mut adc = Adc::new(p.ADC3, &mut Delay);
    |                            ------ value partially moved here
...
154 |         &p as *const embassy_stm32::Peripherals as *mut embassy_stm32::Peripherals;
    |         ^^ value borrowed here after partial move
    |
    = note: partial move occurs because `p.ADC3` has type `embassy_stm32::peripherals::ADC3`, which does not implement the `Copy` trait
```

Reason is I want to share `p` (the owned value) to other fns/closures but I can't due to the owned `p` being consumed.  `&mut p` would be ideal though.