Sau quá trình làm nhiều dự án mình thấy FLash rất quan trọng để lưu dữ liệu khi mất điện.

Flash có thể ghi được và đọc được

Chú ý khi ghi flash cần xem bộ nhớ sử dụng đến đâu

Vd bạn sử dụng chip 1M flash

phần ghi đọc có thể sử dụng từ 512kB quy đổi địa chỉ 512×1024= 0x08080000;

Về chương trình :

Main .c:

/**
******************************************************************************
* @file main.c
* @author MCD Application Team
* @version V1.0.0
* @date 18-April-2011
* @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>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
******************************************************************************
*/

/* Includes ——————————————————————*/
#include “stm32f4xx.h”
#include “usart.h”
extern __IO uint32_t TimmingDelay;
void delay_ms(__IO uint32_t time);
uint32_t Address0= 0x08040000;
void write_flash(uint32_t adress,uint32_t data)
{
FLASH_Unlock();

/* Erase the user Flash area ************************************************/
/* area defined by FLASH_USER_START_ADDR and FLASH_USER_END_ADDR */

/* Clear pending flags (if any) */
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR |
FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR);
/* Get the number of the start and end sectors */
/* Program the user Flash area word by word ********************************/
/* area defined by FLASH_USER_START_ADDR and FLASH_USER_END_ADDR */
FLASH_ProgramWord(adress,data);
FLASH_Lock();
}
uint32_t flash_read( uint32_t adress)
{
return (*(__IO uint32_t*)adress);

}
uint32_t data=0;

int main(void)
{
uint32_t i;
SysTick_Config(SystemCoreClock/1000);
USART_Configuration();
USART_NVIC_Config();
write_flash( Address0,12345);

i=0x1ffffff;
data=flash_read(Address0);
while (1)
{
printf(“data=%u:\n\r”,data);
delay_ms(100);
}
}
void delay_ms(__IO uint32_t time)
{
TimmingDelay = time;
while(TimmingDelay !=0);
}

/**
* @}
*/

/**
* @}
*/

/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/

 

Bình luận

Bình luận