国产APM32F103ZET6替换STM32F103ZET6经验分享

随着大变局时代的开启,美国对中国科技的打压,对中国芯片的锁脖,st芯片价格的一再高涨,直接推动了国产芯片的发展。国内很多厂家也开始推出高性能、低价格的对标st产品。由于价格问题,我也不得不考虑更换芯片,看了一些测评,有人推荐这一款apm32的单片机,价格比st同型号的便宜,果断下单,以下是我使用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
进入setting,设置flash download,还是添加对应型号的st芯片
以上就配置结束了,然后再将例程里led的引脚pb0和pb1修改成apm32103的led引脚pe6和pe5
全部修改完成了,编译下载后,两个led交替闪烁,说明验证成功,不用修改其他配置,选择好烧录器,直接烧录st代码是可以使用的。
2.5 脱机编程器
市场上买的量产烧录器品牌(可以百度、淘宝搜索)有:周立功、希尔特、轩微、芯园、野火等,有些烧录器添加了amp32f103zet6的型号,有些没有。
本人只有芯园的烧录器,选择stm32f103zet6的型号是可以烧录apm32f103zet6。
至于其它的烧录器能否选择stm32f103zet6的型号烧录apm32f103zet6呢,由于没有烧录器,因此暂时无结论,后续有机会使用时再补充。
不过amp32f103zet6有官方的脱机编程器。
2.6 jtag 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.2 hse起振时间差异引起系统时钟配置存在差异
在使用晶振作为hse的时钟源时,apm32f103和stm32f103的起振温度时间存在差异,stm32f103起振稳定时间比apm32f103的快。
代码中判断是否起振稳定的方式是使用软件延时等待,设置的hse_startup_timeout数值是0x500,参考代码如下:
当晶振离开mcu的晶振连接引脚较远,或者匹配电容不合理,或者使用贴片晶振而不是直插晶振时,hse_startup_timeout的等待稳定时间不足以使晶振起振,会出现无法起振的情况,导致系统时钟为hsi的8mhz。
另外一方面,代码运行的速率差异,也会影响软件延时等待的实际时间。
解决方法是调大hse_startup_timeout,例如设置hse_startup_timeout为0x5000
3.2 flash
3.2.1 apm32f103xe的页擦时间、片擦时间、写时间比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.2 flash等待周期的配置差异
手册中系统频率与访问flash等待时间关系如下(见用户手册):
(1)stm32f103zet6的手册
(2)apm32f103zet6的手册
然而两家的flash访问速度也不同,有时候不会安严格的按照手册配置,例如在自己编写代码配置系统时钟为48mhz时、flash预取使能、等待周期设置为0时,就发现stm32f103zet6可以正常工作,apm32f103zet6就不能正常工作。
因此,在配置该参数时,建议还是严格按照官网提供的参数配置。
ps:我看了极海官网上的faq,发现有些人因为等待周期不够而出现很多错误,所以大家一定要尽量按照手册上的选择等待周期的个数!不确定够不够的,可以先设置多一个,毕竟“多多益善”嘛~
3.2.3 flash擦写过程中关闭中断
在网上看到,apm32f103zet6在执行擦写flash时,最好先关闭中断,否则可能擦写flash失败(个人没有遇到过这个问题),而stm32f103zet6则不需要,
3.3 功耗
apm32f103较stm32f103相比,运行、睡眠、停机功耗较小,待机功耗较大,但都是在10ua以下,电池功耗基本一致。
如果是电池供电、且运行模式占用的运行时间较多,使用apm32f103zet6的工作时间是比stm32f103zet6的工作时间长。如果产时间在低功耗模式运行,工作时长则反之。
3.4 gpio
3.4.1 gpio配置为浮空输入的抗干扰能力
众所周知,在使用gpio时,应配置相应的gpio工作模式(见用户手册)。
但是在用作exti或是usart_rx时,gpio被配置为浮空输入模式后,发现无法读取稳定电平,这是怎么一回事呢?
原来,apm32f103的gpio在用作浮空输入或复用推挽输出时,容易受到外界影响,导致读取或输出异常,此时有两个解决方案:
①换一种工作模式,通过软件修改成上拉输入或推挽输出;
②电压容易受到干扰,那就外接一个上拉电阻,让电平变稳定。
3.5 usbd与can共用
这是一个很惊喜的发现——apm32f103可以同时使用usbd和can!但是如果要实现这个目的,需要把can重新映射到复用引脚,此时是usbd2与can共用。
是的没错,apm32f103有两个usbd,但是由于两个usbd公用引脚、地址、寄存器、时钟,所以相当于只有一个usbd,只有在需要同时使用usbd和can时,才启用usbd2。
这里有两个使用的注意点:
① 在usbd2的基地址偏移0x1000处写0x0000 0001
② pa11和pa12引脚给usbd2使用,can使用其他引脚
3.6 运行代码的速度有差异
相信有不少人都会用for或while循环做延时,但是在实际运用时,发现软件延时在时间的精度上会有误差。
由此可见,apm和stm的芯片在代码的执行速度上有差异,大家千万别把用在stm的延时循环直接套在apm上!可能会因为启动时间不够长而导致系统时钟频率不对(别问我怎么知道的,血的教训[狗头])。
当然,用定时器或者直接用时钟周期做精准定时的话,那就no problem了~
3.7 boot0引脚接地问题
正常情况下,从主存储区(用户flash,地址为0x0800 0000)启动,boot0是必现接gnd的。但是在查阅网上资料时,发现stm32f103zet6的boot0不接gnd也能稳定从主存储区启动,apm32f103zet6无法稳定从主存储区启动,有时候可以、有时候不能。
在实际应用中,如果是从主存储区启动,还是安安心心的按照官方的推荐将gnd通过10kω电阻下拉到gnd。
4 总结
以上是在mini板上编写了简单的测试代码,且在网上搜集、整理了资料进行分析,stm32f103zet6有的功能、apm32f103zet6也有,而且apm32f103zet6额外比stm32f103zet6多了些功能。
初步判断在不需要修改硬件、少量修改软件(看具体使用了哪些模块、哪些应用场景)的情况下,可以使用apm32f103zet6是可以替换stm32f103zet6,另外,apm32f103zet6在价格、供货上也有优势,国产真的太香了,兄弟们还犹豫什么快下手。

可控硅元件
地铁站台内基于固体雷达的多种安全解决方案
益登科技助力Enovix拓展全球消费电子市场
小米盒子主流产品对比告诉你行业潜规则
FPGA内部详细架构
国产APM32F103ZET6替换STM32F103ZET6经验分享
电流探头的电路分析
激光器中单一横向模式的实现
Stratasys与上海康德莱医疗机构已签订战略合作
智能水表的使用注意事项
联芯通与 Vector 结盟,合作开发电动汽车市场
VOCs在线监测报警装置对蓝天保卫战的作用
小米已申请全面屏技术有一百多项专利
差分滤波器布局需要考虑的那些事儿
哪里买充电宝便宜?货真价实的充电宝推荐
魅族路由器极速版评测怎么样 外观简约功能实用
监视器屏幕有出现色斑或者色晕的原因及解决方法
FPGA的三种配置方式详解
体感试衣镜将一键带你开启神奇试衣的非凡体验
煤泥烘干脱水设备集中监控运维系统解决方案