新手上路
积分 23
金钱 23
注册时间 2016-1-10
在线时间 6 小时
11 金钱
本帖最后由 dnzj 于 2016-1-12 15:45 编辑
小弟刚学STM32不久,在实践CUPID加密时遇到一个问题。 芯片型号为STM32F103C8T6下面是加密相关的代码:
volatile const static uint32_t CPUIDmiwen = 0xFFCFFCFF;
int main (void)
{
......
Di_Yi_Ci();
Verification_Pass();
......
}
void Di_Yi_Ci(void)
{
if(CPUIDmiwen==0xFFCFFCFF)
{
uint32_t CpuID[3];
uint32_t miwen;
CpuID[0]=*(vu32*)(0x1ffff7e8);
CpuID[1]=*(vu32*)(0x1ffff7ec);
CpuID[2]=*(vu32*)(0x1ffff7f0);
miwen=(CpuID[0])+(CpuID[1])-(CpuID[2]);
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
FLASH_ProgramWord((uint32_t)&CPUIDmiwen, miwen);
FLASH_Lock();
}
}
u8 Verification_Pass(void)
{
uint32_t CpuID[4];
CpuID[0]=*(vu32*)(0x1ffff7e8);
CpuID[1]=*(vu32*)(0x1ffff7ec);
CpuID[2]=*(vu32*)(0x1ffff7f0);
CpuID[3]=(CpuID[0])+(CpuID[1])-(CpuID[2]);
if (CPUIDmiwen==CpuID[3]) {return 1;} else {return 0;}
}
测试以后发现每次开机 CPUIDmiwen的值一直都是0xFFCFFCFF,明明已经运行过了这条语句:
FLASH_ProgramWord((uint32_t)&CPUIDmiwen, miwen); 按理说CPUIDmiwen里的值会被加密后的结果替换掉呀。
但是,为什么CPUIDmiwen的值一直都没有变化?加密以后的密文没有写进FLASH地址里,为什么会这样?
求大侠指教,我的问题出在哪里了?谢谢了!!
我来回答