打印
[N32G45x]

国民技术N32G45X/G4FR/WB452系列BOOT跳转应用说明

[复制链接]
363|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
断桥不断|  楼主 | 2023-2-23 18:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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();
......

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

27

帖子

1

粉丝