F072的uid读到内存,过段时间会变化,为什么会这样

2019-12-19 18:07发布

void Get_ChipID(void)
{
//         F103       
//                CPU_ID[0]=CPU_ID[0] = *(__IO uint32_t *)(0X1FFFF7F0); // 高字节
//                CPU_ID[1]=CPU_ID[1] = *(__IO uint32_t *)(0X1FFFF7EC); //
//                CPU_ID[2]=CPU_ID[2] = *(__IO uint32_t *)(0X1FFFF7E8); // 低字节

//        F0       
                CPU_ID[0] = *(__IO uint32_t *)(0X1FFFF7b4); // 高字节
                CPU_ID[1] = *(__IO uint32_t *)(0x1ffff7b0); //
                CPU_ID[2] = *(__IO uint32_t *)(0x1ffff7ac); // 低字节
}

我的系统一上电就把 UID读到内存变量数组uint32_t CPU_ID[3],因为软件要用这个作为识别,之前的代码都是上电就读一次,以前都不会有问题。最近不知为什么,发现内存变量数组 CPU_ID[3] 中的数据会变化,导致识别失败。uint32_t CPU_ID[3] 是全局变量,程序中不修改的,为啥会变?我在办公室测试的时候都正常,没有发现错误。可是板子现场用着就不行,我开始也不信,去了几次现场调试代码,真的发现 CPU_ID[]变化了,导致识别失败。但是有些板子又不会,现场电柜有变频器,但是离的挺远啊。电源是电柜中的开关电源接24V过来,板子离变频器有20米左右,还有跟电柜有RS485通讯。开始我以为是开关电源不行,但是单独接他们的开关电源我的板子就正常。。。
如果是变频器干扰,为啥之前的板子不会,这是第二批板子。。。
现在临时在需要识别UID的时候重新读取UID放到uint32_t CPU_ID[3]内存变量数组中,今天下午接电柜测试就可以正常识别了。如果在识别前取消重新读取,发现又识别不了,UID 变化了。真是想不懂啊,郁闷。。。
大家遇到变量的数据变化这种情况不?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。