1.单片机型号:STM32G070RBTx
2.出现的问题
根据库函数FLASH_If_Write()的使用,我们分析往flash写数据的过程是把uint8_t 类型的数据(p_data)以地址的形式强转成uint64类型的,在一包128字节的数据时一次存储8位,存16次(packet_size/8),下边是原本的逻辑代码,程序卡死在下面框起来的位置:
定义ramsource变量为:uint32_t ;
3. 解决
选择换一种思路,把传过来的数据先存到uint64_t类型的数据中,然后把数组传过去,代码片段如下所示:
4.最后又遇到一个问题
如下图所示,判断判断检查栈顶地址是否合法条件不满足,详细内容参考下面资料:关于STM32单片机IAP升级中if(((*(__IO uint32_t*)ulAddr_App) & 0x2FFE0000) == 0x20000000)语句的理解-CSDN博客
原因是在往flash写入数据的过程中存在大小端问题,导致存入起始地址的数据和" 0x2FFE0000"逻辑与判断条件失败;在上述把8个字节存储在一个uint64_t位数组中需要注意低位在前还是高位在前问题。