简单的UART IAP.rar


1.什么是IAP? 英文名:in-application programming。 中文名:应用程序内编程。 作用:对于大多数基于闪存的系统,一个重要的要求是能够在最终产品中安装固件时进行更新。            STM32微控制器可以运行用户特定的固件来对微控制器中嵌入的闪存执行IAP。 接口:此功能支持的任何通信接口。 由于不限制通信接口协议等,只要能通过任意通信接口拿到新版固件包数据(bin文件),就能自己升级固件。 这就能做到添加  外部无线模块(4G模块、wifi)做到OTA升级。 也可以使用U盘或TF卡等外部存储设备做到OTG升级。U盘升级的IAP官方有模板程
资源截图
代码片段和文件信息
/*
 * flash_if.c
 *
 *  Created on: Aug 12 2020
 *      Author: Sudaroot
 */


/** @addtogroup STM32F4xx_IAP_Main
  * @{
  */

/* Includes ------------------------------------------------------------------*/
#include “flash_if.h“

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
static uint32_t GetSector(uint32_t Address);

/* Private functions ---------------------------------------------------------*/

/**
  * @brief  Unlocks Flash for write access
  * @param  None
  * @retval None
  */
void FLASH_If_Init(void)
{
  HAL_FLASH_Unlock();

  /* Clear pending flags (if any) */
  __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR |
                         FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);
}

/**
  * @brief  This function does an erase of all user flash area
  * @param  StartSector: start of user flash area
  * @retval 0: user flash area successfully erased
  *         1: error occurred
  */
uint32_t FLASH_If_Erase(uint32_t StartSector)
{
  uint32_t UserStartSector;
  uint32_t SectorError;
  FLASH_EraseInitTypeDef pEraseInit;

  /* Unlock the Flash to enable the flash control register access *************/
  FLASH_If_Init();

  /* Get the sector where start the user flash area */
  UserStartSector = GetSector(APPLICATION_ADDRESS);

  pEraseInit.TypeErase = TYPEERASE_SECTORS;
  pEraseInit.Sector = UserStartSector;
  pEraseInit.NbSectors = 10;
  pEraseInit.VoltageRange = VOLTAGE_RANGE_3;

  if (HAL_FLASHEx_Erase(&pEraseInit &SectorError) != HAL_OK)
  {
     /* Error occurred while page erase */
     return (1);
  }

  return (0);
}

/**
  * @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(uint32_t FlashAddress uint32_t* Data uint32_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(TYPEPROGRAM_WORD FlashAddress *(uint32_t*)(Data+i)) == HAL_OK)
    {
     /* Check the wri

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      26008  2020-08-16 21:52  IAP Bootloader.cproject

     文件       6889  2020-08-16 21:52  IAP Bootloader.mxproject

     文件       1387  2020-08-16 21:46  IAP Bootloader.project

     文件       2372  2020-08-20 23:31  IAP Bootloader.settingslanguage.settings.xml

     文件       2495  2020-08-12 14:35  IAP BootloaderCoreIncflash_if.h

     文件       2181  2020-08-16 21:52  IAP BootloaderCoreIncmain.h

     文件      20065  2020-08-16 21:52  IAP BootloaderCoreIncstm32f4xx_hal_conf.h

     文件       2106  2020-08-16 21:52  IAP BootloaderCoreIncstm32f4xx_it.h

     文件       6962  2020-08-13 11:11  IAP BootloaderCoreSrcflash_if.c

     文件       9497  2020-08-16 22:05  IAP BootloaderCoreSrcmain.c

     文件       4096  2020-08-16 21:52  IAP BootloaderCoreSrcstm32f4xx_hal_msp.c

     文件       5566  2020-08-16 21:52  IAP BootloaderCoreSrcstm32f4xx_it.c

     文件       2675  2020-08-12 10:44  IAP BootloaderCoreSrcsyscalls.c

     文件       1468  2020-08-12 10:44  IAP BootloaderCoreSrcsysmem.c

     文件      26457  2020-07-13 23:42  IAP BootloaderCoreSrcsystem_stm32f4xx.c

     文件      24986  2020-07-13 23:42  IAP BootloaderCoreStartupstartup_stm32f429igtx.s

     文件    1480591  2020-07-13 23:42  IAP BootloaderDriversCMSISDeviceSTSTM32F4xxIncludestm32f429xx.h

     文件       9485  2020-07-13 23:42  IAP BootloaderDriversCMSISDeviceSTSTM32F4xxIncludestm32f4xx.h

     文件       3796  2020-07-13 23:42  IAP BootloaderDriversCMSISDeviceSTSTM32F4xxIncludesystem_stm32f4xx.h

     文件      28208  2020-07-13 23:43  IAP BootloaderDriversCMSISIncludecmsis_armcc.h

     文件      56497  2020-07-13 23:43  IAP BootloaderDriversCMSISIncludecmsis_armclang.h

     文件       9014  2020-07-13 23:43  IAP BootloaderDriversCMSISIncludecmsis_compiler.h

     文件      62344  2020-07-13 23:43  IAP BootloaderDriversCMSISIncludecmsis_gcc.h

     文件      28414  2020-07-13 23:43  IAP BootloaderDriversCMSISIncludecmsis_iccarm.h

     文件       1716  2020-07-13 23:43  IAP BootloaderDriversCMSISIncludecmsis_version.h

     文件      97995  2020-07-13 23:43  IAP BootloaderDriversCMSISIncludecore_armv8mbl.h

     文件     168914  2020-07-13 23:43  IAP BootloaderDriversCMSISIncludecore_armv8mml.h

     文件      42208  2020-07-13 23:43  IAP BootloaderDriversCMSISIncludecore_cm0.h

     文件      50464  2020-07-13 23:43  IAP BootloaderDriversCMSISIncludecore_cm0plus.h

     文件      43456  2020-07-13 23:43  IAP BootloaderDriversCMSISIncludecore_cm1.h

............此处省略171个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)