return 0; } 函数形参: FlashAddress:待写入FLASH的地址 Data:待写入数据的缓存区地址 DataLength:待写入数据的长度 说明: APP_END_ADDR:为宏定义 #define APP_END_ADDR ((uint32_t)0x0803FFFFUL) HAL库接口函数HAL_FLASH_Program的写入方式有三种: 1、半字写入(FLASH_TYPEPROGRAM_HALFWORD) 16bit(2字节) 2、整字写入(FLASH_TYPEPROGRAM_WORD) 32bit(4字节...
HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data); HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data); 前者为轮询方式写,后者为中断方式写。第一个参数为写模式,它定义了写的字节数量:双字,字,半字与字节。第...
intmain(void){HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_USART1_UART_Init();while(1){HAL_FLASH_Unlock();uint32_tPageError=0;__disable_irq();//擦除前关闭中断if(HAL_FLASHEx_Erase(&EraseInitStruct,&PageError)==HAL_OK){printf("擦除 成功\r\n");}__enable_irq();//擦除后...
写入位置,每次+8是因为存储的类型是uint64_t,占用64bit,8字节for(inti =0; i < len;i ++ , startAddressIndex +=8) {//写入数据HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, startAddressIndex, data[i]);
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, (uint32_t)(dest+i), *(uint32_t*)(src+i)) == HAL_OK) { / Check the written value */ if*(uint32_t *)(src + i) != *(uint32_t*)(dest+i)) { / Flash content doesn't match SRAM content */ return2; } } ...
WaitForLastOperation(50);/* 双字编程 */if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, start...
对于STM32L475来说,这里只有使用FLASH_TYPEPROGRAM_DOUBLEWORDf。而且要注意传入的地址只能8字节对齐,因为这里只能一次性写入8字节,没有别的模式可选。 5. 读Flash 我现在使用的读Flash的宏定义如下: #define FlashGetChar(addr) *((char*)(addr)) #define FlashGetU8(addr) *((uint8_t*)(addr)) #define...
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, destination, *((uint64_t *)(p_source + 2...
STM32H7的两个Flash BANK是256bit带宽,CPU访问是采用的两个64bit AXI总线。 HAL库的内部Flash编程函数HAL_FLASH_Program固定编写32字节数据。 70.2 内部Flash基础知识 70.2.1 内部Flash的硬件框图 认识一个外设,最好的方式就是看它的框图,方便我们快速的了解内部Flash的基本功能,然后再看手册了解细节。
另外,被设置成读保护后,FLASH前4K字节的空间会强制加上写保护,也就是说,即使是从FLASH启动的程序,也无法擦写这4K字节空间的内容;而对于前4K字节以外的空间,读保护并不影响它对其它空间的擦除/写入操作。利用这个特性,可以编写IAP代码(In Application Program)更新FLASH中的程序,它的原理是通过某个通讯接口获取将要...