hi! i am new to embedded, i've for a long time wanted to make a keyboard. I managed to design it and get it manufactured. As a chip I chose Seeed Studio XIAO nRF52840. I can't manage to get it to register a keypress, and even to get a timer working. This is the code that makes the device be registered as HID on my pc: https://github.com/issues/created?issue=dlkj%7Cusbd-human-interface-device%7C180, i later tried a new approach to timers: ```rust #[entry] fn main() -> ! { let p = Peripherals::take().unwrap(); let core = cortex_m::Peripherals::take().unwrap(); let clocks = Clocks::new(p.CLOCK); let clocks = clocks.enable_ext_hfosc(); let p0 = Parts::new(p.P0); let p1 = nrf52840_hal::gpio::p1::Parts::new(p.P1); let usb_bus = UsbBusAllocator::new(Usbd::new(UsbPeripheral::new(p.USBD, &clocks))); let mut keyboard = UsbHidClassBuilder::new() .add_device( usbd_human_interface_device::device::keyboard::NKROBootKeyboardConfig::default(), ) .build(&usb_bus); let mut usb_dev = UsbDeviceBuilder::new(&usb_bus, UsbVidPid(0xcafe, 0x0000)) .strings(&[StringDescriptors::default() .manufacturer("bozgi.space") .product("Proto One") .serial_number("0")]) .unwrap() .build(); let mut delay = Delay::new(core.SYST); let mut row = p1.p1_15.into_pullup_input(); let _col = p0.p0_29.into_push_pull_output(Level::Low); let mut reset_pin = p0.p0_02.into_pullup_input(); let mut led = p0.p0_26.into_push_pull_output(Level::High); let mut tick_timer = nrf52840_hal::Timer::new(p.TIMER1); let mut pool_timer = nrf52840_hal::Timer::new(p.TIMER2); pool_timer.start(10_000); tick_timer.start(1_000); loop { led.toggle().unwrap(); if reset_pin.is_low().unwrap() { delay.delay_ms(10u8); if reset_pin.is_low().unwrap() { reset_into_dfu(); } } if tick_timer.wait().is_ok() { match keyboard.tick() { Ok(_) => {} Err(_) => {} }; tick_timer.start(1_000); } if pool_timer.wait().is_ok() { let mut event = Keyboard::NoEventIndicated; if row.is_low().unwrap() { event = Keyboard::A; led.set_low().unwrap(); } else { led.set_high().unwrap(); } let mut report = [Keyboard::NoEventIndicated; 6]; report[0] = event; match keyboard.device().write_report(report) { Err(UsbHidError::WouldBlock) => {} Err(UsbHidError::Duplicate) => {} Ok(_) => {} Err(e) => { core::panic!("Failed to write keyboard report: {:?}", e) } }; pool_timer.start(10_000); } if usb_dev.poll(&mut [&mut keyboard]) { let _ = keyboard.device().read_report(); } } } ``` What am I doing wrong here with the timers? they only run once. Tested by the led toggle at the top, it turns on once, then turns off and hangs, i believe that it hangs on .wait() thanks in advance for any help