打印
[APM32F1]

国产APM32F103ZET6替换分享

[复制链接]
1504|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kkzz|  楼主 | 2022-11-15 21:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 kkzz 于 2022-11-15 21:10 编辑

使用APM32F103ZET6替换STM32F103ZET6的一些分享,参考了网上各路大神的资料后作的总结。


1从手册中分析资源,基础信息一模一样


1.1引脚定义
由下图可以看出相同封装的引脚分布完全一致。


1.2结构框图
(1)都是M3内核,总体与STM32F103ZET6架构一致
外设上做了部分增加,APM32F103相较于STM32F103增加了I2C3和I2C4模块,还增加了动态存储控制器DMC,可外接SDRAM

(2)多了EMMC
APM32F103有一个特别的功能,它有EMMC(外部存储器控制器),因此可以外接SDRAM,这使它可以存储大量临时数据,提升读取速度。如果不想外接也有SDRAM,APM32F103也有合封型号——APM32F103VCTxS。

(3)多了个FPU
如果在处理一些浮点数据的数**算时,比如sin运算,使用FPU可以加快运算速度;STM32F103ZET6是没有的,因此在替换过程中,如果使用FPU,且使用了APM32F103ZET6官方提供的浮点运算库,注意算法中数据处理的效率是有很大提升的。

但是APM32F103ZET6的FPU有些不好的地方是,只对库中的数**算有明显(提升至少5倍)加速效果,其它的运算无明显加速效果。

(4)多了个USB
STM32F103ZET6的CAN和USB共用一段SRAM,因此使用USB时可以使用CAN。


1.3存储地址映射
经过对比下面两图可以得出,基本外设地址都是一致的,对于多出的功能都占用了ST原来的保留地址,这说明APM32F103是可以完全兼容STM32F103的。


1.4时钟
在某些应用场景需要超频使用(官方是不保证的),当系统时钟为96MHz、120MHz下,STM32F103ZET6的USB无法配置到48MHz,因此无法使用USB。但是APM32F103ZET6通过配置分频系数,当系统时钟为96MHz、120MHz时,依然可以使用USB.
1.5最小系统电路
电源、时钟、复位、烧录接口、Boot电路一致。
2用STM32F103xE的Keil工程、代码烧录到APM32F103xE中,实现基本烧录功能
在调试过程中使用的板子是APM32F103ZET6的mini板,使用的Keil工程是野火的例程。
2.1编译工具
与ST完全相同,都可以使用keil和IAR。
2.2烧录器
兼容ST,可以使用ST-LINK,还可以使用J-LINK和APEX-LINK。
2.3烧录接口
支持JTAG和SWD。
2.4编译下载
随便找一个野火的STM32F103的代码例程,验证一下不修改任何配置和ST的代码是否可以直接烧录使用

打开工程后点击魔术棒,板子还是选择STM32F103VE

接下来选择自己使用的烧录器,这里用的是J-LINK
[img=640,477][/img]" data-caption="" data-size="normal" data-rawwidth="640" data-rawheight="477" class="origin_image zh-lightbox-thumb lazy" width="640" data-original="https://pic4.zhimg.com/v2-e946f964dc02a378a184b174cf4de443_r.jpg" data-actualsrc="https://pic4.zhimg.com/v2-e946f964dc02a378a184b174cf4de443_b.jpg" style="display: block; margin-right: auto; margin-left: auto; max-width: 100%; height: auto; cursor: zoom-in;">

进入setting,设置flashdownload,还是添加对应型号的ST芯片
[img=735,654][/img]" data-caption="" data-size="normal" data-rawwidth="735" data-rawheight="654" class="origin_image zh-lightbox-thumb lazy" width="735" data-original="https://pic2.zhimg.com/v2-93932311f64d21fe2abe3337543dcbdd_r.jpg" data-actualsrc="https://pic2.zhimg.com/v2-93932311f64d21fe2abe3337543dcbdd_b.jpg" style="display: block; margin-right: auto; margin-left: auto; max-width: 100%; height: auto; cursor: zoom-in;">

