您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ HAL_FLASH_Program函数代码示例

51自学网 2021-06-01 21:20:59
  C++
这篇教程C++ HAL_FLASH_Program函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中HAL_FLASH_Program函数的典型用法代码示例。如果您正苦于以下问题:C++ HAL_FLASH_Program函数的具体用法?C++ HAL_FLASH_Program怎么用?C++ HAL_FLASH_Program使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了HAL_FLASH_Program函数的30个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: flash_write

void flash_write(const uint32_t *src, uint32_t dst, uint32_t size){    // Unlock flash    HAL_FLASH_Unlock();    #if defined(MCU_SERIES_H7)    // Program the flash 32 bytes at a time.    for (int i=0; i<size/32; i++) {        if (HAL_FLASH_Program(TYPEPROGRAM_WORD, dst, (uint64_t)(uint32_t) src) != HAL_OK) {            // error occurred during flash write            HAL_FLASH_Lock(); // lock the flash            __fatal_error();        }        src += 8;        dst += 32;    }    #else    // Program the flash 4 bytes at a time.    for (int i=0; i<size/4; i++) {        if (HAL_FLASH_Program(TYPEPROGRAM_WORD, dst, *src) != HAL_OK) {            // error occurred during flash write            HAL_FLASH_Lock(); // lock the flash            __fatal_error();        }        src += 1;        dst += 4;    }    #endif    // lock the flash    HAL_FLASH_Lock();}
开发者ID:openmv,项目名称:openmv,代码行数:32,


示例2: flash_program_page

/** Program one page starting at defined address * * The page should be at page boundary, should not cross multiple sectors. * This function does not do any check for address alignments or if size * is aligned to a page size. * @param obj The flash object * @param address The sector starting address * @param data The data buffer to be programmed * @param size The number of bytes to program * @return 0 for success, -1 for error */int32_t flash_program_page(flash_t *obj, uint32_t address,        const uint8_t *data, uint32_t size){    uint32_t StartAddress = 0;    int32_t status = 0;    if ((address >= (FLASH_BASE + FLASH_SIZE)) || (address < FLASH_BASE)) {        return -1;    }    if ((size % 8) != 0) {        /* L4 flash devices can only be programmed 64bits/8 bytes at a time */        return -1;    }    if (flash_unlock() != HAL_OK) {        return -1;    }    /* Program the user Flash area word by word */    StartAddress = address;    /*  HW needs an aligned address to program flash, which data     *  parameters doesn't ensure  */    if ((uint32_t) data % 4 != 0) {        volatile uint64_t data64;        while ((address < (StartAddress + size)) && (status == 0)) {            for (uint8_t i =0; i < 8; i++) {                *(((uint8_t *) &data64) + i) = *(data + i);            }            if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, address, data64)                    == HAL_OK) {                address = address + 8;                data = data + 8;            } else {                status = -1;            }        }    } else { /*  case where data is aligned, so let's avoid any copy */        while ((address < (StartAddress + size)) && (status == 0)) {            if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, address,                        *((uint64_t*) data))                    == HAL_OK) {                address = address + 8;                data = data + 8;            } else {                status = -1;            }        }    }    flash_lock();    return status;}
开发者ID:Archcady,项目名称:mbed-os,代码行数:67,


示例3: flash_program_page

int32_t flash_program_page(flash_t *obj, uint32_t address, const uint8_t *data, uint32_t size){    uint32_t StartAddress = 0;    int32_t status = 0;    if (!(IS_FLASH_PROGRAM_ADDRESS(address))) {        return -1;    }    if ((size % MIN_PROG_SIZE) != 0) {        return -1;    }    if (flash_unlock() != HAL_OK) {        return -1;    }    /* Program the user Flash area word by word */    StartAddress = address;    /* HW needs an aligned address to program flash, which data parameter doesn't ensure */    if ((uint32_t) data % 4 != 0) {        volatile uint32_t data32;        while (address < (StartAddress + size) && (status == 0)) {            for (uint8_t i = 0; i < MIN_PROG_SIZE; i++) {                *(((uint8_t *) &data32) + i) = *(data + i);            }            if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address, data32) == HAL_OK) {                address = address + MIN_PROG_SIZE;                data = data + MIN_PROG_SIZE;            } else {                status = -1;            }        }    } else { /*  case where data is aligned, so let's avoid any copy */        while ((address < (StartAddress + size)) && (status == 0)) {            if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address, *((uint32_t*) data)) == HAL_OK) {                address = address + MIN_PROG_SIZE;                data = data + MIN_PROG_SIZE;            } else {                status = -1;            }        }    }    flash_lock();    return status;}
开发者ID:mbedNoobNinja,项目名称:mbed,代码行数:51,


