refactor, shorten main

pull/1/head
topquark12 2022-10-20 21:21:01 +08:00
parent fc90593f84
commit 18a603ab5f
5 changed files with 60 additions and 35 deletions

52
src/device/boot.rs Normal file
View File

@ -0,0 +1,52 @@
use stm32f4xx_hal::{
watchdog::IndependentWatchdog,
rcc::RccExt,
pac::{CorePeripherals, Peripherals},
time::MegaHertz, prelude::_stm32f4xx_hal_gpio_GpioExt,
};
use fugit::ExtU32;
use log::info;
use super::{log_setup, sys_timer, usb};
#[cfg(not(feature = "semihosting"))]
const WATCHDOG_PERIOD: u32 = 1000;
#[cfg(feature = "semihosting")]
const WATCHDOG_PERIOD: u32 = 30000;
pub fn bootup (mut core_perif : CorePeripherals, perif : Peripherals) -> (
IndependentWatchdog
) {
log_setup::init_log();
info!("Kirdy init");
core_perif.SCB.enable_icache();
core_perif.SCB.enable_dcache(&mut core_perif.CPUID);
let clocks = perif.RCC.constrain()
.cfgr
.use_hse(MegaHertz::from_raw(8).convert())
.sysclk(MegaHertz::from_raw(168).convert())
.hclk(MegaHertz::from_raw(168).convert())
.pclk1(MegaHertz::from_raw(32).convert())
.pclk2(MegaHertz::from_raw(64).convert())
.freeze();
// let (pins, eth_pins, usb) = Pins::setup(
// clocks, perif.TIM4,
// perif.GPIOA, perif.GPIOB, perif.GPIOC, perif.GPIOD, perif.GPIOE, perif.GPIOF, perif.GPIOG,
// perif.SPI1, perif.SPI2, perif.SPI3,
// perif.ADC1,
// perif.OTG_FS_GLOBAL, perif.OTG_FS_DEVICE, perif.OTG_FS_PWRCLK,
// );
let mut wd = IndependentWatchdog::new(perif.IWDG);
wd.start(WATCHDOG_PERIOD.millis());
wd.feed();
sys_timer::setup(core_perif.SYST, clocks);
(wd)
}

View File

@ -1,4 +1,5 @@
pub mod log;
pub mod log_setup;
pub mod usb;
pub mod timer;
pub mod sys_timer;
pub mod boot;
// pub mod init_gpio;

View File

@ -10,50 +10,22 @@ use stm32f4xx_hal::{
time::MegaHertz, prelude::_stm32f4xx_hal_gpio_GpioExt,
};
use log::info;
use fugit::ExtU32;
mod device;
use device::log::init_log;
// use setup::init_gpio::Pins;
use device::timer;
#[cfg(not(feature = "semihosting"))]
const WATCHDOG_PERIOD: u32 = 1000;
#[cfg(feature = "semihosting")]
const WATCHDOG_PERIOD: u32 = 30000;
use device::boot::bootup;
use device::sys_timer;
#[entry]
fn main() -> ! {
init_log();
info!("Kirdy init");
let mut core_perif = CorePeripherals::take().unwrap();
core_perif.SCB.enable_icache();
core_perif.SCB.enable_dcache(&mut core_perif.CPUID);
let perif = Peripherals::take().unwrap();
let clocks = perif.RCC.constrain()
.cfgr
.use_hse(MegaHertz::from_raw(8).convert())
.sysclk(MegaHertz::from_raw(168).convert())
.hclk(MegaHertz::from_raw(168).convert())
.pclk1(MegaHertz::from_raw(32).convert())
.pclk2(MegaHertz::from_raw(64).convert())
.freeze();
let mut wd = IndependentWatchdog::new(perif.IWDG);
wd.start(WATCHDOG_PERIOD.millis());
wd.feed();
timer::setup(core_perif.SYST, clocks);
let gpioc = perif.GPIOC.split();
let mut pc9 = gpioc.pc9.into_push_pull_output();
let (mut wd) = bootup(core_perif, perif);
loop {
pc9.toggle();
timer::sleep(1);
wd.feed();
info!("looping");
sys_timer::sleep(10);
}
}