烧录算法制作

news/2024/11/14 23:04:25/文章来源:https://www.cnblogs.com/tangwc/p/18329161

前言

在使用Keil的时候,我们一般会通过一个下载器与目标芯片连接,这样就可以实现的代码下载或调试。那么下载器是如何将我们的应用程序烧写在我们芯片内部Flash当中的呢,是否可以同样的方式烧录在外部Flash上呢?这是此片文章所要说明的。

MDK下载算法原理

通过MDK创建一批与地址信息无关的函数,实现的功能主要有初始化,擦除,编程,读取,校验等,然后MDK调试下载阶段,会将算法文件加载到芯片的内部RAM里面(加载地址可以通过MDK设置),然后MDK通过与这个算法文件的交互,实现程序下载,调试阶段数据读取等操作。

主要流程图如下:

  • 加载算法到芯片RAM。
  • 执行初始化函数Init。
  • 执行擦除操作,根据用户的MDK配置,这里可以选择整个芯片擦除或者扇区擦除。
  • 执行Uinit函数。
  • 操作完毕。

制作烧录算法(FLM文件)步骤

  1. 将ARM:CMSIS Pack文件夹(通常是C:\Keil\ARM\Pack\ARM\CMSIS\ version \Device_Template_Flash)中的工程复制到一个新文件夹中,取消文件夹的只读属性,重命名项目文件NewDevice.uvprojx以表示新的flash 设备名称,例如MyDevice.uvprojx。
  2. 打开工程,从工具栏中,使用下拉选择目标来选择处理器架构。
  3. 打开对话框Project - Options for Target - Output并更改Name of Executable字段的内容以表示设备,例如MyDevice。
  4. 调整文件FlashPrg中的编程算法。
  5. 调整文件FlashDev中的设备参数。
  6. 使用Project - Build Target生成新的 Flash 编程算法。

注意此方法制作的烧录算法是无法回读FLASH的数据的,若想实现相关功能,可以使用Segger官方的烧录算法的工程,IDE使用的是SEGGER的Embedded Studio。

应用案例介绍

首先将工程copy出来,并将工程重新命名整理好,如图所示:

1721961956259.png

首先可以先测试一下能否正常,读取,写入,擦写FLASH。这些验证完成后,首先现在FlashDev.c上,设置修改好相关参数:

1721962953831.png

下一步,将相关接口函数实现分别为Init、EraseChip、EraseSector、ProgramPage、Verify

1721963680079.png

1721963690639.png

1721963701056.png

1721963715856.png

1721963727905.png

编译完成后将生成的.axf文件改成.flm的文件,至此烧录算法制作完成。

最后只需要在Jflash/keil测试一下能否正常烧录程序即可。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mocreak Office Installer(Office安装部署工具) v2.3.0.703 中文绿色版

概述 Mocreak 是一款一键自动化下载、安装、部署正版 Office 的办公增强工具。该工具完全免费、无广告、绿色、无毒、简约、高效、安全。软件特点 一键快速下载、安装、部署最新版 Microsoft Office 软件。提供简约、高效,且可自定义的图形界面,提升部署效率。支持将 Office …

LLM大模型:deepspeed实战和原理解析

多年前搞大数据,因为单节点无力存储和计算PB级别的数据,所以hadoop这种分布式存储和计算框架是标配!如今搞大模型,仍然需要对大量样本数据做计算,因为涉及矩阵运算,单机单卡运算效率太低,也涉及到分布式计算了,大模型时代的分布式pre-train和Inference框架就有现成的—…

Iterator与Iterable(迭代器与可迭代)

一 前言 环境: python 3.10 win10 二 Iterator(迭代器) Iterator 是python的内置类型之一,看下其定义该类型的实例对象称之为iterator(迭代器对象) 要得到一个iterator(迭代器对象),可用内置函数iter()将 list tuple等转成迭代器对象 也可以自定义一个迭代器类型的class,…

java基础 手写回忆篇

java 特性:分布行,跨平台性,安全行,多线程,面向对象编程,简单性 高级语言分为编译型和解释型: 编译型:整个程序写完一起编译速度快效率高 解释性:需要一句解释一句编译速度慢效率低 java是两者综合:编译器(javac)先把你写好的代码编译成class文件(字节码文件)再用j…

洛谷 Markdown - 从入门到精通

洛谷 Markdown - 从入门到精通 编写——Jerrycyx(CSDN,洛谷) 洛谷博客查看因为洛谷博客的渲染机制和其它地方不一样,可能导致渲染错误,所以你可以到这里食用:https://www.luogu.com.cn/paste/wu019n2x绪论希望更丰富的展现?使用 Markdown。这是洛谷文字编辑时会出现的一行…

Dev-C++ 的功能与外观优化

预备 安装 安装 Dev-C++ 5.11:官方下载:https://sourceforge.net/projects/orwelldevcpp/(若下载缓慢可选择 Problem Downloading->Auto-select) 蓝奏云下载:https://wwu.lanzouq.com/iTwwW07r28ni运行安装包即可。 更改语言 如果界面语言为英文,选择 Tools -> Env…

OI 中各种输入方式的速度比较(C++,大量实测数据,附图表)

测试信息 本次共测试了以下几种输入方式的速度:scanf cin 快读 位运算快读 fread() + 位运算快读 关闭同步流的 cin 开启 tie 绑定并关闭同步流的 cin每组测试各输入方式均使用相同数据,为随机生成的 \(1000000\)(1E6) 个整数,范围在 \([-(2^{31}-1),2^{31}-1]\)(即 int …

乒乓球比赛计分系统需求流程——最小可用产品

计应222_杜晓瑾_2210502012 乒乓球比赛计分系统需求流程——最小可用产品 作为一名裁判,我希望可以在系统上进行网络计时、记成绩,以便大家可以监督和观看任务 Sprint 1 2 3 4 5 6 7 8 9 10 开通网络计时(1h) 1 0 网络计时(4h) 4 2 1 0 进行网络记成绩(3h…

Easysearch、Elasticsearch、Amazon OpenSearch 快照兼容对比

在当今的数据驱动时代,搜索引擎的快照功能在数据保护和灾难恢复中至关重要。本文将对 Easysearch、Elasticsearch 和 Amazon OpenSearch 的快照兼容性进行比较,分析它们在快照创建、恢复、存储格式和跨平台兼容性等方面的特点,帮助大家更好地理解这些搜索引擎的差异,从而选…

管理项目更高效:顶级进度管理系统大比拼

国内外主流的10款项目进度管理网站对比:PingCode、Worktile、滴答清单(TickTick)、Todoist、NarTick、Teambition、Monday.com、Asana、ClickUp、Trello。在选择合适的项目进度管理工具时,许多项目经理面临着如何找到既能满足团队需求又易于操作的系统的难题。市场上众多的…

05 详细的中断讲解

目录前言一、什么是中断二、如何使用中断1.stm32中断结构1.1 AFIO中断引脚选择1.2 EXTI边缘检测1.3 NVIC优先级配置2.配置stm32的中断1.打开时钟2.配置GPIO口3.配置AFIO控制4.配置EXTI功能5.配置NVIC6.配置完整代码3.书写中断服务函数总结 前言 又鸽了几天的文章,最近在做一个…

VS2022创建C C++ GTEST工程

原因 需要对带代码进行单元测试,选择在Visual studio 中使用GTEST 框架。 实施 创建一个常规的控制台可执行程序。然后使用NUGET安装包 安装GTEST 头文件和动态库,同时安装GTEST ADAPTER。安装可能提示找不到包源,此时需要根据提示配置一下,注意通配符很关键,不要问为甚吗…