示例4: EE_VerifyPageFullWriteVariable

/**  * @brief  Verify if active page is full and Writes variable in EEPROM.  * @param  VirtAddress: 16 bit virtual address of the variable  * @param  Data: 16 bit data to be written as variable value  * @retval Success or error status:  *           - FLASH_COMPLETE: on success  *           - PAGE_FULL: if valid page is full  *           - NO_VALID_PAGE: if no valid page was found  *           - Flash error code: on write Flash error  */static uint16_t EE_VerifyPageFullWriteVariable(uint16_t VirtAddress, uint16_t Data){  HAL_StatusTypeDef FlashStatus = HAL_OK;  uint16_t ValidPage = PAGE0;  uint32_t Address = EEPROM_START_ADDRESS, PageEndAddress = EEPROM_START_ADDRESS+PAGE_SIZE;  /* Get valid Page for write operation */  ValidPage = EE_FindValidPage(WRITE_IN_VALID_PAGE);    /* Check if there is no valid page */  if (ValidPage == NO_VALID_PAGE)  {    return  NO_VALID_PAGE;  }  /* Get the valid Page start Address */  Address = (uint32_t)(EEPROM_START_ADDRESS + (uint32_t)(ValidPage * PAGE_SIZE));  /* Get the valid Page end Address */  PageEndAddress = (uint32_t)((EEPROM_START_ADDRESS - 1) + (uint32_t)((ValidPage + 1) * PAGE_SIZE));  /* Check each active page address starting from begining */  while (Address < PageEndAddress)  {    /* Verify if Address and Address+2 contents are 0xFFFFFFFF */    if ((*(__IO uint32_t*)Address) == 0xFFFFFFFF)    {      /* Set variable data */      FlashStatus = HAL_FLASH_Program(TYPEPROGRAM_HALFWORD, Address, Data);             /* If program operation was failed, a Flash error code is returned */      if (FlashStatus != HAL_OK)      {        return FlashStatus;      }      /* Set variable virtual address */      FlashStatus = HAL_FLASH_Program(TYPEPROGRAM_HALFWORD, Address + 2, VirtAddress);             /* Return program operation status */      return FlashStatus;    }    else    {      /* Next address location */      Address = Address + 4;    }  }  /* Return PAGE_FULL in case the valid page is full */  return PAGE_FULL;}
开发者ID:z80,项目名称:stm32f429,代码行数:59,


示例5: FLASH_If_Write

/**  * @brief  This function writes a data buffer in flash (data are 32-bit aligned).  * @note   After writing data buffer, the flash content is checked.  * @param  destination: start address for target location  * @param  p_source: pointer on buffer with data to write  * @param  length: length of data buffer (unit is 32-bit word)  * @retval uint32_t 0: Data successfully written to Flash memory  *         1: Error occurred while writing data in Flash memory  *         2: Written Data in flash memory is different from expected one  */uint32_t FLASH_If_Write(uint32_t destination, uint32_t *p_source, uint32_t length){  uint32_t i = 0;  /* Unlock the Flash to enable the flash control register access *************/  HAL_FLASH_Unlock();  for (i = 0; (i < length) && (destination <= (USER_FLASH_END_ADDRESS-4)); i++)  {    /* Device voltage range supposed to be [2.7V to 3.6V], the operation will       be done by word */     if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, destination, *(uint32_t*)(p_source+i)) == HAL_OK)          {     /* Check the written value */      if (*(uint32_t*)destination != *(uint32_t*)(p_source+i))      {        /* Flash content doesn't match SRAM content */        return(FLASHIF_WRITINGCTRL_ERROR);      }      /* Increment FLASH destination address */      destination += 4;    }    else    {      /* Error occurred while writing data in Flash memory */      return (FLASHIF_WRITING_ERROR);    }  }  /* Lock the Flash to disable the flash control register access (recommended     to protect the FLASH memory against possible unwanted operation) *********/  HAL_FLASH_Lock();  return (FLASHIF_OK);}
开发者ID:NjordCZ,项目名称:stm32cubef0,代码行数:45,


示例6: writeEEPROM

