Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: easy-connect-v16 Watchdog FP MQTTPacket RecordType-v-16 watersenor_and_temp_code
Diff: Flash/flash_programming.cpp
- Revision:
- 32:8226837c56ae
- Parent:
- 26:f40cc4d011b0
- Child:
- 33:5b90257d2d57
--- a/Flash/flash_programming.cpp Mon Jan 08 22:09:56 2018 +0700
+++ b/Flash/flash_programming.cpp Mon Jan 08 18:07:56 2018 +0000
@@ -1,167 +1,167 @@
-#include "flash_programming.h"
-#include "stm32l4xx_hal_flash.h"
-
-uint32_t PageError = 0;
-
-FLASH_EraseInitTypeDef EraseInitStruct;
-
-uint32_t FP_GetPage(uint32_t Addr) {
- uint32_t page = 0;
-
- if (Addr < (FLASH_BASE + FLASH_BANK_SIZE))
- {
- /* Bank 1 */
- page = (Addr - FLASH_BASE) / FLASH_PAGE_SIZE;
- }
- else
- {
- /* Bank 2 */
- page = (Addr - (FLASH_BASE + FLASH_BANK_SIZE)) / FLASH_PAGE_SIZE;
- }
-
- return page;
-}
-
-int FP_ClearFlags() {
- __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_PGAERR | FLASH_FLAG_OPTVERR | FLASH_FLAG_PGSERR);
- if((__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PROGERR)) ||
- (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGAERR)) ||
- (__HAL_FLASH_GET_FLAG(FLASH_FLAG_SIZERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGSERR))) {
- printf("Clear flag error\r\n");
- return FAILED;
- }
- return PASSED;
-}
-
-uint32_t FP_ReadValue(uint32_t Addr) {
- uint32_t ReturnValue = *(__IO uint32_t*)Addr;
- return ReturnValue;
-}
-
-int FP_WriteMode(uint32_t WriteModeValue) {
- uint8_t CurrentPage = FP_GetPage(MODE_BASE_ADDRESS);
- uint32_t CurrentAddress = (MODE_BASE_ADDRESS + STEP_ADDRESS);
-
- EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
- EraseInitStruct.Banks = FLASH_BANK_1;
- EraseInitStruct.Page = CurrentPage;
- EraseInitStruct.NbPages = 1;
-
- if (FP_ClearFlags() != PASSED) {
- return FAILED;
- }
- HAL_FLASH_Unlock();
-
- if (FP_ReadValue(CurrentAddress) == WriteModeValue) {
- printf("Value does not change, no need to write\r\n");
- HAL_FLASH_Lock();
- return PASSED;
- }
- if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK) {
- printf("Erase error, error num %d\r\n", HAL_FLASH_GetError());
- }
- if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, CurrentAddress, WriteModeValue) == HAL_OK) {
- printf("Write OK\r\n");
- }
- else {
- printf("Write failed, error num %d\r\n", HAL_FLASH_GetError());
- }
- uint32_t readBack = FP_ReadValue(CurrentAddress);
- printf("Read back: %d\r\n", readBack);
- if (readBack != WriteModeValue) {
- printf("Write failed, wrong read back value\r\n");
- HAL_FLASH_Lock();
- return FAILED;
- }
- HAL_FLASH_Lock();
- return PASSED;
-}
-
-int FP_WriteConfigValues(uint8_t MinOxi, uint8_t MaxOxi, uint32_t UploadPeriod) {
- uint8_t CurrentPage = FP_GetPage(CONF_BASE_ADDRESS);
- uint32_t CurrentAddress = MIN_OXI_ADDRESS;
- EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
- EraseInitStruct.Banks = FLASH_BANK_1;
- EraseInitStruct.Page = CurrentPage;
- EraseInitStruct.NbPages = 1;
-
- if (FP_ClearFlags() != PASSED) {
- return FAILED;
- }
- HAL_FLASH_Unlock();
-
- if ((FP_ReadValue(MIN_OXI_ADDRESS) == MinOxi) &&
- (FP_ReadValue(MAX_OXI_ADDRESS) == MaxOxi) &&
- (FP_ReadValue(UPLOAD_PERIOD_ARRESS) == UploadPeriod)) {
- printf("Value does not change, no need to write\r\n");
- HAL_FLASH_Lock();
- return PASSED;
- }
- if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK) {
- printf("Erase error, error num %d\r\n", HAL_FLASH_GetError());
- }
- while (CurrentAddress < (UPLOAD_PERIOD_ARRESS + STEP_ADDRESS)) {
- switch (CurrentAddress) {
- case (MIN_OXI_ADDRESS): if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, CurrentAddress, MinOxi) == HAL_OK) {
- printf("Write MinOxi OK\r\n");
- }
- else {
- printf("Write MinOxi failed, error num %d\r\n", HAL_FLASH_GetError());
- }
- break;
- case (MAX_OXI_ADDRESS): if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, CurrentAddress, MaxOxi) == HAL_OK) {
- printf("Write MaxOxi OK\r\n");
- }
- else {
- printf("Write MaxOxi failed, error num %d\r\n", HAL_FLASH_GetError());
- }
- break;
- case (UPLOAD_PERIOD_ARRESS): if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, CurrentAddress, UploadPeriod) == HAL_OK) {
- printf("Write UploadPeriod OK\r\n");
- }
- else {
- printf("Write UploadPeriod failed, error num %d\r\n", HAL_FLASH_GetError());
- }
- break;
- default: break;
- }
- CurrentAddress = CurrentAddress + STEP_ADDRESS;
- }
-
- CurrentAddress = MIN_OXI_ADDRESS;
- while (CurrentAddress < (UPLOAD_PERIOD_ARRESS + STEP_ADDRESS)) {
- switch (CurrentAddress) {
- case (MIN_OXI_ADDRESS): if (FP_ReadValue(CurrentAddress) == MinOxi) {
- printf("Read back MinOxi: %d\r\n", FP_ReadValue(CurrentAddress));
- }
- else {
- printf("Write MinOxi failed, wrong read back value\r\n");
- HAL_FLASH_Lock();
- return FAILED;
- }
- break;
- case (MAX_OXI_ADDRESS): if (FP_ReadValue(CurrentAddress) == MaxOxi) {
- printf("Read back MaxOxi: %d\r\n", FP_ReadValue(CurrentAddress));
- }
- else {
- printf("Write MaxOxi failed, wrong read back value\r\n");
- HAL_FLASH_Lock();
- return FAILED;
- }
- break;
- case (UPLOAD_PERIOD_ARRESS): if (FP_ReadValue(CurrentAddress) == UploadPeriod) {
- printf("Read back UploadPeriod: %d\r\n", FP_ReadValue(CurrentAddress));
- }
- else {
- printf("Write UploadPeriod failed, wrong read back value\r\n");
- HAL_FLASH_Lock();
- return FAILED;
- }
- break;
- default: break;
- }
- CurrentAddress = CurrentAddress + STEP_ADDRESS;
- }
- HAL_FLASH_Lock();
- return PASSED;
+#include "flash_programming.h"
+#include "stm32l4xx_hal_flash.h"
+
+uint32_t PageError = 0;
+
+FLASH_EraseInitTypeDef EraseInitStruct;
+
+uint32_t FP_GetPage(uint32_t Addr) {
+ uint32_t page = 0;
+
+ if (Addr < (FLASH_BASE + FLASH_BANK_SIZE))
+ {
+ /* Bank 1 */
+ page = (Addr - FLASH_BASE) / FLASH_PAGE_SIZE;
+ }
+ else
+ {
+ /* Bank 2 */
+ page = (Addr - (FLASH_BASE + FLASH_BANK_SIZE)) / FLASH_PAGE_SIZE;
+ }
+
+ return page;
+}
+
+int FP_ClearFlags() {
+ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_PGAERR | FLASH_FLAG_OPTVERR | FLASH_FLAG_PGSERR);
+ if((__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PROGERR)) ||
+ (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGAERR)) ||
+ (__HAL_FLASH_GET_FLAG(FLASH_FLAG_SIZERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGSERR))) {
+ printf("Clear flag error\r\n");
+ return FAILED;
+ }
+ return PASSED;
+}
+
+uint32_t FP_ReadValue(uint32_t Addr) {
+ uint32_t ReturnValue = *(__IO uint32_t*)Addr;
+ return ReturnValue;
+}
+
+int FP_WriteMode(uint32_t WriteModeValue) {
+ uint8_t CurrentPage = FP_GetPage(MODE_BASE_ADDRESS);
+ uint32_t CurrentAddress = (MODE_BASE_ADDRESS + STEP_ADDRESS);
+
+ EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
+ EraseInitStruct.Banks = FLASH_BANK_1;
+ EraseInitStruct.Page = CurrentPage;
+ EraseInitStruct.NbPages = 1;
+
+ if (FP_ClearFlags() != PASSED) {
+ return FAILED;
+ }
+ HAL_FLASH_Unlock();
+
+ if (FP_ReadValue(CurrentAddress) == WriteModeValue) {
+ printf("Value does not change, no need to write\r\n");
+ HAL_FLASH_Lock();
+ return PASSED;
+ }
+ if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK) {
+ printf("Erase error, error num %d\r\n", HAL_FLASH_GetError());
+ }
+ if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, CurrentAddress, WriteModeValue) == HAL_OK) {
+ printf("Write OK\r\n");
+ }
+ else {
+ printf("Write failed, error num %d\r\n", HAL_FLASH_GetError());
+ }
+ uint32_t readBack = FP_ReadValue(CurrentAddress);
+ printf("Read back: %d\r\n", readBack);
+ if (readBack != WriteModeValue) {
+ printf("Write failed, wrong read back value\r\n");
+ HAL_FLASH_Lock();
+ return FAILED;
+ }
+ HAL_FLASH_Lock();
+ return PASSED;
+}
+
+int FP_WriteConfigValues(uint8_t MinOxi, uint8_t MaxOxi, uint32_t UploadPeriod) {
+ uint8_t CurrentPage = FP_GetPage(CONF_BASE_ADDRESS);
+ uint32_t CurrentAddress = MIN_OXI_ADDRESS;
+ EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
+ EraseInitStruct.Banks = FLASH_BANK_1;
+ EraseInitStruct.Page = CurrentPage;
+ EraseInitStruct.NbPages = 1;
+
+ if (FP_ClearFlags() != PASSED) {
+ return FAILED;
+ }
+ HAL_FLASH_Unlock();
+
+ if ((FP_ReadValue(MIN_OXI_ADDRESS) == MinOxi) &&
+ (FP_ReadValue(MAX_OXI_ADDRESS) == MaxOxi) &&
+ (FP_ReadValue(UPLOAD_PERIOD_ARRESS) == UploadPeriod)) {
+ printf("Value does not change, no need to write\r\n");
+ HAL_FLASH_Lock();
+ return PASSED;
+ }
+ if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK) {
+ printf("Erase error, error num %d\r\n", HAL_FLASH_GetError());
+ }
+ while (CurrentAddress < (UPLOAD_PERIOD_ARRESS + STEP_ADDRESS)) {
+ switch (CurrentAddress) {
+ case (MIN_OXI_ADDRESS): if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, CurrentAddress, MinOxi) == HAL_OK) {
+ printf("Write MinOxi OK\r\n");
+ }
+ else {
+ printf("Write MinOxi failed, error num %d\r\n", HAL_FLASH_GetError());
+ }
+ break;
+ case (MAX_OXI_ADDRESS): if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, CurrentAddress, MaxOxi) == HAL_OK) {
+ printf("Write MaxOxi OK\r\n");
+ }
+ else {
+ printf("Write MaxOxi failed, error num %d\r\n", HAL_FLASH_GetError());
+ }
+ break;
+ case (UPLOAD_PERIOD_ARRESS): if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, CurrentAddress, UploadPeriod) == HAL_OK) {
+ printf("Write UploadPeriod OK\r\n");
+ }
+ else {
+ printf("Write UploadPeriod failed, error num %d\r\n", HAL_FLASH_GetError());
+ }
+ break;
+ default: break;
+ }
+ CurrentAddress = CurrentAddress + STEP_ADDRESS;
+ }
+
+ CurrentAddress = MIN_OXI_ADDRESS;
+ while (CurrentAddress < (UPLOAD_PERIOD_ARRESS + STEP_ADDRESS)) {
+ switch (CurrentAddress) {
+ case (MIN_OXI_ADDRESS): if (FP_ReadValue(CurrentAddress) == MinOxi) {
+ printf("Read back MinOxi: %d\r\n", FP_ReadValue(CurrentAddress));
+ }
+ else {
+ printf("Write MinOxi failed, wrong read back value\r\n");
+ HAL_FLASH_Lock();
+ return FAILED;
+ }
+ break;
+ case (MAX_OXI_ADDRESS): if (FP_ReadValue(CurrentAddress) == MaxOxi) {
+ printf("Read back MaxOxi: %d\r\n", FP_ReadValue(CurrentAddress));
+ }
+ else {
+ printf("Write MaxOxi failed, wrong read back value\r\n");
+ HAL_FLASH_Lock();
+ return FAILED;
+ }
+ break;
+ case (UPLOAD_PERIOD_ARRESS): if (FP_ReadValue(CurrentAddress) == UploadPeriod) {
+ printf("Read back UploadPeriod: %d\r\n", FP_ReadValue(CurrentAddress));
+ }
+ else {
+ printf("Write UploadPeriod failed, wrong read back value\r\n");
+ HAL_FLASH_Lock();
+ return FAILED;
+ }
+ break;
+ default: break;
+ }
+ CurrentAddress = CurrentAddress + STEP_ADDRESS;
+ }
+ HAL_FLASH_Lock();
+ return PASSED;
}
\ No newline at end of file