void platform_main(int arg) { rcc_clock_setup_hse(&clock_72mhz); rcc_periph_clock_enable(RCC_GPIOA); rcc_periph_clock_enable(RCC_GPIOB); // CAN pin gpio_mode_setup(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIOA_CAN_RX | GPIOA_CAN_TX); gpio_set_output_options(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_100MHZ, GPIOA_CAN_RX | GPIOA_CAN_TX); gpio_set_af(GPIOA, GPIO_AF9, GPIOA_CAN_RX | GPIOA_CAN_TX); // enable CAN transceiver gpio_mode_setup(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIOA_CAN_DIS); gpio_set_output_options(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_100MHZ, GPIOA_CAN_DIS); gpio_clear(GPIOA, GPIOA_CAN_DIS); // LED on gpio_mode_setup(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIOA_LED); gpio_set_output_options(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_100MHZ, GPIOA_LED); gpio_set(GPIOA, GPIOA_LED); // configure timeout of 10000 milliseconds timeout_timer_init(72000000, 10000); can_interface_init(); bootloader_main(arg); reboot_system(BOOT_ARG_START_BOOTLOADER); }
int main(unsigned r0) { hw_digital_input(BTN1); if (r0 == BOOT_MAGIC || !flash_valid() || button_pressed()) { bootloader_main(); } jump_to_flash(FLASH_FW_ADDR, 0); }