// FIXME: HAL for now this will only work for F4/F7 as flash layout is differentvoid writeEEPROM(void){    // Generate compile time error if the config does not fit in the reserved area of flash.    BUILD_BUG_ON(sizeof(master_t) > FLASH_TO_RESERVE_FOR_CONFIG);    HAL_StatusTypeDef status;    uint32_t wordOffset;    int8_t attemptsRemaining = 3;    suspendRxSignal();    // prepare checksum/version constants    masterConfig.version = EEPROM_CONF_VERSION;    masterConfig.size = sizeof(master_t);    masterConfig.magic_be = 0xBE;    masterConfig.magic_ef = 0xEF;    masterConfig.chk = 0; // erase checksum before recalculating    masterConfig.chk = calculateChecksum((const uint8_t *) &masterConfig, sizeof(master_t));    // write it    /* Unlock the Flash to enable the flash control register access *************/    HAL_FLASH_Unlock();    while (attemptsRemaining--)    {        /* Fill EraseInit structure*/        FLASH_EraseInitTypeDef EraseInitStruct = {0};        EraseInitStruct.TypeErase     = FLASH_TYPEERASE_SECTORS;        EraseInitStruct.VoltageRange  = FLASH_VOLTAGE_RANGE_3; // 2.7-3.6V        EraseInitStruct.Sector        = (FLASH_SECTOR_TOTAL-1);        EraseInitStruct.NbSectors     = 1;        uint32_t SECTORError;        status = HAL_FLASHEx_Erase(&EraseInitStruct, &SECTORError);        if (status != HAL_OK)        {            continue;        }        else        {            for (wordOffset = 0; wordOffset < sizeof(master_t); wordOffset += 4)            {                status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, CONFIG_START_FLASH_ADDRESS + wordOffset, *(uint32_t *) ((char *) &masterConfig + wordOffset));                if(status != HAL_OK)                {                    break;                }            }        }        if (status == HAL_OK) {            break;        }    }    HAL_FLASH_Lock();    // Flash write failed - just die now    if (status != HAL_OK || !isEEPROMContentValid()) {        failureMode(FAILURE_FLASH_WRITE_FAILED);    }    resumeRxSignal();}
开发者ID:tianbin4279,项目名称:betaflight,代码行数:61,


示例7: WriteFlash

HAL_StatusTypeDef WriteFlash(int32_t* table, uint32_t Address, uint32_t lenth)  {  HAL_StatusTypeDef res;  HAL_FLASH_Unlock();  __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR |                          FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR);     /* Erase the user Flash area  (area defined by FLASH_USER_START_ADDR and FLASH_USER_END_ADDR) ***********/  EraseFlash(Address);    for(int i=0;i<lenth;i++)    HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,Address+4*i,*(table+i));  res = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,Address+4*lenth-4,table[lenth-1]);  HAL_FLASH_Lock();   return res;}
开发者ID:StefanJia,项目名称:test2,代码行数:16,


示例8: EE_Format

/**  * @brief  Erases PAGE and PAGE1 and writes VALID_PAGE header to PAGE  * @param  None  * @retval Status of the last operation (Flash write or erase) done during  *         EEPROM formating  */static HAL_StatusTypeDef EE_Format(void){  HAL_StatusTypeDef OperationStatus = HAL_OK;  /* Erase Page0 */  FLASH_Erase_Sector(PAGE0_ID, VOLTAGE_RANGE);  /* If erase operation was failed, a Flash error code is returned */  OperationStatus = FLASH_WaitForLastOperation(1000);  if(OperationStatus != HAL_OK)  {  	return OperationStatus;  }  /* Set Page0 as valid page: Write VALID_PAGE at Page0 base address */  OperationStatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, PAGE0_BASE_ADDRESS, VALID_PAGE);  /* If program operation was failed, a Flash error code is returned */  if (OperationStatus != HAL_OK)  {    return OperationStatus;  }  /* Erase Page1 */  FLASH_Erase_Sector(PAGE1_ID, VOLTAGE_RANGE);  OperationStatus = FLASH_WaitForLastOperation(1000);  if(OperationStatus != HAL_OK)  {  	return OperationStatus;  }  /* Return Page1 erase operation status */  return OperationStatus;}
开发者ID:javifercep,项目名称:MuBABoot,代码行数:38,


示例9: Flash_If_Write

/**  * @brief  Writes Data into Memory.  * @param  src: Pointer to the source buffer. Address to be written to.  * @param  dest: Pointer to the destination buffer.  * @param  Len: Number of data to be written (in bytes).  * @retval 0 if operation is successeful, MAL_FAIL else.  */uint16_t Flash_If_Write(uint8_t *src, uint8_t *dest, uint32_t Len){  uint32_t i = 0;    for(i = 0; i < Len; i+=4)  {    /* Device voltage range supposed to be [2.7V to 3.6V], the operation will       be done by byte */     if(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 */        return 2;      }    }    else    {      /* Error occurred while writing data in Flash memory */      return 1;    }  }  return 0;}
开发者ID:z80,项目名称:stm32f429,代码行数:32,


示例10: stm32f3_flash_program

