在STM32的硬件条件下,很容易实现Stm32库的保存和读取Stm32备份寄存器。如果您需要在重新引导之间持久保存数据,那简直就是为你设计的。 项目中使用的东西 硬件组件: STMicroelectronicsSTM32 Nucleo-144 Boards *1; + S6 ]7 ]0 M! K* r nanoFramework VisualStudio extension 6 p8 ?) q, p5 Q2 b1 g' ]背景 8 u) Q# M3 {7 |: u% w0 ~有时候你的应用需要在重启之间保存数据。只是简单的数据收集。添加一个外部EEPROM并不是你想要做的事情。一堆额外的复杂,布线,更多的代码,板的真实状态和(如果这是一个商业项目)更多的成本到BOM。 STM32 SoC有一个被称为备份内存的RAM区域,它由RTC电源插头供电,可以在重启后继续工作。这是一个完美的工具。 c9 t7 E2 q. k$ v0 u2 N5 lnanoFramework.Hardware。Stm32类库抽象了使用此内存所需的所有配置和复杂性。您只需将需要保存的值(支持许多本机类型,因此您应该找到所需的类型)扔给它即可。如果你已经将电源连接到Vbatt pin,那就是。 当需要时,返回到API并读取这些值。 代码: 示例应用程序写入STM32备份内存并读取 4 t9 g2 V9 k' V2 Susing System; using System.Threading; using nanoFramework.Hardware.Stm32; 4 K0 E n3 z. |0 z; Qnamespace Stm32BackupMemory.TestApp { public class Program { ) V! {1 q; ]& W8 v public static voidMain() { - [) v3 }. q. C6 u+ y Console.WriteLine($"The backup memory has {BackupMemory.Size}bytes."); // write a bytearray , A" f. } U7 i/ k n: q uinttestBufferPosition = 5; byte[] testBuffer= new byte[] { 0xFA, 0xCE, 0xBE, 0xEF, 0xFA, 0xCE, 0xBE, 0xEF }; & ~) k9 Z2 F7 H1 c5 W BackupMemory.WriteBytes(testBufferPosition, testBuffer); 8 {7 g3 b4 W/ j9 }- N5 K // read back thebyte array $ t1 L' s, ~. ?! g: f: Q( K& W byte[]readBackBuffer = new byte[testBuffer.Length]; 5 h: A) K, V; H; | BackupMemory.ReadBytes(testBufferPosition, readBackBuffer); if(readBackBuffer.GetHashCode() != testBuffer.GetHashCode()) { Console.WriteLine("Array read from backup memory is different thanwhat was written."); : U% A& t- `: ^& @! o6 }( s } - P$ u, j) x9 y# p }* k; V else # Z" p- C; w4 Q { 2 h8 G: e8 C8 g. w; [ Console.WriteLine("Buffer comparison check!"); + k* T* k5 m+ a( m, T } // write an Int64 uinttestInt64Position = 15; Int64 testInt64 =9876543210; BackupMemory.WriteInt64(testInt64Position, testInt64); if(BackupMemory.ReadInt64(testInt64Position) != testInt64) 3 [: f% T% R) n7 ^ { Console.WriteLine("Int64 read from backup memory is different thanwhat was written."); } ( |- D2 Z: a& d else + h# e5 z+ n; c! M2 M { " n8 c( D: P2 p# K Console.WriteLine("Int64 comparison check!"); } Thread.Sleep(Timeout.Infinite); } , S$ m9 \$ g& h s0 ?# P } } 7 {, u2 G& a- n: q& i0 n2 K2 V9 V" C7 M B1 C |