stm32f103 DFU升级程序

本文介绍了如何通过STM32CubeMX创建工程并配置USBDFU功能,包括内存初始化、擦除操作注意事项,以及在STM32CubeProgrammer中使用USB进行程序升级的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过引导程序跳转到系统bootloader中,通过USB下载程序。
一、新建工程
用STM32CubeMX生成工程,基本设置都一样,主要是需要对USB进行设定。
在这里插入图片描述
该处Parameter Settings部分保持默认即可。
在这里插入图片描述
修改参数配置
在这里插入图片描述
USBD_DFU_XFER_SIZE(每次传输的最大字节数)
USBD_DFU_APP_DEFAULT_ADD (Base Address 0x)(升级
程序的起始地址):该值需要大于引导程序的大小,且是0x200的倍数。
程序所占flash的大小,可以去.map文件中查看

在这里插入图片描述

二、修改程序
修改usbd_dfu_if.c文件

/**
  * @brief  Memory initialization routine.
  * @retval USBD_OK if operation is successful, MAL_FAIL else.
  */
uint16_t MEM_If_Init_FS(void)
{
   
  /* USER CODE BEGIN 0 */
	HAL_FLASH_Unlock();
  __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGERR);
  return (USBD_OK);
  /* USER CODE END 0 */
}
/**
  * @brief  De-Initializes Memory
  * @retval USBD_OK if operation is successful, MAL_FAIL else
  */
uint16_t MEM_If_DeInit_FS(void)
{
   
  /* USER CODE BEGIN 1 */
	HAL_FLASH_Lock();
  return (USBD_OK);
  /* USER CODE END 1 */
}

关于flash的擦除,这里很重要,由于使用的是VG芯片,它的内部分为了两个BANK,进行擦除的时候要分别擦除,尝试过直接从0x08100000擦到起始地址,但是只能擦除一个BANK。

/**
  * @brief  Erase sector.
  * @param  Add: Address of sector to be erased.
  * @retval 0 if operation is successful, MAL_FAIL else.
  */
uint16_t MEM_If_Erase_FS(uint32_t Add)
{
   
  /* USER CODE BEGIN 2 */
    uint32_t NbOFPages=0; 
    uint32_t PageError;
	  HAL_StatusTypeDef status;
    FLASH_EraseInitTypeDef pEraseInit;

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

    /* Get the sector where start the user flash area */
    NbOFPages = 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值