你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

在nanoFramework中访问STM32备份寄存器

[复制链接]
木木&点点 发布时间:2018-11-19 21:48

( L6 N9 b% i* J4 C4 o% K
STM32的硬件条件下,很容易实现Stm32库的保存和读取Stm32备份寄存器。如果您需要在重新引导之间持久保存数据,那简直就是为你设计的。
1.jpg 8 S/ c2 o6 E4 ^- a$ l
$ E; q! _' W% K

% J0 g( ~. x  e; U
项目中使用的东西

8 G% Q: w. l& j+ y- ^5 K
硬件组件:

$ k* c+ N2 |8 c, I' R, x6 E8 y
         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

; F$ I8 }4 y$ }9 T4 d
STM32 SoC有一个被称为备份内存的RAM区域,它由RTC电源插头供电,可以在重启后继续工作。这是一个完美的工具。
  c9 t7 E2 q. k$ v0 u2 N5 l
nanoFramework.HardwareStm32类库抽象了使用此内存所需的所有配置和复杂性。您只需将需要保存的值(支持许多本机类型,因此您应该找到所需的类型)扔给它即可。如果你已经将电源连接到Vbatt pin,那就是。

$ w$ ^) C% h  n, b$ f! f; @& @0 b0 U
当需要时,返回到API并读取这些值。

. j" d* \" o" s! x9 O! N
代码:

/ k3 u) G5 c0 v4 G) }0 o
示例应用程序写入STM32备份内存并读取
4 t9 g2 V9 k' V2 S
using System;

) Z* ]- G2 c' y& c4 p6 d
using System.Threading;

( ^7 r9 v' j. g3 A1 s# @
using nanoFramework.Hardware.Stm32;
4 K0 E  n3 z. |0 z; Q
  X. s6 A& Z* T: o/ ?
namespace Stm32BackupMemory.TestApp

1 ]0 l: T2 G) Z
{

2 ]" d% f( p# Z( k& L9 ^$ e
    public class Program

( N7 J+ r8 p4 `" E+ Z
    {
) V! {1 q; ]& W8 v
        public static voidMain()

% O" G8 U9 x1 r2 z6 B
        {
- [) v3 }. q. C6 u+ y
           Console.WriteLine($"The backup memory has {BackupMemory.Size}bytes.");

  [7 T2 r/ q% ~7 R8 W

! c7 e" D) D$ i0 y
            // write a bytearray
, A" f. }  U7 i/ k  n: q
            uinttestBufferPosition = 5;

" j; _  M0 f* {( x% l' t
  B# ]4 D) [# W( ^; x8 M
            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

" h3 ^& B8 j; |5 [5 T
            // 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);

  w/ Y( @/ Y) e4 y$ e# i3 z" z
/ d/ I' a2 x9 v' b
           if(readBackBuffer.GetHashCode() != testBuffer.GetHashCode())

9 K  ^: H0 z9 G: A; Q1 T$ O( M
            {

& e6 j) g1 C9 H/ d  ?
               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
            }

4 K9 n$ O. A3 f& I/ j+ n

' t9 }' r* Q4 D) G0 }
            // write an Int64

' j) `4 s% ^4 f9 ]
            uinttestInt64Position = 15;

* k+ x, W4 v" z& ?9 ?

4 V- i' I6 Y2 R( n: a
            Int64 testInt64 =9876543210;

: f; P- a$ R. f) f
           BackupMemory.WriteInt64(testInt64Position, testInt64);

! U: ~; ~! R' |, |( Q

5 _. {4 x2 t, z
            if(BackupMemory.ReadInt64(testInt64Position) != testInt64)
3 [: f% T% R) n7 ^
            {

% P1 U6 R7 O8 |- l! I  @: }
               Console.WriteLine("Int64 read from backup memory is different thanwhat was written.");

) x; U- p; M  k; E1 L  m
            }
( |- D2 Z: a& d
            else
+ h# e5 z+ n; c! M2 M
            {
" n8 c( D: P2 p# K
               Console.WriteLine("Int64 comparison check!");

! I/ f7 g: K; z4 ?1 d+ _1 n8 B8 R
            }

9 j, c8 f% Y2 G5 Y% ]# U. d; O' ~5 P

$ {, H5 S; M6 y& ^
           Thread.Sleep(Timeout.Infinite);

1 m- b" F- [2 o  c# s5 A
        }
, S$ m9 \$ g& h  s0 ?# P
    }

5 p4 Q  H3 H8 J! a
}
7 {, u2 G& a- n: q& i0 n
2 K2 V9 V" C7 M  B1 C
收藏 评论0 发布时间:2018-11-19 21:48

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版