一,实验设计

/** bootloader实验* 实验目的:* 将bootloader 和 app 工程烧录进入开发板,在bootloader程序里,使用按键KEY1,跳转进入APP程序** BOOTLOADRT程序内存分配:* 中断向量表* 0x00000000 - 0x00000400* flash配置信息* 0x00000400 - 0x00000410* bootloader程序 占用31.728k空间* 0x00000410 - 0x00008000** APP程序内存分配:* 中断向量表* 0x00008000 - 0x00008400* flash配置信息* 0x00008400 - 0x00008410* bootloader程序 占用256k空间* 0x00008410 - 0x00048410* 内存配置文件在工程文件夹内的Project Setting/Linker Files/S32K144_64_flash下** 操作方法,将两个应用同时烧录进开发板内即可。* IO配置* KEY1 PTC12* KEY2 PTC13* KEY3 PTB2* LED1 PTD16* LED2 PTD15* LED3 PTD1* LED4 PTD0
*/

二,BootLoader代码设计

1.S32k144_64_flash.id文件

2.main.c


#include "Cpu.h"
#include "delay.h"
#include "uart.h"
#include"key.h"
#include"oled.h"volatile int exit_code = 0;#define LED1(x)  PINS_DRV_WritePin(PTD,16,!x);
#define LED2(x)  PINS_DRV_WritePin(PTD,15,!x);
#define LED3(x)  PINS_DRV_WritePin(PTD,1,!x);
#define LED4(x)  PINS_DRV_WritePin(PTD,0,!x);#define APP_START_ADDRESS  0x00008000 //app开始地址void Bootup_Application(uint32_t appEntry, uint32_t appStack){static void (*jump_to_application)(void);static uint32_t stack_pointer;/*把应用程序入口地址赋值给函数指针*/jump_to_application = (void (*)(void))appEntry;stack_pointer = appStack;/* 重新定向中断向量表 */S32_SCB->VTOR = (uint32_t)APP_START_ADDRESS;/* 设置栈指针  */__asm volatile ("MSR msp, %0\n" : : "r" (stack_pointer) : "sp");__asm volatile ("MSR psp, %0\n" : : "r" (stack_pointer) : "sp");/*跳转*/jump_to_application();}int main(void)
{/* Write your local variable definition here */uint8_t pinstate;int MCU_Freq;uint32_t appEntry, appStack;CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);MCU_Freq = delay_init();//初始化delay函数PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr); //初始化IOLPUART_DRV_Init(INST_LPUART1, &lpuart1_State, &lpuart1_InitConfig0); //初始化串口u1_printf("当前进入BOOTLOADER程序,MCU运行频率为 %d Mhz \r\n",MCU_Freq);while(1){pinstate = KEY_Proc (1);if(pinstate ==BTN1_PRES ){u1_printf("KEY1 按下 2秒后进入app \r\n");delay_ms(2000);appStack = *(uint32_t *)(APP_START_ADDRESS);appEntry = *(uint32_t *)(APP_START_ADDRESS + 4);Bootup_Application(appEntry, appStack);}else{LCD_clear_L(0,4); //OLED清行LCD_clear_L(0,5);}delay_ms(100);PINS_DRV_TogglePins(PTD, 1 << 0);PINS_DRV_TogglePins(PTD, 1 << 1);}return exit_code;} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/

3.下载配置

三,APP的配置

1.S32k144_64_flash.id文件

2.main.c

#include "Cpu.h"
#include "delay.h"
#include "uart.h"
#include"key.h"
#include"oled.h"
volatile int exit_code = 0;#define LED1(x)  PINS_DRV_WritePin(PTD,16,!x);
#define LED2(x)  PINS_DRV_WritePin(PTD,15,!x);
#define LED3(x)  PINS_DRV_WritePin(PTD,1,!x);
#define LED4(x)  PINS_DRV_WritePin(PTD,0,!x);int main(void)
{int MCU_Freq;CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);MCU_Freq = delay_init();//初始化delay函数PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr); //初始化IOI2C_MasterInit(&i2c1_instance, &i2c1_MasterConfig0);//初始化I2C外设,用于OLED通讯LPUART_DRV_Deinit(INST_LPUART1);LPUART_DRV_Init(INST_LPUART1, &lpuart1_State, &lpuart1_InitConfig0); //初始化串口u1_printf("当前进入APP程序 内存起始地址为0x0008000,MCU运行频率为 %d Mhz \r\n",MCU_Freq);while(1){delay_ms(100);PINS_DRV_TogglePins(PTD, 1 << 15);PINS_DRV_TogglePins(PTD, 1 << 16);}for(;;) {if(exit_code != 0) {break;}}return exit_code;
} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/

