#include "main.h" #include "usart.h" #include "dma.h" #include "tim.h" #include "custom_flash.h" #include "gpio.h" #include "can.h" #include "sdio.h" #include "fatfs.h" // KEY defines #define BOOTLOADER_KEY_ADR (uint32_t)0x08009800 #define BOOTLOADER_KEY_PAGE 20 #define BL_KEY_APP_WRITTEN 0xAAAA5555 // MAIN APP defines #define MAIN_APP_START_ADR (uint32_t)0x0800C000 #define MAIN_APP_PAGE 21 #define MAIN_APP_NUM_OF_PAGE 250-MAIN_APP_PAGE // ERROR DEFINES struct flag { unsigned reInitMCU:1; // флаг перепрошивки (очишает память перед прошивкой новой) unsigned InitOrWait:1; // флаг активной прошивки (1) или ожидания комманды UART/CAN (0) unsigned StartInit:1; // флаг что необходимо начать прием прошивки/прошивку unsigned InitBootPeriph:1;// флаг старта инициализации перифирии для прошивки unsigned BootloaderCMD:3; // комманда: интерфейс для прошивки unsigned InitMCUReady:1; // окончание прошивки unsigned HalfOfWrite:1; // какая половина из dma буфера не записана unsigned SDCardIn:1; }; struct Bootloader_Errors { unsigned FLASH_ERASE:1; unsigned FLASH_WRITE:1; unsigned CMD_INVALID:1; unsigned USART_RECEIVE:1; #ifdef __CAN_H__ unsigned CAN:1; #endif #ifdef __SDIO_H__ unsigned SD_CARD_NOT_INSERTED:1; unsigned SD_CARD_READ:1; #endif }; struct Bootloader_Errors_Counters { unsigned FLASH_ERASE; unsigned FLASH_WRITE; unsigned CMD_INVALID; unsigned USART_RECEIVE; #ifdef __CAN_H__ unsigned CAN_RECEIVE; #endif #ifdef __SDIO_H__ unsigned SD_CARD_NOT_INSERTED; unsigned SD_CARD_READ; #endif }; void Bootloader_main(void); void SD_Programming(FRESULT *res_fresult, HAL_StatusTypeDef *res_hal); void Bootloader_TIM_Handler(void); // handler for "WD" Timer void Check_CMD_USART(uint8_t *DataUART); void SetKey(void); uint32_t ReadKey(void); void ResetKey(void); void Boot_SystemClock_Config(void);