
试了一下将主程序放在第一个flash中,采用U盘将程序(bin文件添加了crc,用U盘读出来的时候,进行了校验)读取进外部SRAM(0x60000000)中,再将程序写入FLASH2中,再进行FLASH SWAP,然后看门狗重启,结果升级后,程序无法启动,同时也无法进行仿真了,flash下载不了,到擦除的时候就出错了(timeout),跪求大佬能给分析一下 Uint32 GetProgramCacheAddr(void) { return((Uint32)SampleCur); //返回数据存储的首地址0x60000000 } HAL_StatusTypeDef Flash_Swap(void) { FLASH_OBProgramInitTypeDef OBInit; HAL_StatusTypeDef status; // 解锁 Flash HAL_FLASH_Unlock(); HAL_FLASH_OB_Unlock(); // 获取当前活动 Bank uint32_t current_bank = (FLASH->OPTSR_CUR & FLASH_OPTSR_SWAP_BANK_OPT) >> FLASH_OPTSR_SWAP_BANK_OPT_Pos; // 配置选项字节 OBInit.OptionType = OPTIONBYTE_USER;
OBInit.USERConfig = (current_bank == 1) ? OB_SWAP_BANK_DISABLE : OB_SWAP_BANK_ENABLE; // 编程选项字节 status = HAL_FLASHEx_OBProgram(&OBInit); if(status == HAL_OK) {
} // 锁定 Flash HAL_FLASH_OB_Lock(); HAL_FLASH_Lock(); return status; } Uint8 UpdateProgram(void) { uint32_t inactive_bank; HAL_StatusTypeDef status;
// 确定非活动 Bank inactive_bank = (FLASH->OPTSR_CUR & FLASH_OPTSR_SWAP_BANK_OPT) ? FLASH_BANK1_BASE : FLASH_BANK2_BASE; // 擦除非活动 Bank FLASH_EraseInitTypeDef EraseInit; EraseInit.TypeErase = FLASH_TYPEERASE_SECTORS; EraseInit.Banks = (inactive_bank == FLASH_BANK1_BASE) ? FLASH_BANK_1 : FLASH_BANK_2; EraseInit.Sector = 0; // 从0扇区开始 EraseInit.NbSectors = 3; // 擦除整个 Bank uint32_t SectorError; status = HAL_FLASHEx_Erase(&EraseInit, &SectorError); if(status != HAL_OK)
// 写入新固件 for(uint32_t i = 0; i < size; i += 32) {
} HAL_FLASH_Lock(); // 执行 Bank 交换 if(Flash_Swap()==HAL_OK) {
} else {
} } |
型号替代-STM32H5
正点原子阿波罗H743使用DMA2D后普通刷出现问题
STM32H7系列RMII用于TCP/IP 服务器
STM32H745I-DISCO的GUI DEMO演示。
关于GFX软件下载汇报
touchgfx 4.14版本
STM32STM32H745I demo板演示,以及点灯
关于STM32H745I demo板,M7下载正常,M4下载报错?请问是怎么回事
关于STM32H745I demo板,M7下载正常,M4下载报错?后续进程
使用Cubeprogrammer无法连接、连接G431和一块H750的板子可以连上但是连另外一块H750的板子和F407的板子就直接报错,这个应该如何解决。