【OTA】STM32新能源汽车OTA技术ymodem协议PC串口升级过程

【OTA】STM32新能源汽车OTA技术ymodem协议PC串口升级过程

文章目录

  • 前言
  • 一、实验工具
    • 1.串口USB线——烧录APP2生成的BIN文件
    • 2.STLINK——烧录BOOT代码和APP1代码
    • 3.烧录工具——将BIN文件烧录到单片机中
    • 4.FLYMCU——清除芯片FLASH
  • 二、硬件绘制
    • 1.原理图
    • 2.PCB
  • 三、软件配置
    • 1.BOOT代码
    • 2.APP1代码
    • 3.APP2代码
  • 四、实验结果
    • 1.烧录BOOT程序
    • 2.烧录APP1程序
    • 3.串口通过Ymodem协议bin烧录APP2程序
  • 五、参考文章
  • 总结


前言

【OTA】如何用STM32实现OTA升级?

在这里插入图片描述
请添加图片描述

提示:以下是本篇文章正文内容,下面案例可供参考

一、实验工具

1.串口USB线——烧录APP2生成的BIN文件

2.STLINK——烧录BOOT代码和APP1代码

3.烧录工具——将BIN文件烧录到单片机中

4.FLYMCU——清除芯片FLASH

在这里插入图片描述

二、硬件绘制

1.原理图

在这里插入图片描述

2.PCB

在这里插入图片描述
在这里插入图片描述

三、软件配置

1.BOOT代码

在这里插入图片描述
在这里插入图片描述

    //ͨ¹ýÅжÏÕ»¶¥µØÖ·ÖµÊÇ·ñÕýÈ·(ÊÇ·ñÔÚ0x2000 0000 - 0x2000 2000Ö®¼ä)À´ÅжÏÊÇ·ñÓ¦ÓóÌÐòÒѾ­ÏÂÔØÁË
    if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
    {
        BspTim2Close();
        __disable_irq() ; 
        //ÌøתÖÁÓû§´úÂë
        JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
        Jump_To_Application = (pFunction) JumpAddress;

        //³õʼ»¯Óû§³ÌÐòµÄ¶ÑÕ»Ö¸Õë
        __set_MSP(*(__IO uint32_t*) ApplicationAddress);
        Jump_To_Application();
				SerialPutString("OK\r\n\n");
    }
    else
    {
        SerialPutString("no user Program\r\n\n");
    }

2.APP1代码

在这里插入图片描述
在这里插入图片描述

 int main()
{
	SCB->VTOR = FLASH_BASE | 0x3000;
	__enable_irq();
	LED_Init();
	delay_init();
	OLED_Init();
	KEY_Init();
	uart2_Init(115200);
	while(1)
	{
		keynumber=KEY_Scan();		
		if(keynumber==1)	//B1°´ÏÂ
		{
			
		}
		if (keynumber==2)//ûÓа´ÏÂ
		{
			
		}
			LED1=1;			  // ÁÁ
			delay_ms(1000);
			LED1=0;			  // mie
			Menu_Display(Menu_Page,Level);
			u2_printf("{Waiting}$");	
			delay_ms(500);
	}
}

3.APP2代码

与其他步骤不同,这一步需要生成BIN文件,因此需注意!!不同芯片对应的编译器生成方式不同!
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

 int main()
{
	SCB->VTOR = FLASH_BASE | 0x3000;
	__enable_irq();
	LED_Init();
	delay_init();
	OLED_Init();
	KEY_Init();
	uart2_Init(115200);
	while(1)
	{
		keynumber=KEY_Scan();		
		if(keynumber==1)	//B1°´ÏÂ
		{
			
		}
		if (keynumber==2)//ûÓа´ÏÂ
		{
			
		}
			LED1=1;			  // ÁÁ
			delay_ms(200);
			LED1=0;			  // mie
			Menu_Display(Menu_Page,Level);
			u2_printf("{OTA_OK}$");	
	}
}

