N32G45X、N32G4FR、N32WB452系列MCU内嵌有自举程序(BOOT),存放在SystemMemory内,用于通过USART1或都USB-FS接口(全速USB设备,DFU协议)对用户程序(FLASH)进行重新编程。
国民技术MCU系列产品提供多种启动模式,可通过BOOT0、BOOT1引脚来选择。在实际应用中,MCU通常设置为Flash启动模式(BOOT0=0)。如果要使用内嵌的自举程序,必须将MCU修改为SystemMemory启动模式(BOOT0=1,BOOT1=0)后重新上电。有关启动模式的详细说明请参照对应的用户手册。
本文档介绍了一种BOOT跳转方法,便于用户在正常使用中不修改启动模式也能使用内嵌的自举模式。
本文档适用于国民技术的N32G452系列、N32G455系列、N32G457系列、N32G4FR系列、N32WB452系列产品。
1. 硬件需求
目前 MCU 内嵌的自举程序仅支持 USART1 或 USB-FS 接口,对应的 IO端口分别为 PA9/PA10(USART1)、PA11/PA12(USB),使用前必须确保端口连接可用。
2. 操作方法
2.1 参数定义
2.1.1 函数指针
必须预先定义一个函数指针类型: typedef void (*pFunction)(void);
2.1.2 必要参数
必须预先定义以下几个参数:
#define RAM_VECTOR_ADDR (0x20010000)
#define RAM_VECTOR_SIZE (64)
#define RAM_MSP_ADDR (0X20008690)
#define BOOT_MARK1_ADDR (0x1FFFF2D0)
#define BOOT_MARK2_ADDR (0x1FFFF288)
#define BOOT_MARK3_ADDR (0x40024C00)
注意:
1) RAM_VECTOR_ADDR 可根据实际情况修改,但要特别注意:
-不能超出 MCU 实际 SRAM 大小
-必须大于 RAM_MSP_ADDR
-从 RAM_VECTOR_ADDR 开始至少预留 256BYTE 的 SRAM 空间
2) 其他参数不能修改
3) 默认的参数值适用于大部分应用情况,不需要修改
2.2 使用方法
2.2.1 系统时钟设置
参照下面的函数,将系统时钟设置为 72MHz,采用 HSI+PLL 作为时钟源。
void SetSysClock_HSI_PLL(void)
{
/* It is necessary to initialize the RCC peripheral to the reset state.*/
RCC_DeInit();
/* Enable ex mode */
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR,ENABLE);
PWR->CTRL3 |= (uint32_t)0x00000001;
/* Enable ICACHE and Prefetch Buffer */
FLASH_SetLatency(FLASH_LATENCY_2);
FLASH_PrefetchBufSet(FLASH_PrefetchBuf_EN);
FLASH_iCacheCmd(FLASH_iCache_EN);
/* AHB prescaler factor set to 1,HCLK = SYSCLK = 72M */
RCC_ConfigHclk(RCC_SYSCLK_DIV1);
......
2.2.2 API 函数
调用下面的 API(Jump_To_BOOT),MCU 直接跳转到自举程序(BOOT)
void Jump_To_BOOT(void)
{ uint32_t i,*pVec,*pMark; uint32_t BootAddr;
/* Disable all interrupt */
__disable_irq();
......
|