/** * @brief Write data to flash memory * * @param dev * @param base * @param data * @param len * * @return Negative error code */static int stm32f3_flash_program(struct flash_dev *dev, uint32_t base, const void* data, size_t len) {	int err = 0;	int offset;	if (!stm32f3_flash_check_align(base, len)			|| ((uintptr_t) data & 0x1) != 0) {		return -EINVAL;	}	if (!stm32f3_flash_check_range(dev, base, len)) {		return -EFBIG;	}	HAL_FLASH_Unlock();	/* Write data halfword by halfword */	for (offset = 0; offset < len; offset += 2) {		if (HAL_OK != HAL_FLASH_Program(TYPEPROGRAM_HALFWORD,					dev->start + base + offset,					*((uint32_t*) data + offset)))			return -1; /* TODO: set appropriate code */	}	/* Lock to prevent unwanted operations with flash memory */	HAL_FLASH_Lock();	return err;}
开发者ID:AleksandraButrova,项目名称:embox,代码行数:38,


示例11: program_flash_data

int program_flash_data(uint32_t start, uint32_t size, uint8_t *data){  uint64_t data64;  uint32_t offset = 0;  while (offset < size) {    data64 = 0xFFFFFFFFFFFFFFFF;    if((size - offset) < 8) {      memcpy((uint8_t *)&data64, (uint8_t *)&data[offset], (size - offset));    } else {      memcpy((uint8_t *)&data64, (uint8_t *)&data[offset], 8);    }    if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, start, data64) == HAL_OK) {      start += 8;      offset += 8;    } else {      /* Error occurred while writing data in Flash memory.         User can add here some code to deal with this error */      while (1) {      }    }  }  return 0;}
开发者ID:meisteg,项目名称:muc-loader,代码行数:25,


示例12: stm32f4_flash_write

static intstm32f4_flash_write(const struct hal_flash *dev, uint32_t address,        const void *src, uint32_t num_bytes){    const uint8_t *sptr;    uint32_t i;    int rc;    sptr = src;    /*     * Clear status of previous operation.     */    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | /      FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR| FLASH_FLAG_PGSERR);    for (i = 0; i < num_bytes; i++) {        rc = HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, address, sptr[i]);        if (rc != 0) {            return rc;        }        address++;    }    return 0;}
开发者ID:ccollins476ad,项目名称:incubator-mynewt-core,代码行数:25,


示例13: FLASH_If_Write

/**  * @brief  This function writes a data buffer in flash (data are 32-bit aligned).  * @note   After writing data buffer, the flash content is checked.  * @param  FlashAddress: start address for writing data buffer  * @param  Data: pointer on data buffer  * @param  DataLength: length of data buffer (unit is 32-bit word)     * @retval 0: Data successfully written to Flash memory  *         1: Error occurred while writing data in Flash memory  *         2: Written Data in flash memory is different from expected one  */uint32_t FLASH_If_Write(__IO uint32_t* FlashAddress, uint32_t* Data ,uint16_t DataLength){  uint32_t i = 0;  for (i = 0; (i < DataLength) && (*FlashAddress <= (USER_FLASH_END_ADDRESS-4)); i++)  {    /* Device voltage range supposed to be [2.7V to 3.6V], the operation will       be done by word */     if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, *FlashAddress,  *(uint32_t*)(Data+i)) == HAL_OK)    {     /* Check the written value */      if (*(uint32_t*)*FlashAddress != *(uint32_t*)(Data+i))      {        /* Flash content doesn't match SRAM content */        return(2);      }      /* Increment FLASH destination address */      *FlashAddress += 4;    }    else    {      /* Error occurred while writing data in Flash memory */      return (1);    }  }  return (0);}
开发者ID:451506709,项目名称:automated_machine,代码行数:38,


示例14: SaveSSIDPasswordToMemory

/**  * @brief  Save Access Point parameters to FLASH  * @param  None  * @retval System_Status_t (MODULE_SUCCESS/MODULE_ERROR)  */System_Status_t SaveSSIDPasswordToMemory(void){  System_Status_t status = MODULE_ERROR;  /* Reset Before The data in Memory */  status = ResetSSIDPasswordInMemory();  if (status) {    /* Store in Flash Memory */    uint32_t Address = BLUEMSYS_FLASH_ADD;    int32_t WriteIndex;    /* Unlock the Flash to enable the flash control register access *************/    HAL_FLASH_Unlock();    /* Write the Magic Number */    {      uint32_t MagicNumber = WIFI_CHECK_SSID_KEY;      if (HAL_FLASH_Program(TYPEPROGRAM_WORD, Address,MagicNumber) == HAL_OK) {        Address = Address + 4;      } else {        printf("/r/nError while writing in FLASH");        status = MODULE_ERROR;      }    }    /* Write the Wifi */    for (WriteIndex=0;WriteIndex<UNION_DATA_SIZE;WriteIndex++) {      if (HAL_FLASH_Program(TYPEPROGRAM_WORD, Address,UnionWifiToken.Data[WriteIndex]) == HAL_OK){        Address = Address + 4;      } else {        printf("/r/nError while writing in FLASH");        status = MODULE_ERROR;      }    }    /* Lock the Flash to disable the flash control register access (recommended    to protect the FLASH memory against possible unwanted operation) *********/    HAL_FLASH_Lock();    printf("/n/rSaveSSIDPasswordToMemory OK");  } else {    printf("/n/rError while resetting FLASH memory");  }  return status;}
开发者ID:nguyendinhthi,项目名称:nguyendinh,代码行数:52,


