PY32F071配置进入USB升级方式

本文详细描述了如何修改普冉官方的IAP升级程序,以实现通过Triangle按键进入USB升级模式,以及在Keil中设置用户程序地址和外设初始化。通过GPIO控制按键,当按下按键时进入升级模式,否则加载用户程序。
摘要由CSDN通过智能技术生成

由于普冉官方给的例程没有明确的进入USB程序的方式,于是我根据需求修改了官方的IAP升级程序。这里有两个程序,要先烧录IAP升级程序,然后才能用USB升级的方式烧写用户程序。

根据原理图,PB12是一个按键,我们需要按下Triangle按键再上电进入升级模式

首先我们在keil中设置用户程序的地址为0x800400

然后在system_py32f07x.c中设置程序偏移地址

#define VECT_TAB_OFFSET  0x4000 /*!< Vector Table base offset field.
                                   This value must be a multiple of 0x100. */

然后回到IAP程序中定义一个用户程序的地址

/* Private define ------------------------------------------------------------*/
#define APP_ADDR        0x08004000

然后在IAP程序中写进入升级的方式

/**
  * @brief  应用程序入口函数.
  * @retval int
  */
int main(void)
{
	/* 初始化IWDG和WWDG */
	APP_WDG_Init();

	/* 初始化所有外设,Flash接口,SysTick */
	HAL_Init();

	/* 系统时钟配置 */
	APP_SystemClockConfig();

	/* Configure user Button */
	GPIO_InitTypeDef  GPIO_InitStruct;
	__HAL_RCC_GPIOB_CLK_ENABLE();
	GPIO_InitStruct.Pin = GPIO_PIN_12;
	GPIO_InitStruct.Mode = GPIO_MODE_INPUT;           
	GPIO_InitStruct.Pull = GPIO_PULLUP;                  
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;     
	HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); 	
	
	
  /* Check if the USER Button is pressed */
	if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_12) == 0)  //按住Y键再上电,进入USB升级
	{
		/* 初始化USART1外设 */
		APP_USART_InitRx(USART1);

		/* 初始化USART2外设 */
		APP_USART_InitRx(USART2);

		/* 初始化USART3外设 */
		APP_USART_InitRx(USART3);

		/* 初始化USART4外设 */
		APP_USART_InitRx(USART4);

		/* 初始化I2C外设 */
		APP_I2C_Init();

		/* 初始化USB外设 */
		APP_USBInit();

		APP_Bootloader_Init();

		/* 无限循环 */
		while (1)
		{
		APP_Bootloader_ProtocolDetection();
		}
	}
	APP_Bootloader_Go(APP_ADDR);
}

/**
  * @brief  USB外设初始化函数
  * @param  无
  * @retval 无
  */
static void APP_USBInit(void)
{
  __HAL_RCC_SYSCFG_CLK_ENABLE();

  __HAL_RCC_USB_CLK_ENABLE();
  
  __HAL_RCC_GPIOA_CLK_ENABLE();

  hid_custom_dfu_init();

  /* 使能USB中断 */
  NVIC_EnableIRQ(USBD_IRQn);
}

如果没有按下按键,直接跳转到用户程序的地址,开始跑用户程序,如果按住按键再插USB,电脑端显示进入升级模式

然后在keil中设置使用外部工具,添加工具路径,就可以在keil中直接点击下载

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值