From cc432b761c884a0bd8e9d83db0a4e26109fc08b1 Mon Sep 17 00:00:00 2001 From: chen <15335560115@163.com> Date: 星期五, 08 十一月 2024 15:35:38 +0800 Subject: [PATCH] 安邦手环GPS删除部分无用数据和修改4G波特率9600出厂测试固件 --- keil/include/drivers/menu.c | 218 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 218 insertions(+), 0 deletions(-) diff --git a/keil/include/drivers/menu.c b/keil/include/drivers/menu.c new file mode 100644 index 0000000..4fb7137 --- /dev/null +++ b/keil/include/drivers/menu.c @@ -0,0 +1,218 @@ +#include "menu.h" +#include "ymodem.h" +#include "mk_flash.h" +#include "mk_uart.h" +//#include "Usart.h" +//#include "SPIFlash.h" +#include "AppConfig.h" +#include "HIDO_TypeDef.h" +#include "mk_trace.h" +//#include "stm32f4xx_hal.h" + + +pFunction Jump_To_Application; +uint32_t JumpAddress; + +uint32_t FlashProtection = 0; +uint8_t tab_1024[1024] = +{ + 0 +}; + +void Int2Str(uint8_t* str, int32_t intnum) +{ + uint32_t i, Div = 1000000000, j = 0, Status = 0; + + for (i = 0; i < 10; i++) + { + str[j++] = (intnum / Div) + 48; + + intnum = intnum % Div; + Div /= 10; + if ((str[j-1] == '0') & (Status == 0)) + { + j = 0; + } + else + { + Status++; + } + } +} +uint32_t IAP_JumpTo(uint32_t ApplicationAddress) +{ + +// if (((*(uint32_t*)ApplicationAddress) & 0x20000000 ) == 0x20000000) +// { + memcpy((void *)SRAM_BASE, (void *)APP_CONFIG_APPLICATION_ADDRESS, APP_CONFIG_APPLICATION_SIZE);//size太大导致覆盖没法跳转 + __set_MSP(*(uint32_t *)SRAM_BASE); + typedef void (*p_entry_t)(void); + ((p_entry_t) (*(uint32_t *)(SRAM_BASE + 4) + SRAM_BASE))(); +// __set_MSP(*(uint32_t*) ApplicationAddress); //Set MSP MK8000修改 +// +// (*((void(*)(void))JumpAddress))(); + +// return 1; +// } + + return 0; +} + +uint8_t FileName[FILE_NAME_LENGTH]; + +/** + * @brief Download a file via serial port + * @param None + * @retval None + */ +unsigned char SerialDownload(void) +{ + uint8_t Number[10] = {0}; + int32_t Size = 0; + Send_Byte(0x33); + Size = Ymodem_Receive(&tab_1024[0]);//开始接收文件,成功会返回文件的大小 + if (Size > 0) //返回成功 + { + SerialPutString("\n\n\r Programming Completed Successfully!\n\r--------------------------------\r\n Name: "); + SerialPutString(FileName); + Int2Str(Number, Size); + SerialPutString("\n\r Size: "); + SerialPutString(Number); + SerialPutString(" Bytes\r\n"); + SerialPutString("-------------------\n"); + return 0; + } + else if (Size == -1) + { + //SerialPutString("\n\n\rThe image size is higher than the allowed space memory!\n\r"); + return 1; + } + else if (Size == -2) + { + //SerialPutString("\n\n\rVerification failed!\n\r"); + return 2; + } + else if (Size == -3) + { + //SerialPutString("\r\n\nAborted by user.\n\r"); + return 3; + } + else + { + // SerialPutString("\n\rFailed to receive the file!\n\r"); + return 4; + } +} + +/** + * @brief Upload a file via serial port. + * @param None + * @retval None + */ + +uint8_t GetKey(void) +{ + uint8_t key = 0; + + /* Waiting for user input */ + while (1) + { + if (SerialKeyPressed((uint8_t*)&key)) break; + } + return key; + +} +void SerialUpload(void) +{ + uint8_t status = 0 ; + + SerialPutString("\n\n\rSelect Receive File\n\r"); + + if (GetKey() == CRC16) + { + /* Transmit the flash image through ymodem protocol */ + status = Ymodem_Transmit((uint8_t*)APP_CONFIG_APPLICATION_ADDRESS, (const uint8_t*)"UploadedFlashImage.bin", APP_CONFIG_APPLICATION_SIZE); + + if (status != 0) + { + SerialPutString("\n\rError Occurred while Transmitting File\n\r"); + } + else + { + SerialPutString("\n\rFile uploaded successfully \n\r"); + } + } +} + +/** + * @brief Display the Main Menu on HyperTerminal + * @param None + * @retval None + */ + +void delay_ms(uint32_t nTimer) +{ + uint32_t i=1000*nTimer; + delay_us(i); +} +void Main_Menu(void) +{ + uint8_t key = 0; + + + while (1) + { + + Serial0PutString("请传输升级文件\r\n\n"); + /* Download user application in the Flash */ + if(SerialDownload()==0)//如果传输完成跳回APP + { + //标志清除 + uint16_t tmp = 0xFFFF; + flash_erase(FLASH_ID0, APP_CONFIG_IAPFLAG_SECTOR_ADDR, FLASH_SECTOR_SIZE);//擦除APPFLAG + flash_write_nbytes(FLASH_ID0,APP_CONFIG_IAPFLAG_MAP,(uint8_t*)&tmp,2); +// SPIFlash_Erase(SPI_FLASH_ID_0, APP_CONFIG_IAPFLAG_MAP,2, SPI_FLASH_SECTOR_ERASE_MODE_4K); MK8000修改 +// SPIFlash_Write(SPI_FLASH_ID_0, APP_CONFIG_IAPFLAG_MAP, (HIDO_UINT8*)&tmp, sizeof(tmp)); + +// if (((*(__IO uint32_t*)APP_CONFIG_APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)先注释掉即一成功就跳转 +// { + /* Jump to user application */ + Serial0PutString("跳转APP\r\n"); + memcpy((void *)SRAM_BASE, (void *)APP_CONFIG_APPLICATION_ADDRESS, APP_CONFIG_APPLICATION_SIZE); + // setup new msp + __set_MSP(*(uint32_t *)SRAM_BASE); + Serial0PutString("跳转APP后\r\n"); + typedef void (*p_entry_t)(void); + ((p_entry_t) (*(uint32_t *)(SRAM_BASE + 4) + SRAM_BASE))(); + + //JumpAddress = *(__IO uint32_t*) (SRAM_BASE + 4); + +// Jump_To_Application = (pFunction) JumpAddress; +// +// /* Initialize user application's Stack Pointer */ +// __set_MSP(*(__IO uint32_t*) SRAM_BASE); +// +// /* Jump to application */ +// Jump_To_Application(); + } else { +// uint16_t tmp = 0xFFFF; +// flash_erase(FLASH_ID0, APP_CONFIG_IAPFLAG_MAP, 2);//擦除APPFLAG 此处失败就重启重新进入boot里面传输且不改变要升级的标志位 +// flash_write(FLASH_ID0, APP_CONFIG_IAPFLAG_MAP, (uint8_t*)&tmp, sizeof(tmp)); + //SPIFlash_Erase(SPI_FLASH_ID_0, APP_CONFIG_IAPFLAG_MAP,2, SPI_FLASH_SECTOR_ERASE_MODE_4K); 改写为MK8000API + //SPIFlash_Write(SPI_FLASH_ID_0, APP_CONFIG_IAPFLAG_MAP, (HIDO_UINT8*)&tmp, sizeof(tmp)); + delay_ms(10); + LOG_INFO(TRACE_MODULE_APP,"升级失败重启\r\n\n"); + NVIC_SystemReset(); + //SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader MK8000修改 + } + + return; + } +// else +// { +// NVIC_SystemReset(); +// return; +// } + +//} +} -- Gitblit v1.9.3