不含stm32 底层的代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
MyStm32Code/device/Inc/stmflash.h

131 lines
6.3 KiB

#ifndef __STMFLASH_H
#define __STMFLASH_H
#ifdef __cplusplus
extern "C" {
#endif
typedef enum
{
STM32_F1XX,
STM32_F4XX,
} STM32_FSeries_TypeDef;
typedef enum
{
STM_FALSH_IGT6,
STM_FALSH_ZGT6,
STM_FALSH_ZET6,
STM_FALSH_VET6,
STM_FALSH_RET6,
STM_FALSH_RBT6,
STM_FALSH_RCT6,
STM_FALSH_C8T6,
} STM_FALSH_TypeDef;
#define STM32_FSeries_TYPE STM32_F4XX
#define STM_FALSH_TYPE STM_FALSH_ZGT6
#include "main.h"
//FLASH起始地址
#define STM32_FLASH_BASE 0x08000000 //STM32 FLASH的起始地址
#define FLASH_WAITETIME 50000 //FLASH等待超时时间
#if STM_FALSH_TYPE == STM_FALSH_ZGT6 || STM_FALSH_TYPE == STM_FALSH_IGT6 || STM_FALSH_TYPE == STM_FALSH_ZET6
#define STM32_FLASH_SIZE 0x00100000 //STM32 FLASH的起始地址 1M
#define STM32_PAGE_SIZE 0x00000800 //STM32 页大小 2K
#define STM32_LAST_SECTOR_ADDR 0x080E0000 //STM32 页大小 2K
#define STM32_LAST_SECTOR_SIZE 0x00020000 //STM32 页大小 128K
#endif
//FLASH 扇区的起始地址
#define ADDR_FLASH_SECTOR_0 ((uint32_t)0x08000000) //扇区0起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_1 ((uint32_t)0x08004000) //扇区1起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_2 ((uint32_t)0x08008000) //扇区2起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_3 ((uint32_t)0x0800C000) //扇区3起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_4 ((uint32_t)0x08010000) //扇区4起始地址, 64 Kbytes
#define ADDR_FLASH_SECTOR_5 ((uint32_t)0x08020000) //扇区5起始地址, 128 Kbytes
#define ADDR_FLASH_SECTOR_6 ((uint32_t)0x08040000) //扇区6起始地址, 128 Kbytes
#define ADDR_FLASH_SECTOR_7 ((uint32_t)0x08060000) //扇区7起始地址, 128 Kbytes
#define ADDR_FLASH_SECTOR_8 ((uint32_t)0x08080000) //扇区8起始地址, 128 Kbytes
#define ADDR_FLASH_SECTOR_9 ((uint32_t)0x080A0000) //扇区9起始地址, 128 Kbytes
#define ADDR_FLASH_SECTOR_10 ((uint32_t)0x080C0000) //扇区10起始地址,128 Kbytes
#define ADDR_FLASH_SECTOR_11 ((uint32_t)0x080E0000) //扇区11起始地址,128 Kbytes
uint32_t STMFLASH_ReadWord(uint32_t faddr); //读出字
void STMFLASH_Write(uint32_t WriteAddr,uint32_t *pBuffer,uint32_t NumToWrite); //从指定地址开始写入指定长度的数据
void STMFLASH_Read(uint32_t ReadAddr,uint32_t *pBuffer,uint32_t NumToRead); //从指定地址开始读出指定长度的数据
int STMFLASH_ErasePage(uint32_t Page_Address); //从指定地址开始擦除页
//测试写入
void Test_Write(uint32_t WriteAddr,uint32_t WriteData);
#ifdef __cplusplus
}
#endif
#endif
/*
F103 可以用页擦除, 以页为单位操作。 F407以扇区为单位操作
擦除页函数 FLASH_ErasePage(uint32_t Page_Address); // F407无此函数
擦除扇区函数 HAL_FLASHEx_Erase(&FlashEraseInit,&SectorError)
擦除操作,以扇区为单位,不是以扇区为单位
写入, 至少16bit, 8bit 写入也是占2个位置,32bit = 2*16bit, 以半字为单位
STM32F407ZET6 内部Flash分区 512K
#define ADDR_FLASH_SECTOR_0 ((uint32_t)0x08000000) //扇区0起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_1 ((uint32_t)0x08004000) //扇区1起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_2 ((uint32_t)0x08008000) //扇区2起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_3 ((uint32_t)0x0800C000) //扇区3起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_4 ((uint32_t)0x08010000) //扇区4起始地址, 64 Kbytes
#define ADDR_FLASH_SECTOR_5 ((uint32_t)0x08020000) //扇区5起始地址, 128 Kbytes
#define ADDR_FLASH_SECTOR_6 ((uint32_t)0x08040000) //扇区6起始地址, 128 Kbytes
#define ADDR_FLASH_SECTOR_7 ((uint32_t)0x08060000) //扇区7起始地址, 128 Kbytes
STM32F407ZGT6 内部Flash分区 1M
#define ADDR_FLASH_SECTOR_0 ((uint32_t)0x08000000) //扇区0起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_1 ((uint32_t)0x08004000) //扇区1起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_2 ((uint32_t)0x08008000) //扇区2起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_3 ((uint32_t)0x0800C000) //扇区3起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_4 ((uint32_t)0x08010000) //扇区4起始地址, 64 Kbytes
#define ADDR_FLASH_SECTOR_5 ((uint32_t)0x08020000) //扇区5起始地址, 128 Kbytes
#define ADDR_FLASH_SECTOR_6 ((uint32_t)0x08040000) //扇区6起始地址, 128 Kbytes
#define ADDR_FLASH_SECTOR_7 ((uint32_t)0x08060000) //扇区7起始地址, 128 Kbytes
#define ADDR_FLASH_SECTOR_8 ((uint32_t)0x08080000) //扇区8起始地址, 128 Kbytes
#define ADDR_FLASH_SECTOR_9 ((uint32_t)0x080A0000) //扇区9起始地址, 128 Kbytes
#define ADDR_FLASH_SECTOR_10 ((uint32_t)0x080C0000) //扇区10起始地址,128 Kbytes
#define ADDR_FLASH_SECTOR_11 ((uint32_t)0x080E0000) //扇区11起始地址,128 Kbytes
STM32F429IGT6 内部Flash分区 -- 同上
STM32F103C8T6 内部Flash分区 64K, 64*1024Bytes 单个扇区 1K, 0x400
64K (F103C8T6 ) --->>>> 单个扇区 1K 0x400 最后一个扇区地址:0x0800FC00
128K (F103RCT6) --->>>> 单个扇区 1K 0x400 ,最后一个扇区地址:0x0801FC00
256K (F103RBT6) --->>> 单个扇区 2K 0x800 ,最后一个扇区地址:0x0803F800
512K (F103RET6), --->>> 单个扇区 2K 0x800 ,最后一个扇区地址:0x0807F800
512K (F103ZET6), --->>> 单个扇区 2K 0x800 ,最后一个扇区地址:0x0807F800
STM32F103VET 6 内部Flash分区 512K
#define ADDR_FLASH_SECTOR_0 ((uint32_t)0x08000000) //扇区0起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_1 ((uint32_t)0x08004000) //扇区1起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_2 ((uint32_t)0x08008000) //扇区2起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_3 ((uint32_t)0x0800C000) //扇区3起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_4 ((uint32_t)0x08010000) //扇区4起始地址, 64 Kbytes
#define ADDR_FLASH_SECTOR_5 ((uint32_t)0x08020000) //扇区5起始地址, 128 Kbytes
#define ADDR_FLASH_SECTOR_6 ((uint32_t)0x08040000) //扇区6起始地址, 128 Kbytes
#define ADDR_FLASH_SECTOR_7 ((uint32_t)0x08060000) //扇区7起始地址, 128 Kbytes
STM32F103ZET6 内部Flash分区 512K 每页2K
-->> 调用擦除页函数 FLASH_ErasePage(uint32_t Page_Address);
*/