隨著大變局時(shí)代的開啟,美國對中國科技的打壓,對中國芯片的鎖脖,ST芯片價(jià)格的一再高漲,直接推動了國產(chǎn)芯片的發(fā)展。國內(nèi)很多廠家也開始推出高性能、低價(jià)格的對標(biāo)ST產(chǎn)品。由于價(jià)格問題,我也不得不考慮更換芯片,看了一些測評,有人推薦這一款A(yù)PM32的單片機(jī),價(jià)格比ST同型號的便宜,果斷下單,以下是我使用APM32F103ZET6替換STM32F103ZET6的一些分享,參考了網(wǎng)上各路大神的資料后作的總結(jié)。
1從手冊中分析資源,基礎(chǔ)信息一模一樣
1.1引腳定義
由下圖可以看出相同封裝的引腳分布完全一致。
1.2結(jié)構(gòu)框圖
(1)都是M3內(nèi)核,總體與STM32F103ZET6架構(gòu)一致
外設(shè)上做了部分增加,APM32F103相較于STM32F103增加了I2C3和I2C4模塊,還增加了動態(tài)存儲控制器DMC,可外接SDRAM。
(2)多了EMMC
APM32F103有一個(gè)特別的功能,它有EMMC(外部存儲器控制器),因此可以外接SDRAM,這使它可以存儲大量臨時(shí)數(shù)據(jù),提升讀取速度。如果不想外接也有SDRAM,APM32F103也有合封型號——APM32F103VCTxS。
(3)多了個(gè)FPU
如果在處理一些浮點(diǎn)數(shù)據(jù)的數(shù)學(xué)運(yùn)算時(shí),比如sin運(yùn)算,使用FPU可以加快運(yùn)算速度;STM32F103ZET6是沒有的,因此在替換過程中,如果使用FPU,且使用了APM32F103ZET6官方提供的浮點(diǎn)運(yùn)算庫,注意算法中數(shù)據(jù)處理的效率是有很大提升的。
但是APM32F103ZET6的FPU有些不好的地方是,只對庫中的數(shù)學(xué)運(yùn)算有明顯(提升至少5倍)加速效果,其它的運(yùn)算無明顯加速效果。
(4)多了個(gè)USB
STM32F103ZET6的CAN和USB共用一段SRAM,因此使用USB時(shí)可以使用CAN。
1.3存儲地址映射
經(jīng)過對比下面兩圖可以得出,基本外設(shè)地址都是一致的,對于多出的功能都占用了ST原來的保留地址,這說明APM32F103是可以完全兼容STM32F103的。
1.4時(shí)鐘樹
在某些應(yīng)用場景需要超頻使用(官方是不保證的),當(dāng)系統(tǒng)時(shí)鐘為96MHz、120MHz下,STM32F103ZET6的USB無法配置到48MHz,因此無法使用USB。但是APM32F103ZET6通過配置分頻系數(shù),當(dāng)系統(tǒng)時(shí)鐘為96MHz、120MHz時(shí),依然可以使用USB.
1.5最小系統(tǒng)電路
電源、時(shí)鐘、復(fù)位、燒錄接口、Boot電路一致。
2用STM32F103xE的Keil工程、代碼燒錄到APM32F103xE中,實(shí)現(xiàn)基本燒錄功能
在調(diào)試過程中使用的板子是APM32F103ZET6的mini板,使用的Keil工程是野火的例程。
2.1編譯工具
與ST完全相同,都可以使用keil和IAR。
2.2燒錄器
兼容ST,可以使用ST-LINK,還可以使用J-LINK和APEX-LINK。
2.3燒錄接口
支持JTAG和SWD。
2.4編譯下載
隨便找一個(gè)野火的STM32F103的代碼例程,驗(yàn)證一下不修改任何配置和ST的代碼是否可以直接燒錄使用
打開工程后點(diǎn)擊魔術(shù)棒,板子還是選擇STM32F103VE
接下來選擇自己使用的燒錄器,這里我用的是J-LINK
進(jìn)入setting,設(shè)置flashdownload,還是添加對應(yīng)型號的ST芯片
以上就配置結(jié)束了,然后再將例程里LED的引腳PB0和PB1修改成APM32103的LED引腳PE6和PE5
全部修改完成了,編譯下載后,兩個(gè)LED交替閃爍,說明驗(yàn)證成功,不用修改其他配置,選擇好燒錄器,直接燒錄ST代碼是可以使用的。
2.5脫機(jī)編程器
市場上買的量產(chǎn)燒錄器品牌(可以百度、淘寶搜索)有:周立功、希爾特、軒微、芯園、野火等,有些燒錄器添加了AMP32F103ZET6的型號,有些沒有。
本人只有芯園的燒錄器,選擇STM32F103ZET6的型號是可以燒錄APM32F103ZET6。
至于其它的燒錄器能否選擇STM32F103ZET6的型號燒錄APM32F103ZET6呢,由于沒有燒錄器,因此暫時(shí)無結(jié)論,后續(xù)有機(jī)會使用時(shí)再補(bǔ)充。
不過AMP32F103ZET6有官方的脫機(jī)編程器。
2.6JTAG ID不同
具體差異如下:
(1)APM32F103ZET6的信息如下:
(2)STM32F103ZET6的信息如下:
如果代碼中有使用JTAG ID作為判斷信息的話,在替換過程中會出問題。
在使用過程中,我們發(fā)現(xiàn)APM32F103ZE和STM32F103ZE的參數(shù)和電氣特性不一樣,在這種情況下,我們可能會遇到一些問題,以下通過手冊對比總結(jié)了一些模塊的差異。
3.1時(shí)鐘
3.1.1溫度、電壓的環(huán)境引起HSI的精度差異
APM32的主頻標(biāo)稱為96MHz,STM32的主頻標(biāo)稱為72MHz;在高低溫情況下,HSI作為時(shí)鐘源時(shí),APM32的時(shí)鐘精度在(-2.8~2.4)%,但STM32的時(shí)鐘精度在(-2.0~2.5)%,比APM32略高。
如果使用HSI作為系統(tǒng)時(shí)鐘,且對精度要求較高、使用場景是;如果使用場景是3.3V的工作電壓,且溫度為25℃時(shí),出廠精度都是±1%。
3.1.2HSE起振時(shí)間差異引起系統(tǒng)時(shí)鐘配置存在差異
在使用晶振作為HSE的時(shí)鐘源時(shí),APM32F103和STM32F103的起振溫度時(shí)間存在差異,STM32F103起振穩(wěn)定時(shí)間比APM32F103的快。
代碼中判斷是否起振穩(wěn)定的方式是使用軟件延時(shí)等待,設(shè)置的HSE_STARTUP_TIMEOUT數(shù)值是0x500,參考代碼如下:
當(dāng)晶振離開MCU的晶振連接引腳較遠(yuǎn),或者匹配電容不合理,或者使用貼片晶振而不是直插晶振時(shí),HSE_STARTUP_TIMEOUT的等待穩(wěn)定時(shí)間不足以使晶振起振,會出現(xiàn)無法起振的情況,導(dǎo)致系統(tǒng)時(shí)鐘為HSI的8MHz。
另外一方面,代碼運(yùn)行的速率差異,也會影響軟件延時(shí)等待的實(shí)際時(shí)間。
解決方法是調(diào)大HSE_STARTUP_TIMEOUT,例如設(shè)置HSE_STARTUP_TIMEOUT為0x5000
3.2FLASH
3.2.1APM32F103xE的頁擦?xí)r間、片擦?xí)r間、寫時(shí)間比STM32F103xE的快
通過對比兩種芯片的數(shù)據(jù)手冊,我發(fā)現(xiàn)兩者的Flash的性能參數(shù)有點(diǎn)區(qū)別:
(1)APM32的頁擦除時(shí)間是2.7~3.5ms,STM32是20~40ms,比STM32快約7倍。
(2)APM32的16bit編程時(shí)間是33.7~40.5us,STM32是40~70us,比STM32快約20%。
如果運(yùn)行的代碼中存在軟件延時(shí)等待擦寫時(shí)間,注意調(diào)整代碼。
3.2.2Flash等待周期的配置差異
手冊中系統(tǒng)頻率與訪問Flash等待時(shí)間關(guān)系如下(見用戶手冊):
(1)STM32F103ZET6的手冊
(2)APM32F103ZET6的手冊
然而兩家的Flash訪問速度也不同,有時(shí)候不會安嚴(yán)格的按照手冊配置,例如在自己編寫代碼配置系統(tǒng)時(shí)鐘為48MHz時(shí)、Flash預(yù)取使能、等待周期設(shè)置為0時(shí),就發(fā)現(xiàn)STM32F103ZET6可以正常工作,APM32F103ZET6就不能正常工作。
因此,在配置該參數(shù)時(shí),建議還是嚴(yán)格按照官網(wǎng)提供的參數(shù)配置。
PS:我看了極海官網(wǎng)上的FAQ,發(fā)現(xiàn)有些人因?yàn)榈却芷诓粔蚨霈F(xiàn)很多錯(cuò)誤,所以大家一定要盡量按照手冊上的選擇等待周期的個(gè)數(shù)!不確定夠不夠的,可以先設(shè)置多一個(gè),畢竟“多多益善”嘛~
3.2.3Flash擦寫過程中關(guān)閉中斷
在網(wǎng)上看到,APM32F103ZET6在執(zhí)行擦寫Flash時(shí),最好先關(guān)閉中斷,否則可能擦寫Flash失敗(個(gè)人沒有遇到過這個(gè)問題),而STM32F103ZET6則不需要,
3.3功耗
APM32F103較STM32F103相比,運(yùn)行、睡眠、停機(jī)功耗較小,待機(jī)功耗較大,但都是在10uA以下,電池功耗基本一致。
如果是電池供電、且運(yùn)行模式占用的運(yùn)行時(shí)間較多,使用APM32F103ZET6的工作時(shí)間是比STM32F103ZET6的工作時(shí)間長。如果產(chǎn)時(shí)間在低功耗模式運(yùn)行,工作時(shí)長則反之。
3.4.1GPIO配置為浮空輸入的抗干擾能力
眾所周知,在使用GPIO時(shí),應(yīng)配置相應(yīng)的GPIO工作模式(見用戶手冊)。
但是在用作EXTI或是USART_Rx時(shí),GPIO被配置為浮空輸入模式后,發(fā)現(xiàn)無法讀取穩(wěn)定電平,這是怎么一回事呢?
原來,APM32F103的GPIO在用作浮空輸入或復(fù)用推挽輸出時(shí),容易受到外界影響,導(dǎo)致讀取或輸出異常,此時(shí)有兩個(gè)解決方案:
①換一種工作模式,通過軟件修改成上拉輸入或推挽輸出;
②電壓容易受到干擾,那就外接一個(gè)上拉電阻,讓電平變穩(wěn)定。
3.5USBD與CAN共用
這是一個(gè)很驚喜的發(fā)現(xiàn)——APM32F103可以同時(shí)使用USBD和CAN!但是如果要實(shí)現(xiàn)這個(gè)目的,需要把CAN重新映射到復(fù)用引腳,此時(shí)是USBD2與CAN共用。
是的沒錯(cuò),APM32F103有兩個(gè)USBD,但是由于兩個(gè)USBD公用引腳、地址、寄存器、時(shí)鐘,所以相當(dāng)于只有一個(gè)USBD,只有在需要同時(shí)使用USBD和CAN時(shí),才啟用USBD2。
這里有兩個(gè)使用的注意點(diǎn):
①在USBD2的基地址偏移0x1000處寫0x0000 0001
②PA11和PA12引腳給USBD2使用,CAN使用其他引腳
3.6運(yùn)行代碼的速度有差異
相信有不少人都會用for或while循環(huán)做延時(shí),但是在實(shí)際運(yùn)用時(shí),發(fā)現(xiàn)軟件延時(shí)在時(shí)間的精度上會有誤差。
由此可見,APM和STM的芯片在代碼的執(zhí)行速度上有差異,大家千萬別把用在STM的延時(shí)循環(huán)直接套在APM上!可能會因?yàn)閱訒r(shí)間不夠長而導(dǎo)致系統(tǒng)時(shí)鐘頻率不對(別問我怎么知道的,血的教訓(xùn)[狗頭])。
當(dāng)然,用定時(shí)器或者直接用時(shí)鐘周期做精準(zhǔn)定時(shí)的話,那就noproblem了~
3.7Boot0引腳接地問題
正常情況下,從主存儲區(qū)(用戶Flash,地址為0x0800 0000)啟動,Boot0是必現(xiàn)接GND的。但是在查閱網(wǎng)上資料時(shí),發(fā)現(xiàn)STM32F103ZET6的Boot0不接GND也能穩(wěn)定從主存儲區(qū)啟動,APM32F103ZET6無法穩(wěn)定從主存儲區(qū)啟動,有時(shí)候可以、有時(shí)候不能。
在實(shí)際應(yīng)用中,如果是從主存儲區(qū)啟動,還是安安心心的按照官方的推薦將GND通過10kΩ電阻下拉到GND。
4總結(jié)
以上是在mini板上編寫了簡單的測試代碼,且在網(wǎng)上搜集、整理了資料進(jìn)行分析,STM32F103ZET6有的功能、APM32F103ZET6也有,而且APM32F103ZET6額外比STM32F103ZET6多了些功能。
初步判斷在不需要修改硬件、少量修改軟件(看具體使用了哪些模塊、哪些應(yīng)用場景)的情況下,可以使用APM32F103ZET6是可以替換STM32F103ZET6,另外,APM32F103ZET6在價(jià)格、供貨上也有優(yōu)勢,國產(chǎn)真的太香了,兄弟們還猶豫什么快下手。
-
國產(chǎn)芯片
+關(guān)注
關(guān)注
2文章
245瀏覽量
29651 -
ST芯片
+關(guān)注
關(guān)注
0文章
5瀏覽量
5185 -
中國科技
+關(guān)注
關(guān)注
0文章
9瀏覽量
2452
發(fā)布評論請先 登錄
相關(guān)推薦
評論