STM32转AT32代码转换
1. 引言
在嵌入式开发中,我们经常会遇到更换单片机芯片的事情,若芯片是同一厂家的还好说,若是不同厂家的则需要重新写,重新调,重新去学习其底层驱动程序,比较费时费力。如:ST32转AT32、ST32转GD32等等。本文主要介绍一款ST32转AT32的工具AT32 Smart Code Transfer.exe,可以快速实现芯片的更换,提高开发效率。
1.1.软件功能
本软件可查询与 STM32F10x BSP 标准库中各种名称相对应的 AT32F4xx BSP 标准库中的各种名称。包括 ST 与 AT 的 BSP 标准库中的宏定义、函数名称以及参数、结构体名称、结构体参数等内容。可将基于 STM32F10x BSP 标准库开发的应用程序转化为基于 AT32F4xx BSP 标准库开发的应用程序。
1.2.环境要求
软件要求
- 需要 Windows XP、Windows 7 及以上操作系统支持。
- 需要.net framework 4.0 的支持。对于部分未支持.net framework 4.0 的操作系统,需安装.net
framework4.0。
硬件要求
- PC/AT 兼容机,Pentium 或更高 CPU。
- XVGA(1024*768)颜色显示器。
- 至少 512M RAM。
- 至少 20M 磁盘空间
2. 功能介绍
在这个章节,将介绍工具的基本操作,主界面如下图所示:

请选择语言: 支持简体中文和 English。
请选择目标 MCU: 选择支持的 AT32 系列 MCU。 支持 AT32 MCU 如下:
- AT32F403 系列
- AT32F413 系列
- AT32F415 系列
- AT32F403A 系列
- AT32F407 系列
2.1.“查询”功能
查询功能提供“ST 名称”与“AT 名称”之间的互相查询。包括 ST 与 AT 的 BSP 标准库中的宏定义、函数名称以及参数、结构体名称、结构体参数等等内容。如图所示:

ST 名称:
即在 STM32F10x BSP 标准库中的名称。包括宏定义、函数名称以及参数、结构体名称、结构体参数等内容。提供输入时自动检索功能,用户可从检索列表中选择需要查询的内容,如图所示:

- : 预先输入 ST 的名称,查询 AT 的名称。
AT 名称:
即在 AT32F4xx BSP 标准库中的名称。包括宏定义、函数名称以及参数、结构体名称、结构体参数等内容。提供输入时自动检索功能,用户可从检索列表中选择需要查询的内容,如图所示:

- :预先输入 AT 的名称,查询 ST 的名称
2.2. “转换”功能
提供将基于 STM32F10x BSP 标准库开发的应用程序转化为基于 AT32F4xx BSP 标准库开发的应用程序,如图所示:
转换前文件目录:
即基于STM32F10x BSP标准库开发的应用程序工程所在目录。
转换后文件目录:
即转换后基于AT32F4xx BSP标准库开发的应用程序工程所在目录。
(此目录需新建一空目录,避免与目录下其他文件混淆)
- 开始转换:
点此按钮即开始转换过程。
- 取消:
取消转换过程。
2.2.1 转换过程
转换过程主要分为四个步骤:
- 文件拷贝
将“转换前文件目录”下的所有文件拷贝到“转换后文件目录”中。
- 将ST BSP标准库文件替换为AT32 BSP标准库文件。
在这个过程中,会将“转换后文件目录”下所有ST BSP标准库文件替换为AT32 BSP标准库文件。
例如将" stm32f10x_adc.h" 替换为 " at32f4xx_adc.h"
- 应用程序文件的解析
软件将会对“转换后文件目录”下所有文件的*.c、*.h文件进行解析(非标准库文件)。
- 应用程序文件的转换
即将基于 STM32F10x BSP 标准库开发的应用程序转化为基于 AT32F4xx BSP 标准库开发的应用程序。
2.2.2 信息提示
转换过程中,会将具体的转换信息进行提示,包括错误信息、转换成功信息等。如图所示:

