事情是这样的,先是自已按资料(不是例程)手写的掉电程序,功耗一直降不到数据手册给出的6uA水平,一直在550uA附近,尝试过很多方法均不行!
于是直接改写例程在自已板上去行,掉电模式3, 能够正常进至2uA水平!
将此程序做为函数, 无任何修改, 完程的放在自已程序的main文件“第一行” ,运行无效果,还是550uA附近
百度,CSDN,官网,都查过了,没有找到类似案例!
官网找到一个最相近的,HC32F460系列的停止模式注意事项Rev1.1.pdf 无帮助!
最后没办法,找两个项目不同点和运行步骤,一直折腾到晚上十点:
因在main第一行, 运行步骤完全相同,先是怀疑进入main之前的 RAM常量初始化的影响,注解掉部分程序,人工增加RAM常量,无效果!
再更多的注解掉部分程序,有效果了,降至2uA了!!!!
人工增加一个FALSH常量,尝试很多次,找到一个临界点:
此常量为856时, ,有效果降至2uA!
大于856时,无论怎么做,同样的代码,还是550uA附近!
怀疑FLASH编译跨区了,但这个编译结果没跨区呀!
关键是编译结果还是一样一样的:
最后一步一步分析汇编代码
这是能够降至2uA的汇编:
下图是550uA的汇编:
发现编译结果存放位置有不同,根据芯片资料:
也就是说,0x2000前的第1个扇区,是一个特殊区域,会不会相关代码在这个区域,或使用了这个区域,就不能进入掉电模式了呢?
于是果断frok .icf文件并修改: 将下述:
改为下述,以使第1扇区预留:
掉电模式成功到2uA了,把所有程序全部恢复,也能够成功到2uA!!