current position:Home>When using stm32g070 Hal library, if you want to write to flash, you must perform an erase. If you don't let it, you can't write continuously.
When using stm32g070 Hal library, if you want to write to flash, you must perform an erase. If you don't let it, you can't write continuously.
2022-01-27 03:58:34 【CSDN Q & A】
The phenomenon and background of the problem
Use stm32g070 HAL library , Want to write flash when , An erase must be performed , If you don't, you can't write continuously .
Is there a problem with the code ? There are still some places without configuration ?
uint8_t FLASH_Remove_Page(uint32_t WriteAddr){ uint32_t FirstPage = 0; uint32_t NbOfPages = 0; uint32_t PageError = 0; uint32_t addrx = 0; uint32_t endaddr = 0; uint32_t *u32pBuff; HAL_StatusTypeDef FlashStatus = HAL_OK; FLASH_EraseInitTypeDef EraseInitStruct = {
0}; //u32pBuff = pBuffer; addrx = WriteAddr; //endaddr = WriteAddr + NumToWrite * (sizeof(uint64_t)/sizeof(uint8_t)); HAL_FLASH_Unlock(); if (FLASH_LOG_ADD == addrx || FLASH_CFG_ADD == addrx || FLASH_FACTORY_SET == addrx) { /* Get the 1st page to erase */ FirstPage = GetPage(addrx); /* Get the number of pages to erase from 1st page */ NbOfPages = GetPage(addrx) - FirstPage + 1; /* Fill EraseInit structure*/ EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES; EraseInitStruct.Page = FirstPage; EraseInitStruct.NbPages = NbOfPages; if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK) { } } FlashStatus = FLASH_WaitForLastOperation(1000); // Wait for the last operation to complete HAL_FLASH_Lock(); return OK;}
void FLASH_JustWrite_32Bit(uint32_t WriteAddr, uint32_t *pBuffer, uint32_t NumToWrite) // Write only, do not erase { HAL_StatusTypeDef FlashStatus = HAL_OK; FLASH_EraseInitTypeDef EraseInitStruct = {
0}; uint32_t endaddr = 0; uint32_t addrx; uint32_t FirstPage = 0; uint32_t NbOfPages = 0; /* Get the 1st page to erase */ FirstPage = GetPage(addrx); /* Get the number of pages to erase from 1st page */ NbOfPages = GetPage(addrx) - FirstPage + 1; EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES; EraseInitStruct.Banks = FLASH_BANK_1; // operation BANK1 EraseInitStruct.Page = FirstPage; EraseInitStruct.NbPages = NbOfPages HAL_FLASH_Unlock(); // Unlock addrx = WriteAddr; endaddr = WriteAddr + NumToWrite * (sizeof(uint32_t) / sizeof(uint8_t)); while (WriteAddr < endaddr) // Writing data { FLASHRUN.u8SaveCount = HAL_FLASH_Program(FLASH_TYPEPROGRAM_FAST, addrx, (uint64_t)pBuffer); if (FLASHRUN.u8SaveCount == HAL_OK) { addrx = addrx + 4; pBuffer++; } else { // return ; break; } } HAL_FLASH_Lock(); // locked }
Operation results and error reporting contents
My solution ideas and tried methods
What I want to achieve
Refer to the answer 1:
FLASH All operations are performed by block or sector
You must erase... Before writing , Strictly speaking, it should only support writing from 1-->0, If FLASH The value on an address is not all 1, Then the write probability will be wrong
If you want to keep other values of the sector 1. from FLASH The contents of a sector or block are read out and stored in RAM 2. Put the value you want to write directly in `1 Read out in step `RAM Revision in China 3. erase FLASH 4. It will be revised RAM The entire data in is written to FLASH in
Refer to the answer 2:
copyright notice
author[CSDN Q & A],Please bring the original link to reprint, thank you.
https://en.cdmana.com/2022/01/202201270358319361.html
The sidebar is recommended
- Spring IOC container loading process
- [thinking] the difference between singleton mode and static method - object-oriented programming
- Hadoop environment setup (MySQL environment configuration)
- 10 minutes, using node JS creates a real-time early warning system for bad weather!
- Git tool
- Force deduction algorithm - 92 Reverse linked list II
- What is the sub problem of dynamic programming?
- C / C + +: static keyword summary
- Idea does not have the artifacts option when configuring Tomcat
- I don't know how to start this
guess what you like
-
Matlab simulation of transportation optimization algorithm based on PSO
-
MySQL slow log optimization
-
[Vue] as the window is stretched (larger, smaller, wider and higher), the text will not be displayed
-
Popular Linux distributions for embedded computing
-
The 72 year old uncle became popular. Wu Jing and Guo fan made his story into a film, which made countless dreamers blush
-
How to save computer research
-
Springboot implements excel import and export, which is easy to use, and poi can be thrown away
-
The final examination subjects of a class are mathematical programming, and the scores are sorted and output from high to low
-
Two pronged approach, Tsinghua Professor Pro code JDK and hotspot source code notes, one-time learning to understand
-
C + + recursive knapsack problem
Random recommended
- The use of GIT and GitHub and the latest git tutorial are easy to understand -- Video notes of crazy God speaking
- PostgreSQL statement query
- Ignition database test
- Context didn't understand why he got a high salary?, Nginxfair principle
- Bootstrap switch switch control user's guide, springcloud actual combat video
- A list that contains only strings. What other search methods can be used except sequential search
- [matlab path planning] multi ant colony algorithm grid map path planning [including GUI source code 650]
- [matlab path planning] improved genetic algorithm grid map path planning [including source code phase 525]
- Iinternet network path management system
- Appium settings app is not running after 5000ms
- Reactnative foundation - 07 (background image, status bar, statusbar)
- Reactnative foundation - 04 (custom rpx)
- Linux checks where the software is installed and what files are installed
- SQL statement fuzzy query and time interval filtering
- 69. Sqrt (x) (c + + problem solving version with vs runnable source program)
- Java project: OA management system (java + SSM + bootstrap + MySQL + JSP)
- Titanic passenger survival prediction
- Vectorization of deep learning formula
- Configuration and use of private image warehouse of microservice architect docker
- Relearn JavaScript events
- How does Java dynamically obtain what type of data is passed? It is used to judge whether the data is the same, dynamic data type
- How does the database cow optimize SQL?
- [data structure] chain structure of binary tree (pre order traversal) (middle order traversal) (post order traversal) (sequence traversal)
- Detailed explanation of red and black trees
- redhat7. 9 install database 19C
- Blue Bridge Cup notes: (the given elements are not repeated) complete arrangement (arrangement cannot be repeated, arrangement can be repeated)
- Detailed explanation of k8s management tool kubectl
- Android system view memory command