四、实验结果

1.烧录BOOT程序

上位机蓝牙串口2打印,此时程序里没有APP1也没有APP2,没有进行外部OTA升级动作
请添加图片描述

2.烧录APP1程序

此时LED灯闪烁,OLED显示字符串,上位机由原来的BOOT引导程序的打印,跳转到APP1的应用程序,打印的数据也变为了waiting,表示APP1已烧录成功
请添加图片描述
请添加图片描述

3.串口通过Ymodem协议bin烧录APP2程序

选择APP2生成的BIN文件

先点开始下载,再按下核心板上的复位按键!!

绿色进度条加载完成之后,会显示下载成功

此时,LED闪烁频率比之前更快,OLED显示OTA_OK,上位机串口打印OTA_OK,说明APP2的应用程序已经通过Ymodem协议bin烧录成功

实验结束
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
请添加图片描述

请添加图片描述

五、参考文章

STM32程序的常用的两种烧录方式
ARM 代码烧录方案与原理详解 — SWD/JTAG + Bootloader + OTA (ICP + ISP + IAP)

总结

本文仅仅简单介绍了【OTA】STM32新能源汽车OTA技术ymodem协议PC串口升级过程方面,评论区欢迎讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/541648.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

zookeeper和kafka消息队列

zookeeper zookeeper介绍 Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目 zookeeper特点 zookeeper是由一个领导者(leader),多个跟随者(follower)组成的集群 Zookeepe集群中只要有半数以上节点存活,Zookeeper集群…

express服务器 authorization 前端获取不到的问题

