اطلاعیه

Collapse
No announcement yet.

دخیره کردن اطلاعات روی stm32f107

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    دخیره کردن اطلاعات روی stm32f107

    سلام
    من 12 بایت رو می خوام در حالت اجرا از کاربر بگیرم و روی میکرو دخیره کنم
    آیا این میکرو EEPROM داخلی داره؟
    چطور ابنکار رو انجام بدم؟

    #2
    پاسخ : دخیره کردن اطلاعات روی stm32f107

    البته می تونم روی فلش بنویسم و بخونم اما می خوام مثل EEPROM باشه
    وقتی روی فلش می نویسم خیلی وقت ها ارور HardFault_Handler اتفاق میوفته

    دیدگاه


      #3
      پاسخ : دخیره کردن اطلاعات روی stm32f107

      نوشته اصلی توسط gbg
      سلام
      من 12 بایت رو می خوام در حالت اجرا از کاربر بگیرم و روی میکرو دخیره کنم
      آیا این میکرو EEPROM داخلی داره؟
      چطور ابنکار رو انجام بدم؟
      سلام
      راحتترین راه استفاده از ریجستر بکاپ هست فقط باید به پایه بکاپ میکرو یه باطری مثلا سکه ای وصل باشه:
      کد:
      /**
       ***************************************************************************** 
       * @title  BKP_BackupData.c
       * @author CooCox
       * @date  12 Nov 2013
       * @brief  This example shows how to store user data in the Backup data reg
       *     isters.As the Backup (BKP) domain still powered by VBAT when VDD
       *      is switched off, its contents are not lost if a battery is conn
       *     ected to VBAT pin. After an external reset , the LED PB8 is ligh
       *     ted up values in the BKP data registers are correct. This exampl
       *     e has been tested on MCBSTM32, STM32F103RB device.
       *******************************************************************************
       */
      ////// The above comment is automatically generated by CoIDE ///////////////////
      
      /**
       ******************************************************************************
       * @file  BKP/BKP_BackupData/main.c
       * @author MCD Application Team
       * @version V1.0.0
       * @date  30-October-2010
       * @brief  Main program body
       ******************************************************************************
       * @attention
       *
       * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
       * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
       * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
       * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
       * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
       * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
       *
       * <h2><center>© COPYRIGHT 2010 STMicroelectronics</center></h2>
       ******************************************************************************
       */
      
      /* Includes ------------------------------------------------------------------*/
      #include "stm32f10x.h"
      #include "stm32f10x_bkp.h"
      #include "stm32f10x_pwr.h"
      #include "stm32f10x_gpio.h"
      #include "stm32f10x_rcc.h"
      
      #define LED_PORT GPIOB
      #define BKP_DR_NUMBER       42
      
      /***************************************************************************//**
       * Global variables
       ******************************************************************************/
      GPIO_InitTypeDef GPIO_InitStructure;
      uint16_t BKPDataReg[BKP_DR_NUMBER] = { BKP_DR1, BKP_DR2, BKP_DR3, BKP_DR4,
          BKP_DR5, BKP_DR6, BKP_DR7, BKP_DR8, BKP_DR9, BKP_DR10, BKP_DR11,
          BKP_DR12, BKP_DR13, BKP_DR14, BKP_DR15, BKP_DR16, BKP_DR17, BKP_DR18,
          BKP_DR19, BKP_DR20, BKP_DR21, BKP_DR22, BKP_DR23, BKP_DR24, BKP_DR25,
          BKP_DR26, BKP_DR27, BKP_DR28, BKP_DR29, BKP_DR30, BKP_DR31, BKP_DR32,
          BKP_DR33, BKP_DR34, BKP_DR35, BKP_DR36, BKP_DR37, BKP_DR38, BKP_DR39,
          BKP_DR40, BKP_DR41, BKP_DR42 };
      
      /***************************************************************************//**
       * Declare function prototype
       ******************************************************************************/
      void WriteToBackupReg(uint16_t FirstBackupData);
      uint8_t CheckBackupReg(uint16_t FirstBackupData);
      void Delay(__IO uint32_t);
      
      /***************************************************************************//**
       * @brief This example shows how to store user data in the Backup data registers.
       *     As the Backup (BKP) domain still powered by VBAT when VDD is switched off, its
       *     contents are not lost if a battery is connected to VBAT pin.
       ******************************************************************************/
      void BKP_BackupData(void)
      {
        /* Enable PWR and BKP clock */
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
      
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
      
        /* Enable write access to Backup domain */
        PWR_BackupAccessCmd(ENABLE);
      
        /* Clear Tamper pin Event(TE) pending flag */
        BKP_ClearFlag();
      
        Delay(0xFFFFFF);
      
        /* Check if the Power On Reset flag is set */
        if (RCC_GetFlagStatus(RCC_FLAG_PORRST) == RESET)
        {
          /* Clear reset flags */
          RCC_ClearFlag();
      
          /* Check if Backup data registers are programmed */
          if (CheckBackupReg(0x3210) == 0x00)
          { /* Backup data registers values are correct */
      
            GPIO_WriteBit(LED_PORT, GPIO_Pin_8, Bit_SET);
          }
          else
          { /* Backup data registers values are not correct or they are not yet
           programmed (when the first time the program is executed) */
      
            /* Write data to Backup data registers */
            WriteToBackupReg(0x3210);
          }
        }
      
        while (1)
        {
        }
      }
      
      /***************************************************************************//**
       * @brief Writes data Backup DRx registers.
       ******************************************************************************/
      void WriteToBackupReg(uint16_t FirstBackupData)
      {
        uint32_t index = 0;
      
        for (index = 0; index < BKP_DR_NUMBER; index++)
        {
          BKP_WriteBackupRegister(BKPDataReg[index], FirstBackupData + (index
              * 0x5A));
        }
      }
      
      /***************************************************************************//**
       * @brief Checks if the Backup DRx registers values are correct or not.
       * @param FirstBackupData: data to be compared with Backup data registers.
       * @retval
       *     - 0: All Backup DRx registers values are correct
       *     - Value different from 0: Number of the first Backup register
       *      which value is not correct
       ******************************************************************************/
      uint8_t CheckBackupReg(uint16_t FirstBackupData)
      {
        uint32_t index = 0;
      
        for (index = 0; index < BKP_DR_NUMBER; index++)
        {
          if (BKP_ReadBackupRegister(BKPDataReg[index]) != (FirstBackupData
              + (index * 0x5A)))
          {
            return (index + 1);
          }
        }
      
        return 0;
      }
      
      /***************************************************************************//**
       * @brief Inserts a delay time.
       * @param nCount: specifies the delay time length.
       * @retval None
       ******************************************************************************/
      void Delay(__IO uint32_t nCount)
      {
        for (; nCount != 0; nCount--);
      }

      دیدگاه


        #4
        پاسخ : دخیره کردن اطلاعات روی stm32f107

        ممنون ولی من از قسمت باطری بک پ رو طراحی نکردم
        دوم اینکه نمی خوام به هیچ وجه اطلاعات از بین بره

        دیدگاه

        لطفا صبر کنید...
        X