转换提示的错误信息,需用户进行手动查找,并根据提示手动修改应用程序代码。
2.3.转换注意事项
1. 本软件涉及到对文件到拷贝、替换、修改,请用户确保具有对文件进行操作的权限。例如:确保具有管理员权限;确保能对文件读取、修改、写入;确保文件是为非只读文件。
2. 本软件解析和转换最大支持5 层数据结构嵌套。
3. 本软件解析和转换最大支持10个参数的函数。
4. 本软件解析和转换最大支持3维数组。
5. 不建议多个项目工程同时转化,有可能在解析时引用关系错误。
6. 对项目文件的转换不完全。整个转换流程完成后,可能需对项目文件进行手动的修改,才能正常执行编译等。
3.总结
该软件能够大大提高STM32和AT32之间代码转换的效率,但是在转换时需要注意内核是否相同,不能盲目转换,且不同代码可能在用户代码的部分有需要调整的内容,需要自己手动调整。转换完的工程需要在keil工程中重新选择目标芯片,并在keil配置中添加对应宏定义。
软件下载请关注掌芯元器官方博客下载。
相关文章:
STM32转AT32代码转换
1. 引言 在嵌入式开发中,我们经常会遇到更换单片机芯片的事情,若芯片是同一厂家的还好说,若是不同厂家的则需要重新写,重新调,重新去学习其底层驱动程序,比较费时费力。如:ST32转AT32、ST32转G…...
vue中怎么覆盖 sytle中的样式
好的,下面是一个具体的例子,展示如何在 Vue 组件中覆盖样式。 示例:覆盖组件样式 假设我们有一个组件 MyComponent.vue,其中包含一些样式: <template><div class"my-component"><h1>标…...
php中打印函数
在PHP中,打印函数主要用于输出或显示数据。常用的打印函数包括: 1.echo- 可以输出一个或多个字符串。 echo "Hello, World!"; echo "Hello", " ", "World!"; 2.print - 功能与echo相似,但print只能…...
[单master节点k8s部署]23.构建EFK日志收集平台(二)
部署elasticsearch集群 已经完成的工作:创建存储。首先配置了nfs存储提供商(nfs-deployment.yaml),然后通过创建存储类(storageclass.yaml)来将nfs服务器与存储类绑定: [rootmaster 31efk]# c…...
C#的属性(Property)应用说明(二)
Property的应用说明补充: 一.自定义逻辑: 可以在 get 和 set 访问器中包含自定义的逻辑。 public class Person {private string name;public string Name{get { return name; }set{if (string.IsNullOrWhiteSpace(value))throw new ArgumentException…...
VUE.js笔记
1.介绍vue Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任。 Vue 应用程序的基本…...
SpringBoot--yml配置文件的时间/大小的单位转换
原文网址:SpringBoot--yml配置文件的时间/大小的单位转换_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍SpringBoot的yml(properties)配置文件的时间/大小的单位转换。 概述 SpringBoot可以将yml中的配置绑定到一个Java类的字段&#x…...
【算法业务】互联网风控业务中的拒绝推断场景算法应用分享(涉及半监督算法、异常检测、变分自编码、样本权重自适应调整、迁移学习等)
1. 业务目标和任务描述 该项目是很早期的一个工作,属于互联网信贷风控场景,研究并应用信贷中的拒绝推断任务,处理方式也许对于目前的一些业务还有参考意义,因此这里做下分享。拒绝推断是指在信贷业务中,利用已知的接受…...
Windows PowerShell相关笔记
之前我写的一篇,把我的PS(power shell)该了配置文件 pyqt5vscode 配置坑笔记_vscode使用pyqt command failed-CSDN博客 文件里写的自动加载conda #region conda initialize # !! Contents within this block are managed by conda init !!…...
力扣9.24
2207. 字符串中最多数目的子序列 给你一个下标从 0 开始的字符串 text 和另一个下标从 0 开始且长度为 2 的字符串 pattern ,两者都只包含小写英文字母。 你可以在 text 中任意位置插入 一个 字符,这个插入的字符必须是 pattern[0] 或者 pattern[1] 。…...
NRF21540—低功耗蓝牙,蓝牙mesh、Thread和Zigbee和2.4 GHz私有协议范围扩展射频前端模块
nRF21540是一款射频前端模块(FEM),可用于改善短距离无线产品的传输范围和连接鲁棒性。作为一款辅助性设备,nRF21540是一种“即插即用型”的无线传输范围扩展器,可与nRF52和nRF53系列的高级多协议无线SoC搭配使用,所需的外部器件数…...
2024最新Linux Socket编程
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket&am…...
Linux下的驱动开发二
一、IO模型 I/O 模型在操作系统中用于处理应用程序与设备驱动之间的数据传输。I/O 通信模型的核心是解决程序与设备之间如何高效、合理地进行数据通信。不同的模型通过阻塞、非阻塞、同步、异步的方式来控制数据流和处理 I/O 请求。 注:在驱动开发中可以定义一个全…...
【JAVA报错已解决】 Java.lang.ArrayIndexOutOfBoundsException
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…...
2024 CSP 游记
J 组 初赛 早上也是五点钟就起来 打游戏 了。 考点在八达小学,除了感觉小、破、旧就没有其他感觉( 我妈也是成功的给我提前一小时到达考场。 拿到试卷后,瞄一眼,咋这么简单,和一本通的模拟卷难度一样?…...
双十一有什么推荐好物?,这些你不能错过的宝藏好物推荐
随着双十一的临近,这场盛大的购物狂欢蓄势待发!为了让大家不在琳琅满目的商品中徘徊,琪琪用心归纳了一份购物清单,分享那些我亲自使用过,觉得必须拥有的商品。 这些商品不仅价格公道,而且质量上乘…...
NSSCTF [HUBUCTF 2022 新生赛]simple_RE(变种base64编码)
文件无壳 拖入IDA中 shiftF12查看可疑字符串 发现两串字符串 一看这两个等于号就猜测是base64编码 进入主函数看看 这段代码是一个简单的 C 语言程序,主要功能是接受用户输入的字符串作为“flag”,然后通过对输入的字符串进行一些处理和比较来验证是否输…...
clickhouse使用extract提取分号之前,之后,中间的内容
Area:‘安徽;宣城;宣州’,要提取分号之前,两个分号之前,最后一个分号之后的内容作为省市区 这是最后得到的正确的结果,感谢chatgpt 刚开始本来想使用splitByString -- 宣城 select splitByString(;,安徽;宣城;宣州)[2…...
Unity3D Compute Shader同步详解
前言 在Unity3D中,Compute Shader是一种强大的工具,它利用GPU的并行处理能力来执行复杂的计算任务,从而减轻CPU的负担,提高游戏的性能和效率。然而,由于GPU的工作方式,对共享资源的访问需要特别注意同步问…...
3D模型在UI设计中应用越来越多,给UI带来了什么?
当前3D模型在UI设计中应用很多,极大地拓展了UI设计的发挥空间,也拓宽了UI的应用领域,本文分享下UI中引入3D模型到底能带来什么价值. 3D模型在UI设计中的应用可以给用户界面带来以下几个方面的好处: 更真实的视觉体验:…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架
文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...
STL 2迭代器
文章目录 1.迭代器2.输入迭代器3.输出迭代器1.插入迭代器 4.前向迭代器5.双向迭代器6.随机访问迭代器7.不同容器返回的迭代器类型1.输入 / 输出迭代器2.前向迭代器3.双向迭代器4.随机访问迭代器5.特殊迭代器适配器6.为什么 unordered_set 只提供前向迭代器? 1.迭代器…...
