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