前言
笔者在学习《STM32CubeMX高效开发教程》这本书的第11章RTC时,完成第三个示例项目后(经过入侵检测),重新运行第二个示例项目,发现已经无法正常工作了,其核心问题就在于RTC备份寄存器无法写入。在探索了很久以后,发现了解决方法。
查阅参考手册
在F407中文参考手册的第604页讲到,发生入侵检测事件以后,TAMPxF被置位,如果没有复位,那么该寄存器就一直保持复位。而这里的“该寄存器”正是复位寄存器。
出现这个问题,同时也是因为TAMPxF不会因为按下复位键,或断电等硬件方式复位,而必须经过手动软件复位,这就涉及到了寄存器的操作。
操作寄存器
操作寄存器的关键就在两个:一、找到要操作的寄存器的位的地址;二、赋予期望的值(0或1)
在参考手册《存储器映射》这一节中,可以根据左边界地址得到基地址,即0x4000 2800
点击蓝色字体,就可以跳转到《RTC寄存器映射这一小节》,可得到偏移地址,即0x0C
其中第15位TAMP2F表示入侵检测事件2,TAMP1F表示入侵检测事件1,我的F407只有后者,所以只要操作后者即可。基地址+偏移地址就是寄存器地址,再用位运算将第13位置0即可
完美解决~
结语
参考手册是最权威的资料,利用好参考手册,能直接解决好眼下的问题。
在解决这个问题的过程中,笔者在CSDN上发现也有博主遇到了类似的问题,但不幸的是,这种方法并没有解决备份寄存器无法写入的问题。进一步证明的软件复位的正确性。