STM32HAL库-针对芯片内部FLASH读保护实现防篡改、破解功能
https://blog.csdn.net/qq_36075612/article/details/116241705
你好,大师,你这个代码我想用在STM32F407VET6项目里,修改了几行代码,编译通过,但有四个警告,
Flash_Test!!!
DisableReadProtection!!!
Device_id:0xFFFFFFFF, Hardware_Version:0xFFFFFFFF, Application_Version:0xFFFFFFFF, Application_Status:0xFFFFFFFF
UPDATA!!!
Device_id:0xFFFFFFFF, Hardware_Version:0xFFFFFFFF, Application_Version:0xFFFFFFFF, Application_Status:0xFFFFFFFF
这应该是数据没写进去吧?请教一下怎么改?
FLASH_If_Write(DATASTOREADDR, (uint32_t*)&SystemParam_default, page);
FLASH_If_Read(DATASTOREADDR, (uint32_t*)&SystemParam_read, page);
很久没弄了,都忘差不多了,凭借一点点记忆,给你回答此问题,这两个接口,需要自己实现,读写失败,原因大部分是F1与F4扇区不一致,你参考对应的datasheet,就懂了datasheet有详细说明,也可以查看这个 FLASH_EraseInitTypeDef 结构体,F1与F4它们的区别
该回答引用GPTᴼᴾᴱᴺᴬᴵ
警告信息提示的是指针对齐的问题,不影响程序的正常运行,可以忽略这些警告。
至于数据写入失败的问题,可能是因为FLASH写入的操作不正确或者写入的地址不正确。建议您检查以下几个方面:
希望这些提示能帮助您解决问题。
这个跟警告没有关系。
怀疑是flash的驱动有问题,导致没有写入到flash中。
参考GPT和自己的思路,这个警告信息是指你在代码中把一个结构体类型的指针转换成了另一个类型的指针,但两者的内存对齐方式不同,可能会导致未对齐的指针值。具体的原因需要看代码中的具体实现。
关于数据没写进去的问题,建议你按照以下步骤进行排查:
1 确认你的写入操作是正确的:检查你的代码是否正确地调用了HAL_FLASH_Program() 函数,并且传递了正确的参数(如地址、数据等)。
2 确认你的芯片没有其他的读保护或写保护:如果你的芯片已经启用了其他类型的保护机制,那么就不能正常地对其进行写入操作。你可以通过读取FLASH的状态寄存器来确认是否有其他的保护机制启用。
3 确认你的代码没有其他的bug:在排除了硬件问题后,还需要检查代码中是否存在其他的bug或逻辑问题,例如:地址计算错误、数据类型不匹配、函数调用错误等等。
4 是否写入的地址是正确的?
5 是否写入的数据是正确的?
6 是否有其他代码或者硬件问题导致数据写入失败?
如果以上都没有问题,你可以在代码中添加一些调试信息,如打印输出等,帮助你进一步定位问题所在。
这个问题应该只有 Ch_champion 能回答
传入的结构体可以参考这样写,你试一下
struct {
char c;
int d;
}__attribute__((packed)) v;
不知道你这个问题是否已经解决, 如果还没有解决的话: