为了给以后的Bootloader扩展更多的功能需求,我给我的Bootloader栈顶占用FLASH 0x10000的大小,也就是64k。 所以,目前Bootloader占用了从Sector0-Sector3三个扇区,剩下的区域就分给APP吧。 APP从FLASH的0x8010000开始运行,也就是从扇区4Sector-4开始,STM32F446RET6的FLASH的大小是512KB,由于Bootloader占用了64KB,所以...
而F4系列HAL库的Flash擦除函数,其形参为Sector的编号而非实际地址。比如我们需要擦除0x08000000起始地址的Sector,需要先获取Sector的编号0,作为函数的形参再调用擦除函数,程序如下: Sect = 0; FLASH_Erase_Sector(sect,FLASH_VOLTAGE_RANGE_3); 1. 2. 因此,我们需要编写一个函数用于获取Sector的编号,程序如下: u...
HAL_FLASH_Lock(); 2. 擦除相关 HAL_FLASHEx_Erase()函数会入参一个有关清除扇区配置的结构体对象,这个参数对应的结构体定义根据不同芯片的HAL库有所不同,F1/F4/L4均不相同,而且同系列不同Flash大小的芯片所能指向的地址也不相同,同时这里面还存在Sector/Page/Bank等概念,这些概念涉及到一次性所能清除区域的...
HAL_FLASH_Unlock(); 解锁内部flash函数,默认内部flASH是锁上的,使用的时候,需要解锁。 FLASH_EraseInitTypeDef 擦除内部flash的结构体, HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *SectorError) 擦除函数 需要注意的是 与flash有关的函数,在两个文件中 #include “stm32...
HAL_FLASH_Lock(); } F4的写入字符串: voidsaveBLEName(uint8_t*blename,uint8_tlen,uint8_tflag){HAL_FLASH_Unlock();FLASH_DataCacheCmd(DISABLE);FLASH_EraseInitTypeDeff;f.TypeErase=FLASH_TYPEERASE_SECTORS;//页面擦除f.Sector=FLASH_SECTOR_9;f.NbSectors=1;f.VoltageRange=FLASH_VOLTAGE_RANGE_3...
STM32:Flash擦除与读写操作(HAL库)应⽤平台:STM32F030F4P6 ST官⽅库:STM32Cube_FW_F0_V1.9.0 背景知识 绝⼤多数的单⽚机和微控制器(ARM,x86),地址空间都是以字节为单位的,也就是说⼀个地址是⼀个字节。Flash存储器有个特点,就是只能写0,不能写1。所以如果原来的地址有数据了,意味...
flash的成型以块(block)和扇区(sector)存在 STM32的flash在写的时候不能读,读的时候不能写,也就是说stm32在操作flash的时候程序必然是中止的,所以既不能响应中断,也不能有运行程序 During a write operation to the Flash memory, any attempt to read the Flash memory willstall the bus. The read operatio...
uint32_t *SectorError);5等待FALSH操作完成(读SR)HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32...
Flash memory addresses 1 Kbyte Size(byte) Description 0x0800 3C00 - 0x0800 3FFF STM32F030F4P6的Flash读写参考代码(HAL库) /* Base address of the Flash sectors */ 1 Kbyte Page 15 Sector 3 #define ADDR_FLASH_PAGE_0 ((uint32_t)0 /* Base @ of Page 0, 1 Kbyte */ #define ADDR_...
ret=HAL_RCC_ClockConfig( RCC_ClkInitStruct, FLASH_LATENCY_4);if(ret!=HAL_OK) while(1);//...