示例15: program_flash_dword

int program_flash_dword(const uint64_t *dword){    int rv;    dbgprintx32("program_flash_dword ", PARTITION_FLASHMODE_START, "/r/n");    rv = HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, PARTITION_FLASHMODE_START, *dword);    return rv;}
开发者ID:meisteg,项目名称:muc-loader,代码行数:8,


示例16: hacs_pstore_set

int hacs_pstore_set(hacs_pstore_type_t ent, uint8_t *wbuf, uint32_t byte_len){  uint32_t ent_addr = hacs_pstore_ent_rel_addr[ent];  hacs_pstore_entry_t *ent_header;  hacs_pstore_header_t *bank_header;  uint8_t *buf_ptr;  uint32_t counter;  uint32_t temp;  uint32_t sector;  int retval;  // Read in the entire current bank  memcpy(ram_buf, (uint8_t*)current_bank_addr, HACS_PSTORE_BANK_SIZE);  // Check entry size. Make sure we are not writing something too big.  retval = -HACS_INVALID_ARGS;  HACS_REQUIRES(byte_len <= hacs_pstore_ent_size[ent], done);  // Update entry content  buf_ptr = (uint8_t*)(ram_buf + ent_addr + sizeof(hacs_pstore_entry_t));  memcpy(buf_ptr, wbuf, byte_len);  // Update entry header  ent_header = (hacs_pstore_entry_t*)(ram_buf + ent_addr);  ent_header->byte_len = byte_len;  ent_header->crc = hacs_crc32_calc(wbuf, byte_len); // each entry has its own CRC  // Update bank header  bank_header = (hacs_pstore_header_t *)ram_buf;  bank_header->bank_version++;  bank_header->layout_version = HACS_PSTORE_LAYOUT_VERSION;  // Write the ram buffer to the alternate bank  HAL_FLASH_Unlock();  sector = (alternate_bank_addr == HACS_PSTORE_0_ADDR) ? HACS_PSTORE_0_SECTOR : HACS_PSTORE_1_SECTOR;  FLASH_Erase_Sector(sector, VOLTAGE_RANGE_3);  // Write the ram buffer word by word.  counter = 0;  while(counter < sizeof(ram_buf)) {    HAL_FLASH_Program(TYPEPROGRAM_WORD, alternate_bank_addr+counter,                      *(uint32_t*)(ram_buf+counter)); // unaligned access supported    counter += 4;  }  // Note that I exploit the fact that the ram buffer is word-aligned   // (its length is multiple of 4).  assert(counter == sizeof(ram_buf));  HAL_FLASH_Lock();  // Switch current bank and alternate bank  temp = alternate_bank_addr;  alternate_bank_addr = current_bank_addr;  current_bank_addr = temp;  retval = HACS_NO_ERROR;done:  return retval;}
开发者ID:gzwsc2007,项目名称:Hobby_Airplane_Control_System,代码行数:57,


示例17: main

int main(void){	HAL_StatusTypeDef status;	FLASH_EraseInitTypeDef eraseInit;	uint32_t sectorError;	uint32_t *ptr=ADDRESS_SECTOR_18;	uint32_t checkCR;	int guard=0;	while(1){		status=HAL_FLASH_Unlock();		//this guard function is to program the Flash		if(guard){			while(status==HAL_BUSY);			status=HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, ADDRESS_SECTOR_18, DATA_PROGRAM);			while(status==HAL_BUSY);			guard=0;		}		//this guard function is to sector erase the Flash		if(guard){			flashEraseInit(&eraseInit,							FLASH_TYPEERASE_SECTORS,							0,							FLASH_SECTOR_18,							1,							FLASH_VOLTAGE_RANGE_3);			while(status==HAL_BUSY);			HAL_FLASHEx_Erase(&eraseInit,&sectorError);			while(status==HAL_BUSY);			guard=0;		}		//this guard function is to Mass erase the Flash		if(guard){			flashEraseInit(&eraseInit,							FLASH_TYPEERASE_MASSERASE,							0,							0,							1,							FLASH_VOLTAGE_RANGE_3);			while(status==HAL_BUSY);			HAL_FLASHEx_Erase(&eraseInit,&sectorError);			while(status==HAL_BUSY);			guard=0;		}		status=HAL_FLASH_Lock();	}}
开发者ID:JangSing,项目名称:stm32f429_Flash_Hal,代码行数:56,


示例18: flash_write

void flash_write(uint32_t flash_dest, const uint32_t *src, uint32_t num_word32) {    #if defined(MCU_SERIES_L4)    // program the flash uint64 by uint64    for (int i = 0; i < num_word32 / 2; i++) {        uint64_t val = *(uint64_t*)src;        if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, flash_dest, val) != HAL_OK) {            // error occurred during flash write            HAL_FLASH_Lock(); // lock the flash            return;        }        flash_dest += 8;        src += 2;    }    if ((num_word32 & 0x01) == 1) {        uint64_t val = *(uint64_t*)flash_dest;        val = (val & 0xffffffff00000000uL) | (*src);        if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, flash_dest, val) != HAL_OK) {            // error occurred during flash write            HAL_FLASH_Lock(); // lock the flash            return;        }    }    #else    // program the flash word by word    for (int i = 0; i < num_word32; i++) {        if (HAL_FLASH_Program(TYPEPROGRAM_WORD, flash_dest, *src) != HAL_OK) {            // error occurred during flash write            HAL_FLASH_Lock(); // lock the flash            return;        }        flash_dest += 4;        src += 1;    }    #endif    // lock the flash    HAL_FLASH_Lock();}
开发者ID:19emtuck,项目名称:micropython,代码行数:42,


示例19: EPS_set_memory_word

//set word from a specific memory address: remote debug session.void EPS_set_memory_word(uint32_t memory_address, uint32_t *memory_data){	uint32_t flash_write_value = *memory_data;	/* write to memory the proper status true value */	HAL_FLASH_Unlock();	HAL_FLASH_Program(TYPEPROGRAM_WORD, memory_address, flash_write_value);	HAL_FLASH_Lock();}
开发者ID:nchronas,项目名称:upsat-eps-software,代码行数:12,


示例20: flash_write

void flash_write(uint32_t flash_dest, const uint32_t *src, uint32_t num_word32) {    // program the flash word by word    for (int i = 0; i < num_word32; i++) {        if (HAL_FLASH_Program(TYPEPROGRAM_WORD, flash_dest, *src) != HAL_OK) {            // error occurred during flash write            HAL_FLASH_Lock(); // lock the flash            return;        }        flash_dest += 4;        src += 1;    }    // lock the flash    HAL_FLASH_Lock();}
开发者ID:ashtons,项目名称:micropython,代码行数:15,


示例21: FLASH_If_Write

/**  * @brief  Writes a data buffer in flash (data are 32-bit aligned).  * @note   After writing data buffer, the flash content is checked.  * @param  Address: Start address for writing data buffer  * @param  Data: Pointer on data buffer  * @retval 0: Data successfully written to Flash memory  *         1: Error occurred while writing data in Flash memory  */uint32_t FLASH_If_Write(uint32_t Address, uint32_t Data){  /* Program the user Flash area word by word    (area defined by FLASH_USER_START_ADDR and APPLICATION_ADDRESS) ***********/  if(Address <= (uint32_t) USER_FLASH_LAST_PAGE_ADDRESS)  {    if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, Data)!= HAL_OK)      return (1);  }  else  {    return (1);  }  return (0);}
开发者ID:Joe-Merten,项目名称:Stm32-Tools-Evaluation,代码行数:25,


示例22: flash_write

void flash_write(const uint32_t *src, uint32_t dst, uint32_t size){    // unlock flash    HAL_FLASH_Unlock();    // program the flash word by word    for (int i=0; i<size/4; i++) {        if (HAL_FLASH_Program(TYPEPROGRAM_WORD, dst, *src) != HAL_OK) {            // error occurred during flash write            HAL_FLASH_Lock(); // lock the flash            __fatal_error();        }        src += 1;        dst += 4;    }    // lock the flash    HAL_FLASH_Lock();}
开发者ID:michaelchi08,项目名称:openmv,代码行数:19,


示例23: TpmUtilStorePersistedData

HAL_StatusTypeDefTpmUtilStorePersistedData(    void    ){    HAL_StatusTypeDef retVal = HAL_OK;    HAL_FLASH_Unlock();    FLASH_Erase_Sector(FLASH_SECTOR_23, FLASH_VOLTAGE_RANGE_3);    for(uint32_t n = 0; n < sizeof(persistedData); n++)    {        if((retVal = HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, ADDR_FLASH_SECTOR_23 + n, ((uint8_t*)&persistedData)[n])) != HAL_OK)        {            printf("Flash Write Error @ 0x%08x/r/n", ADDR_FLASH_SECTOR_23 + n);            goto Cleanup;        }    }Cleanup:    HAL_FLASH_Lock();}
开发者ID:DivyaMahadevan,项目名称:security,代码行数:19,


示例24: EE_Format

/**  * @brief  Erases PAGE and PAGE1 and writes VALID_PAGE header to PAGE  * @param  None  * @retval Status of the last operation (Flash write or erase) done during  *         EEPROM formating  */static HAL_StatusTypeDef EE_Format(void){  HAL_StatusTypeDef FlashStatus = HAL_OK;  uint32_t SectorError = 0;  FLASH_EraseInitTypeDef pEraseInit;  pEraseInit.TypeErase = FLASH_TYPEERASE_SECTORS;    pEraseInit.Sector = PAGE0_ID;  pEraseInit.NbSectors = 1;  pEraseInit.VoltageRange = VOLTAGE_RANGE;  /* Erase Page0 */  if(!EE_VerifyPageFullyErased(PAGE0_BASE_ADDRESS))  {    FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError);     /* If erase operation was failed, a Flash error code is returned */    if (FlashStatus != HAL_OK)    {      return FlashStatus;    }  }  /* Set Page0 as valid page: Write VALID_PAGE at Page0 base address */  FlashStatus = HAL_FLASH_Program(TYPEPROGRAM_HALFWORD, PAGE0_BASE_ADDRESS, VALID_PAGE);   /* If program operation was failed, a Flash error code is returned */  if (FlashStatus != HAL_OK)  {    return FlashStatus;  }  pEraseInit.Sector = PAGE1_ID;  /* Erase Page1 */  if(!EE_VerifyPageFullyErased(PAGE1_BASE_ADDRESS))  {      FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError);     /* If erase operation was failed, a Flash error code is returned */    if (FlashStatus != HAL_OK)    {      return FlashStatus;    }  }    return HAL_OK;}
开发者ID:z80,项目名称:stm32f429,代码行数:48,


示例25: EE_WriteVariable

void EE_WriteVariable(EepromAddress32 virtAddress, uint32_t data){	uint16_t length=EE_LastUnusedVariable;	uint32_t address = FLASH_USER_START_ADDR;	for (uint16_t varIndex = 0;varIndex < length;varIndex++)	{		uint32_t data32 = *(__IO uint32_t *)address;		EE_storage[varIndex] = data32;		address = address + 4;	}	EE_storage[virtAddress] = data; //write the new data	HAL_FLASH_Unlock();	/* Get the 1st page to erase */	uint32_t FirstPage = GetPage(FLASH_USER_START_ADDR);	/* Get the number of pages to erase from 1st page */	uint32_t NbOfPages = GetPage(FLASH_USER_END_ADDR) - FirstPage + 1;	/* Get the bank */	uint32_t BankNumber = GetBank(FLASH_USER_START_ADDR);	uint32_t PAGEError;	/* Fill EraseInit structure*/	FLASH_EraseInitTypeDef EraseInitStruct;	EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;	EraseInitStruct.Banks       = BankNumber;	EraseInitStruct.Page        = FirstPage;	EraseInitStruct.NbPages     = NbOfPages;	HAL_Error_Handler(HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError));	address = FLASH_USER_START_ADDR;	for (uint16_t varIndex = 0;varIndex < length;varIndex+=2)	{		uint64_t toWrite=EE_storage[varIndex];		if (varIndex+1<length)		{			toWrite|= ((uint64_t)EE_storage[varIndex+1])<<32;		}		HAL_Error_Handler(HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, address, toWrite));		address = address + 8;	}	HAL_FLASH_Lock();}
开发者ID:molnard,项目名称:STM32L476_FT811,代码行数:41,


示例26: EE_Format

/**  * @brief  Erases PAGE and PAGE1 and writes VALID_PAGE header to PAGE  * @param  None  * @retval Status of the last operation (Flash write or erase) done during  *         EEPROM formating  */static HAL_StatusTypeDef EE_Format(void){  HAL_StatusTypeDef flashstatus = HAL_OK;  uint32_t page_error = 0;  FLASH_EraseInitTypeDef s_eraseinit;  s_eraseinit.TypeErase   = FLASH_TYPEERASE_PAGES;  s_eraseinit.PageAddress = PAGE0_ID;  s_eraseinit.NbPages     = 1;  /* Erase Page0 */  if(!EE_VerifyPageFullyErased(PAGE0_BASE_ADDRESS))  {    flashstatus = HAL_FLASHEx_Erase(&s_eraseinit, &page_error);     /* If erase operation was failed, a Flash error code is returned */    if (flashstatus != HAL_OK)    {      return flashstatus;    }  }  /* Set Page0 as valid page: Write VALID_PAGE at Page0 base address */  flashstatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, PAGE0_BASE_ADDRESS, VALID_PAGE);   /* If program operation was failed, a Flash error code is returned */  if (flashstatus != HAL_OK)  {    return flashstatus;  }  s_eraseinit.PageAddress = PAGE1_ID;  /* Erase Page1 */  if(!EE_VerifyPageFullyErased(PAGE1_BASE_ADDRESS))  {      flashstatus = HAL_FLASHEx_Erase(&s_eraseinit, &page_error);     /* If erase operation was failed, a Flash error code is returned */    if (flashstatus != HAL_OK)    {      return flashstatus;    }  }    return HAL_OK;}
开发者ID:Lembed,项目名称:STM32CubeF1-mirrors,代码行数:47,


示例27: saveState

void saveState(){	HAL_FLASH_Unlock();	if (HAL_OK != erase((uint32_t) &_loader_state_addr, (uint32_t) &_loader_state_addr))	{		printf("Error while loader state saving: cannot erase state page. Rebooting.../n");		reboot();	}	//FLASH_PageErase((uint32_t) &_loader_state_addr);	for (uint32_t i=0; i < sizeof(LoaderState) / 4; i++)	{		uint32_t targetAddress = (uint32_t) &_loader_state_addr + 4*i;		uint32_t* pWord = ((uint32_t*) &state) + i;		if (HAL_OK != HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, targetAddress, *pWord))		{			printf("Error while loader state saving: cannot program state page. Rebooting.../n");			reboot();		}	}	HAL_FLASH_Lock();}
开发者ID:DAlexis,项目名称:stm32-usb-bootloader,代码行数:21,


示例28: setNetworkUpgradeTarg

uint8_t setNetworkUpgradeTarg(uint8_t targ)  {	uint32_t   i;  	/*Unlock the Flash to enable the flash control register access*/ 	HAL_FLASH_Unlock();	/* Fill EraseInit structure ,Here just SECTOR_11 need to be erased*/    EraseInitStruct.TypeErase = TYPEERASE_SECTORS;    EraseInitStruct.VoltageRange = VOLTAGE_RANGE_3;    EraseInitStruct.Sector = FLASH_SECTOR_2;    EraseInitStruct.NbSectors = 1;	if (HAL_FLASHEx_Erase(&EraseInitStruct, &SectorError) != HAL_OK)	{      /*Erase failed*/	  printf("Set network Upgrade error/n/r");	  return 0;    }	/*Program the selected FLASH area byte by byte*/	Address = FLASH_TARG_START_ADDR;	if (HAL_FLASH_Program(TYPEPROGRAM_BYTE, Address,targ) != HAL_OK)	{	  printf("Set network Upgrade error/n/r");	  return 0; 							}	/*Lock the flash to ensure the security of my program*/	HAL_FLASH_Lock();	Address = FLASH_TARG_START_ADDR;	MemoryProgramStatus = 0;	data8 = *(__IO uint8_t*)Address;	if ( data8 != targ )	{	  MemoryProgramStatus++;  	}/*Check if there is an issue to program data*/	if (MemoryProgramStatus != 0)	{	  printf("Set network Upgrade error/n/r");	  return 0;	}	return 1;  }
开发者ID:JasonYSU,项目名称:VETH3000Switch,代码行数:40,


示例29: stm32f3_flash_write

static intstm32f3_flash_write(const struct hal_flash *dev, uint32_t address,        const void *src, uint32_t num_bytes){    const uint16_t *sptr;    uint32_t i, half_words;    int rc;    sptr = src;    half_words = (num_bytes + 1) / 2;    HAL_FLASH_Unlock();    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGERR);    for (i = 0, rc = HAL_OK; i < half_words && rc == HAL_OK; ++i) {        rc = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, address, sptr[i]);        address += 2;    }    HAL_FLASH_Lock();    return rc == HAL_OK ? 0 : rc;}
开发者ID:ccollins476ad,项目名称:incubator-mynewt-core,代码行数:22,


示例30: flash_program

void flash_program(uint32_t flash_user_start_addr,uint32_t flash_user_end_addr){		uint32_t Address = 0;	  Address = flash_user_start_addr;		while (Address < flash_user_end_addr)		{			if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, DATA_32) == HAL_OK)			{				Address = Address + 4;			}			else			{ 				/* Error occurred while writing data in Flash memory. 					 User can add here some code to deal with this error */				/*					FLASH_ErrorTypeDef errorcode = HAL_FLASH_GetError();				*/				Error_Handler();			}		}}
开发者ID:AnswerInTheWind,项目名称:STM32L0xx_Drivers,代码行数:22,



注:本文中的HAL_FLASH_Program函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ HAL_FLASH_Unlock函数代码示例
C++ HAL_FLASHEx_Erase函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。