以上就配置结束了,然后再将例程里LED的引脚PB0和PB1修改成APM32103的LED引脚PE6和PE5


全部修改完成了,编译下载后,两个LED交替闪烁,说明验证成功,不用修改其他配置,选择好烧录器,直接烧录ST代码是可以使用的。
2.5脱机编程器
市场上买的量产烧录器品牌(可以百度、淘宝搜索),有些烧录器添加了AMP32F103ZET6的型号,有些没有。

2.6JTAG ID不同
具体差异如下:

(1)APM32F103ZET6的信息如下:

(2)STM32F103ZET6的信息如下:

如果代码中有使用JTAG ID作为判断信息的话,在替换过程中会出问题。
3参数与电气特性的差异
在使用过程中,我们发现APM32F103ZE和STM32F103ZE的参数和电气特性不一样,在这种情况下,我们可能会遇到一些问题,以下通过手册对比总结了一些模块的差异。
3.1时钟
3.1.1温度、电压的环境引起HSI的精度差异
APM32的主频标称为96MHz,STM32的主频标称为72MHz;在高低温情况下,HSI作为时钟源时,APM32的时钟精度在(-2.8~2.4)%,但STM32的时钟精度在(-2.0~2.5)%,比APM32略高。

如果使用HSI作为系统时钟,且对精度要求较高、使用场景是;如果使用场景是3.3V的工作电压,且温度为25℃时,出厂精度都是±1%。
3.1.2HSE起振时间差异引起系统时钟配置存在差异
在使用晶振作为HSE的时钟源时,APM32F103和STM32F103的起振温度时间存在差异,STM32F103起振稳定时间比APM32F103的快。

代码中判断是否起振稳定的方式是使用软件延时等待,设置的HSE_STARTUP_TIMEOUT数值是0x500,参考代码如下:


当晶振离开MCU的晶振连接引脚较远,或者匹配电容不合理,或者使用贴片晶振而不是直插晶振时,HSE_STARTUP_TIMEOUT的等待稳定时间不足以使晶振起振,会出现无法起振的情况,导致系统时钟为HSI的8MHz。

另外一方面,代码运行的速率差异,也会影响软件延时等待的实际时间。

解决方法是调大HSE_STARTUP_TIMEOUT,例如设置HSE_STARTUP_TIMEOUT为0x5000
3.2FLASH
3.2.1APM32F103xE的页擦时间、片擦时间、写时间比STM32F103xE的快
通过对比两种芯片的数据手册,我发现两者的Flash的性能参数有点区别:
(1)APM32的页擦除时间是2.7~3.5ms,STM32是20~40ms,比STM32快约7倍。
(2)APM32的16bit编程时间是33.7~40.5us,STM32是40~70us,比STM32快约20%。

如果运行的代码中存在软件延时等待擦写时间,注意调整代码。
3.2.2Flash等待周期的配置差异
手册中系统频率与访问Flash等待时间关系如下(见用户手册):
(1)STM32F103ZET6的手册


(2)APM32F103ZET6的手册

然而两家的Flash访问速度也不同,有时候不会安严格的按照手册配置,例如在自己编写代码配置系统时钟为48MHz时、Flash预取使能、等待周期设置为0时,就发现STM32F103ZET6可以正常工作,APM32F103ZET6就不能正常工作。

因此,在配置该参数时,建议还是严格按照官网提供的参数配置。
3.2.3Flash擦写过程中关闭中断
APM32F103ZET6在执行擦写Flash时,最好先关闭中断,否则可能擦写Flash失败(个人没有遇到过这个问题),而STM32F103ZET6则不需要,
3.3功耗
APM32F103较STM32F103相比,运行、睡眠、停机功耗较小,待机功耗较大,但都是在10uA以下,电池功耗基本一致。

如果是电池供电、且运行模式占用的运行时间较多,使用APM32F103ZET6的工作时间是比STM32F103ZET6的工作时间长。如果产时间在低功耗模式运行,工作时长则反之。
3.4GPIO
3.4.1GPIO配置为浮空输入的抗干扰能力
众所周知,在使用GPIO时,应配置相应的GPIO工作模式(见用户手册)。
但是在用作EXTI或是USART_Rx时,GPIO被配置为浮空输入模式后,发现无法读取稳定电平,这是怎么一回事呢?