3.下载配置

下载文件配置,要保证两个程序不能交叉,互相擦除

S32K144之SDK版: bootloader 跳转APP测试相关推荐

  1. S32K144之SDK版:CAN模块应用

    一,添加CAN模块 二,配置GPIO 三,配置CAN模块参数 四,代码补全 #define EPS_Report_ID 0x18F #define EPS_ECU_ID 0x314 #define R ...

  2. S32K144之SDK版看门狗模块

    添加看门狗模块(使用抽象后的) 配置时钟 看门狗配置 保存生成配置代码 初始化看门狗和喂狗 WDG_Init(&wdg_pal1_Instance, &wdg_pal1_Config0 ...

  3. S32K144之SDK版:FLASH(内部模拟EEPROM)模块应用

    基础知识 资源大小 资源分类 添加配置模块 设置保护区 代码补全 头文件 源文件 初始化 void Flash_Init(void) {uint8_t ret = 0;ret = FLASH_SUCC ...

  4. app和bootloader跳转 MSP与PSP

    app和bootloader跳转 MSP与PSP 1.不要把跳转函数放在中断中,如此导致在跳转后的app或者bootloder都是在中断状态,只要你一开启该中断,就可能出现硬件中断了 2.如果你的AP ...

  5. android自动打开软件下载,自动跳过app下载-自动跳过 安卓版v3.4.5-PC6安卓网

    自动跳过app是款针对去广告的辅助应用,用户可以用自动跳过屏蔽掉视频或是影视上的广告,实用又便捷,快来下载自动跳过app吧! 软件介绍 自动跳过app是一款过这款软件,可以帮助用户快速的去除广告,包括 ...

  6. [Flutter]微信分享并从分享链接跳回APP指定页面

    最近在使用flutter开发APP,flutter实现了一套代码同时生成Android和iOS两个平台的APP,可以实现零基础快速上手APP开发,缩短开发周期.但flutter仍处于较快增长期,版本迭 ...

  7. VUE 项目落地页使用 LinkedME 深度链接服务跳回App

    VUE 项目落地页使用 LinkedME 深度链接服务跳回App 当前需求: 在微信或者浏览器中打开页面, 需要跳转回对应app: 当前实现技术: 使用 LinkedME 深度链接服务 实现流程: 1 ...

  8. 51内核单片机实现Bootloader跳转到用户程序,要求两个程序都要支持中断

    Flash空间规划 本文使用的单片机为笙科的A9129F6,Flash大小为64KB,SRAM大小为8KB. Flash空间规划如下. 起始地址 结束地址 用途 0x0000 0x3fff Bootl ...

  9. App测试流程及测试点(个人整理版)

    1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间.正式测试前先向 ...

最新文章

  1. Altium Designer原理图模板设计
  2. Quick cocos2dx-Lua(V3.3R1)学习笔记(十)-----搭建安卓打包环境,用官方示例anysdk生成apk运行...
  3. pycharm新建python file没有默认头_Pycharm 设置默认头的图文教程
  4. 关于.vbs文件恶搞,小伙伴电脑的
  5. 深入浅出linux驱动,Linux Kernel 字符驱动的深入浅出讲解
  6. Django 模板中使用 Ajax POST
  7. 【Merry Christmas】圣诞节,给博客添加浪漫的下雪效果!
  8. BZOJ4556 HEOI2016 字符串
  9. 双线服务器托管的三大优势
  10. Qos介绍及功能->分类标记->流量管理(令牌桶)->拥塞管理与拥塞避免
  11. 手机点餐系统概述_基于Android无线点餐系统的设计与实现
  12. [附源码]计算机毕业设计Node.js老薛男生服装网(程序+LW)
  13. win10弹出计算机内存不足,主编解答win10系统提示“计算机内存不足”的解决方案...
  14. kanzi案例Coin
  15. 从程序关闭Windows。
  16. 根据印刷行业的特点,整理出MES管理系统解决方案
  17. 对《爱、死亡和机器人》这篇文章的浅思
  18. App 运营 推广相关
  19. 【daisy-framework】MySQL 开发规范
  20. PrintUtils-打印工具类

热门文章

  1. tmd26353接近传感器之i2c驱动编写
  2. 【MySQL】- 05 sql 语句练习题
  3. assetManager.loadBundle总是报错
  4. 微信小程序去除console.log()
  5. 使用Python编写程序进行疫情健康报备
  6. 安卓自定义照相机(横竖屏感应)
  7. Jmeter 压测试集群配置和问题(win+linux)
  8. 为赢取市场,vivo手机性价比超过小米,性价比旗手易位
  9. 中国石油大学《催化原理》第一阶段在线作业
  10. Python日志模块logging,这一篇就够了