话说几天前,为了响应国家号召,多卖些产品,多赚点钱,促进同事们的消费。
我们准备将输入检测改为矩阵扫描方式,节省GPIO口的数量。
在网上找了一些48PIN的STM32F030C8T6的国产替代芯片,替代现在使用的STM32F051R8T6;
大概每台产品可以降低约3元的材料成本。
当时很高兴,都准备开始提前消费了。
今天再核对了一遍,发现高兴太早了。
STM32F030系列的处理器以及所有能找到的国产替代芯片都没有单独的RTC的供电脚VBAT。

9c91c6dd5eda4787b9716201bdd73a17~noop.image?_iz=58558&from=article.jpg
30系列处理器没有单独的RTC供电脚


意味着RTC时钟断电之后不能保存,产品只要重新上电,客户就需要重新设置时间,显示是不能被客户接受的。
目前的设计是通过两个220uF/6.3V的电容储能给VBAT供电,
VBAT的输入电压范围为1.65-3.6 V,断电瞬间电容两端的电压约为3.1V,
根据 0793368746dd43b69b8b3a71cedecbf6.jpg ,得到,电容以VBAT的工作电流,从3.1V放电到1.65V所对应的时间为:
291661d0724a490f8f003601749336ff.jpg
也就是时间的断电保持时间约为10分钟。
925fb3eaa75d4c0cb5fa03c5ee256041~noop.image?_iz=58558&from=article.jpg
VBAT引脚的工作电流

虽然STM32G030C8T6有单独的VBAT脚,其它功能也能满足要求,但是该芯片没有其它厂家的PIN对PIN解决方案,对之前的缺芯仍心有余悸以及对ST在缺芯期间的表现非常失望,不敢贸然选用该芯片。
研究了半天,想到了两个可能的解决方案:
1) 通过MCU的低功耗模式实现RTC的断电延时
在3.3V电源上并上大的电解电容,并增加电源输入检测电路,而且电源输入检测作为外部中断接到MCU的PA0口,一旦发生断电,MCU进入外部中断的中断函数,将输出的信号都切断,以立即降低工作电源,之后在主程序中进入StandBy低功耗模式。在这种模式下,RTC仍然能继续工作,而整个MCU的工作电流约为3uA。
利用RTC的ALARM功能定时唤醒,检测电源输入脚,同时使用电源输入检测口的中断。
一旦产生上电的中断,或者是定时唤醒检测到上电,则立即退出低功耗模式。
这样,2个200uF电容能提供约 eaa205aa4e1546c0b03d78c3602276ae.jpg 的保持时间。
当把电容增加到2200uF/6.3V时,能够提供约660s的保持时间。
2)选用STM32G030C8T6
通过0欧电阻切换走线,达到与STM32F051C8T6的PIN对PIN兼容的效果。

来源:物联网全栈开发