原来,APM32F103的GPIO在用作浮空输入或复用推挽输出时,容易受到外界影响,导致读取或输出异常,此时有两个解决方案:
①换一种工作模式,通过软件修改成上拉输入或推挽输出;
②电压容易受到干扰,那就外接一个上拉电阻,让电平变稳定。
3.5USBD与CAN共用
这是一个很惊喜的发现——APM32F103可以同时使用USBD和CAN!但是如果要实现这个目的,需要把CAN重新映射到复用引脚,此时是USBD2与CAN共用。
是的没错,APM32F103有两个USBD,但是由于两个USBD公用引脚、地址、寄存器、时钟,所以相当于只有一个USBD,只有在需要同时使用USBD和CAN时,才启用USBD2。

这里有两个使用的注意点:
①在USBD2的基地址偏移0x1000处写0x0000 0001
②PA11和PA12引脚给USBD2使用,CAN使用其他引脚

使用特权

评论回复
沙发
两只袜子| | 2022-12-1 15:05 | 只看该作者
感觉很多国产芯片都可以代替某t啊

使用特权

评论回复
板凳
chenjun89| | 2022-12-3 17:58 | 只看该作者
说实话,国产MCU很多都是防ST。

使用特权

评论回复
地板
wengh2016| | 2022-12-4 20:41 | 只看该作者
可以单片机可以超频使用的吗?              

使用特权

评论回复
5
minzisc| | 2022-12-4 21:22 | 只看该作者
硬件是完全兼容的吗?              

使用特权

评论回复
6
backlugin| | 2022-12-4 21:42 | 只看该作者
代码是不是也可以通用呢?              

使用特权

评论回复
7
robertesth| | 2022-12-4 22:22 | 只看该作者
这个芯片都是完全一样的。
              

使用特权

评论回复
8
lihuami| | 2022-12-5 20:37 | 只看该作者
这个FPU是怎么调用的?              

使用特权

评论回复
9
jkl21| | 2022-12-5 22:17 | 只看该作者
APM32F103ZET6需要修改时钟才能替代stm32吗?

使用特权

评论回复
10
zerorobert| | 2022-12-6 13:57 | 只看该作者
APM32F103ZET6好像主频比st的高很多。

使用特权

评论回复
11
tifmill| | 2022-12-6 14:58 | 只看该作者
这个也有fsmc总线接口的吗?              

使用特权

评论回复
12
cr315| | 2022-12-9 10:23 | 只看该作者
国产很多芯片防ST说的是大实话,所以能替代一点不都奇怪

使用特权

评论回复
13
Undshing| | 2023-1-3 15:37 | 只看该作者
代码通用吗?

使用特权

评论回复
14
迪圣-欧丽良| | 2023-2-1 11:08 | 只看该作者
minzisc 发表于 2022-12-4 21:22
硬件是完全兼容的吗?

软硬件兼容  需要资料加我 V 15813376719 极海代理

使用特权

评论回复
15
迪圣-欧丽良| | 2023-2-1 11:09 | 只看该作者

通用    ,需要资料加我 V 15813376719

使用特权

评论回复
16
backlugin| | 2023-2-4 18:32 | 只看该作者
完美替换F103. 替换的时候需要按照型号替换。

使用特权

评论回复
17
mickit| | 2023-2-4 23:42 | 只看该作者
STM32F051C8T6有什么芯片可代换的吗 ?

使用特权

评论回复
18
cashrwood| | 2023-2-8 13:09 | 只看该作者
这个代码是否兼容的吗?              

使用特权

评论回复
19
lzmm| | 2023-2-8 16:19 | 只看该作者
STM32F103C8T6有国产可替换的吗?质量要过关。

使用特权

评论回复
20
nomomy| | 2023-2-8 16:59 | 只看该作者
用之前项目的代码,不改一行代码,硬件也不用改

使用特权

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

本版积分规则

315

主题

10665

帖子

13

粉丝