服务器生成token 设置在响应头,但是前端获取不到 const token JWT.generate({ id: new Date().getTime(), userName }, 10s) res.header(Authorization, token) axios.interceptors.response.use((response) > {console.log(response);if (response.data?.co…

关于Zookeeper+Kafka集群

文章目录 一、Zookeeper1、Zookeeper定义2、Zookeeper工作机制3、Zookeeper特点4、Zookeeper数据结构5、Zookeeper应用场景5.1 统一命名服务5.2 统一配置管理5.3 统一集群管理5.4 服务器动态上下线5.5 软负载均衡 6、Zookeeper 选举机制6.1 第一次启动选举机制6.2 非第一次启动…

ccframe系统的链路追踪,用户ID追踪的实现

需求 之前ccframe cloud V1用的是springcloud微服务,只需要在header将jwttoken一直传下去就没事,最近弄V2转dubbo发现用户id没有自动保存进数据库表。于是开始研究dubbo如何追踪,顺便把链路追踪ID的问题给一并解决掉。 理论 MDC MDC&…

Sonar下启动发生错误,elasticsearch启动错误

Download | SonarQube | Sonar (sonarsource.com) 1.首先我的sonar版本为 10.4.1 ,java版本为17 2.sonar启动需要数据库,我先安装了mysql, 但是目前sonar从7.9开始不支持mysql,且java版本要最少11,推荐使用java17 3.安装postsql,创建sonar数据库 4.启…

海洋信息管理系统:守护蓝色星球,促进海洋经济新发展

海洋,覆盖地球表面超过七成的广阔水域,是生命之源,也是经济发展的重要空间。然而,随着人类活动的增加,海洋生态环境面临严峻挑战,海洋资源的可持续利用成为全球关注的焦点。在这样的背景下,构建…

爱奇艺APP Android低端机性能优化

01 背景介绍 在智能手机市场上,高端机型经常备受瞩目,但低端机型亦占据了不可忽视的份额。众多厂商为满足低端市场的需求,不断推出低配系列手机。另外过去几年的中高端机型,随着系统硬件的快速迭代,现已经被归类为低端…

NPM 命令备忘单

NPM 简介 Node Package Manager (NPM) 是 Node.js 环境中不可或缺的命令行工具,充当包管理器来安装、更新和管理 Node.js 应用程序的库、包和模块。对于每个 Node.js 开发人员来说,无论他们的经验水平如何,它都是一个关键工具。 NPM 的主要…

校园视频监控系统的设计与实现(论文+源码)_kaic

摘 要 本毕业设计的内容是设计并且实现一个基于java技术的校园视频监控系统。它是在Windows下,以MYSQL为数据库开发平台,java技术和Tomcat网络信息服务作为应用服务器。校园视频监控系统的功能已基本实现,主要实现个人中心,用户…

AI跟踪报道第37期-新加坡内哥谈技术-本周AI新闻: 人工智能竞赛:科技巨头的疯狂角逐!

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

String类中常见面试题

1.string类属于基本类型吗? string类不是基本类型;它属于引用数据类型 2.操作字符串的类有哪些?有什么区别? 有三种:string,stringBuilder,stringBuffer 区别: String:不可变类,字符串一旦被创建就不能…

OpenCV轻松入门(六)——简单图片处理【马赛克、毛玻璃、浮雕效果】

马赛克效果 马赛克指现行广为使用的一种图像(视频)处理手段,此手段将影像特定区域的色阶细节劣化并造成色块打乱的效果,因为这种模糊看上去有一个个的小格子组成,便形象的称这种画面为马赛克。其目的通常是使之无法辨…

linux 部署安装mongodb教程

现在去官网下载mongodb的tar包,在本地创建文件夹 cd /home wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.17.tgz tar -zxvf mongodb-linux-x86_64-rhel70-4.2.17.tgz mv mongodb-linux-x86_64-rhel70-4.2.17 mongodb cd /home/mongodb mkdir log t…

window10轻松使用k8s

Docker Desktop安装篇 1、win10安装 1、下载安装包 https://www.docker.com/products/docker-desktop/ 官网下载安装包 2、配置win10支持虚拟化 不勾选Hyper-V,容易出错 3、安装WSL配置window支持linux Windows Subsystem for Linux (WSL) 安装 Linux 子系统&am…

腐蚀Rust 服务端搭建架设个人社区服务器Windows教程

腐蚀Rust 服务端搭建架设个人社区服务器Windows教程 大家好我是艾西,一个做服务器租用的网络架构师也是游戏热爱者。最近在steam发现rust腐蚀自建的服务器以及玩家还是非常多的,那么作为服务器供应商对这商机肯定是不会放过的哈哈哈! 艾西这…

嵌入式实时操作系统的调度机制与优化

大家好,今天给大家介绍嵌入式实时操作系统的调度机制与优化,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。 嵌入式实时操作系统的调度机制与优化 一、引言 嵌入式实…

DonkeyDocker-v1-0渗透思路

MY_BLOG https://xyaxxya.github.io/2024/04/13/DonkeyDocker-v1-0%E6%B8%97%E9%80%8F%E6%80%9D%E8%B7%AF/ date: 2024-04-13 19:15:10 tags: 内网渗透Dockerfile categories: 内网渗透vulnhub 靶机下载地址 https://www.vulnhub.com/entry/donkeydocker-1,189/ 靶机IP&a…

[Java、Android面试]_18_详解Handler机制 常见handler面试题(非常重要,非常高频!!)

本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。 整理成了面试系列,由于时间有限,每天整理一点,后续会陆续分享出来,感兴趣的朋友可关注收…

Java基础-知识点04(面试|学习)

Java基础-知识点04 Object类wait和notify需要在什么地方使用?说明 toString() 方法的作用和重写时的注意事项。toString() 方法在实际开发中的应用场景和作用。 continue、break 和 return 的区别1、continue:2、break:3、return:…

plsql developer 一键格式化sql/美化sql

PL/SQL 格式化工具 以 Oracle SQL Developer 为例,使用一键格式化的步骤如下: 打开 Oracle SQL Developer。在“文件”菜单中,选择“打开文件”,然后选择你的 PL/SQL 文件。打开文件后,你可以通过右键菜单选择“格式…