Hallo zusammen!
Ich arbeite mit dem STM32F103VDT6 und dem uVision von Keil.
Ich schreibe per Tastendruck ins Backup RAM Register DR1. Nach einem
Poweron schreibe ich den Wert vom BKP zurückt in die Zählervariable.
Am Vbat, der nach einem Spannungsabfall an Vdd per internem Switch
automatisch zugeschalten wird, hängt ein Kondensator mit einer Diode.
Nach einem Poweroff beträgt die Spannung am Kondensator 2.68V.
Das Problem nun ist, dass nach einem Poweroff die Daten im BKP Ram
verloren gehen.
Ich verwende die StandartLib.
Mein Code:
1 | #include <RTL.h>
|
2 | #include <stdlib.h>
|
3 | #include <stdint.h>
|
4 | #include "stm32f10x.h"
|
5 |
|
6 | #define PIN_MOT_Enable_BASE GPIOD_BASE
|
7 | #define PIN_MOT_Enable_PIN 11
|
8 | #define PIN_MOT_Enable_PIN2 12
|
9 |
|
10 |
|
11 | void init(void)
|
12 | {
|
13 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
|
14 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
|
15 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
|
16 | }
|
17 |
|
18 | int main (void)
|
19 | {
|
20 | init();
|
21 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
|
22 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);
|
23 | PWR_BackupAccessCmd(ENABLE);
|
24 | BKP_ClearFlag();
|
25 |
|
26 | if(RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET)
|
27 | {
|
28 | /* Clear reset flags */
|
29 | RCC_ClearFlag();
|
30 | if(BKP_ReadBackupRegister(BKP_DR1) == 0)
|
31 | {
|
32 |
|
33 | }
|
34 | else
|
35 | {
|
36 | PWR_BackupAccessCmd(ENABLE);
|
37 | BKP_WriteBackupRegister(BKP_DR1, 0x0000000C);
|
38 | PWR_BackupAccessCmd(DISABLE);
|
39 | }
|
40 | }
|
41 | while(1)
|
42 | {
|
43 | if((GPIO_ReadInputDataBit((GPIO_TypeDef *) PIN_MOT_Enable_BASE, (1 << PIN_MOT_Enable_PIN)) == 0))
|
44 | {
|
45 | PWR_BackupAccessCmd(ENABLE);
|
46 | BKP_WriteBackupRegister(BKP_DR1, 0x00000005);
|
47 | PWR_BackupAccessCmd(DISABLE);
|
48 | }
|
49 |
|
50 | if((GPIO_ReadInputDataBit((GPIO_TypeDef *) PIN_MOT_Enable_BASE, (1 << PIN_MOT_Enable_PIN2)) == 0))
|
51 | {
|
52 | PWR_BackupAccessCmd(ENABLE);
|
53 | BKP_WriteBackupRegister(BKP_DR1, 0x0000000B);
|
54 | PWR_BackupAccessCmd(DISABLE);
|
55 | }
|
56 |
|
57 | };
|
58 | }
|
Hat schon mal Jemand so etwas gemacht, oder sieht Jemand meinen Fehler?
Vielen Dank und freundliche Grüsse!
M.B.