1.本文簡(jiǎn)介
GD32F30x 系列 MCU 是基于 Arm? Cortex?-M4 處理器的 32 位通用微控制器,與 STM32F10x 系列 MCU 保持高度兼容。本文主要從以下三個(gè)方面進(jìn)行介紹:硬件資源對(duì)比、外設(shè)及性能對(duì)比以及從 STM32F10x 移植到 GD32F30x 的移植步驟,旨在讓開發(fā)者能夠快速從 STM32F10x 移植到 GD32F30x,縮短研發(fā)周期,加快產(chǎn)品開發(fā)進(jìn)度。
2.GD32F30x vs STM32F10x 硬件資源對(duì)比
GD32F30x 和 STM32F10x 硬件引腳對(duì)比如表 2-1. GD32F30x 和 STM32F10xpin 對(duì)比所示,由該表可知,GD32F30x 與 STM32F10x 完全硬件兼容。
表 2-1. GD32F30x 和 STM32F10x pin 對(duì)比
3.GD32F30x vs STM32F10x 外設(shè)及性能對(duì)比
GD32F30x 外設(shè)資源較豐富,可實(shí)現(xiàn)對(duì) STM32F10x 外設(shè)資源的覆蓋。其中GD32F303 對(duì)應(yīng) STM32F103,GD32F305 對(duì)應(yīng) STM32F105,GD32F307 對(duì)應(yīng)STM32F107。具體系統(tǒng)及外設(shè)資源對(duì)比如表 3-1. GD32F30x 和 STM32F10x 系統(tǒng)及外設(shè)資源對(duì)比所示。
4.從 STM32F10x 到 GD32F30x 系列移植步驟
4.1.集成開發(fā)環(huán)境選型及工程配置
4.1.1.使用 Keil 開發(fā) GD32F30x
目前市面通用的 MDK for Arm?版本有 Keil4 和 Keil5,使用 Keil4 建議安裝 4.74及以上,使用 Keil5 建議安裝 5.20 以上版本。
4.1.2.在 Keil4 中添加 GD32F30x MCU
1. 從 MCU 官 網(wǎng) 或 網(wǎng) 盤 下 載 相 關(guān) 的 GD32F30x 系 列 插 件 MDKARM_AddOn_GD32F30x_V1.0.0.rar。
圖 4-1. GD32F30x 系列 MCU 型號(hào)支持 pack 包名稱(Keil4)
2. 雙擊解壓安裝至Keil4的目錄,一般都會(huì)默認(rèn)選擇,如若同時(shí)安裝了Keil4和Keil5才需要手動(dòng)選擇。
圖 4-2. Pack 包安裝示意圖(Keil4)
3. 安裝成功后,重新打開Keil4,則可以在File->Device Database中出現(xiàn)GigaDevice的下拉選項(xiàng),點(diǎn)擊可以查看到相應(yīng)的型號(hào)。
圖 4-3. Pack 包成功安裝示意圖(Keil4)
4. 為了后續(xù)debug工作的順利進(jìn)行,建議檢查一下安裝路徑下是否有下載算法,可以通過如下方式查看:打開一個(gè)工程,將型號(hào)選為GD32F30x的型號(hào),然后Options for Target -> Debug ->Settings -> Flash Download-> Add,如果下拉選項(xiàng)中有GD32F30x的下載算法則完全安裝成功。
圖 4-4. Flash 算法文件選擇示意圖(Keil4)
4.1.3.在 Keil5 中添加 GD32F30x MCU
1. 從相關(guān)網(wǎng)站下載相關(guān)的GD32F30x系列插件Keil.GD32F30x_DFP.1.1.0.rar。
圖 4-5. GD32 MCU 型號(hào)支持 pack 包名稱(Keil5)
2. 解壓并安裝至Keil5的目錄,一般都會(huì)默認(rèn)選擇。
圖 4-6. Pack 包安裝示意圖(Keil5)
3. 安裝完后重新打開Keil5工程,即可在Device->Database中出現(xiàn)GigaDevice的型號(hào)。
圖 4-7. Pack 包安裝成功示意圖(Keil5)
4. 在Options for Target -> Debug ->Settings ->Flash Download 中添加flash算法,會(huì)出現(xiàn)GD32F30x的算法,即說明安裝成功。根據(jù)相應(yīng)的芯片選擇合適的算法,即可下載仿真。
圖 4-8. Flash 算法文件添加示意圖(Keil5)
5. 用Keil5打開Keil4工程,如果報(bào)找不到器件信息等錯(cuò)誤,將Keil4的插件安裝在Keil5的目錄下,具體操作方式參考Keil4插件相關(guān)內(nèi)容。
4.1.4.MDK 使用常見問題解答
1. Keil4打開Keil5工程
如果沒有安裝Keil5,也是能夠使用Keil4來編譯Keil5的工程,具體做法就是修改工程的后綴名,將Keil5工程的后綴名xxxx.uvprojx修改為xxxx.uvproj,即可使用Keil4來查看編譯了。
2. Keil5打開Keil4工程
如果使用Keil5打開Keil4工程,打開時(shí)會(huì)遇到找不到MCU器件的情況,這種可以直接將Keil4工程的后綴名xxxx.uvproj修改為xxxx.uvprojx,即可正常使用Keil5來查看編譯了。
3. GigaDevice.GD32F30x_DFP.pack特性
1. 支持在線安裝方式;
2. 支持本地安裝方式;
3. 自動(dòng)生成GD32F30x系列MCU列表及對(duì)應(yīng)的特征信息;
4. 自動(dòng)匹配所選芯片對(duì)應(yīng)的Flash算法;
5. 支持用戶在Debug模式下查看寄存器狀態(tài);
6. 利用Books選項(xiàng)卡獲取文檔資料。
4. Pack包對(duì)Keil版本要求
Pack包適用于Keil5.15及以上版本,對(duì)于Keil5.13和5.14版本,有如下兩個(gè)問題:
1. Debug模式下無法調(diào)用SVD文件查看寄存器狀態(tài);
2. 對(duì)Pack進(jìn)行Schema check會(huì)報(bào)錯(cuò)。
5. Keil5打開Keil4工程,編譯報(bào)錯(cuò)
圖 4-9. 編譯錯(cuò)誤示意圖
錯(cuò)誤原因是core_cmInstr.h文件的路徑在Keil5和Keil4中不同,可在Option forTarget的C/C++中添加core_cmInstr.h的文件路徑,如圖4-10所示:
圖 4-10. 文件路徑添加示意圖
4.1.5.使用 GD-LINK 開發(fā) GD32F30x
GD32F30x的開發(fā)板自帶GD-LINK,可以用電路板上的GD-LINK調(diào)試仿真代碼,操作方法如下。
1. 在Options for Target -> Debug 中選擇“CMSIS-DAP Debugger”,部分客戶反饋找不到這一驅(qū)動(dòng)器選項(xiàng),那是因?yàn)镸DK版本過低,只有Keil4.74以上的版本和Keil5才支持CMSIS-DAP Debugger選項(xiàng)。
圖 4-11. GD-LINK 選擇 Debugger 類型
2. 在Options for Target -> Utilities,也要選擇“CMSIS-DAP Debugger”。
圖 4-12. GD-LINK 在 Utilities 中選擇 Debugger 類型
3. 在Options for Target -> Debug ->Settings勾選SWJ、Port選擇 SW。右框IDcode會(huì)出現(xiàn)”0xXBAXXXXX”。
圖 4-13. GD-LINK 成連接目標(biāo)板示意圖
4. 在Options for Target -> Debug ->Settings -> Flash Download中添加GD32的flash算法。
圖 4-14. GD-LINK 添加 Flash 算法文件示意圖
5. 單擊下圖的快捷方式“debug”,即可使用GD-LINK進(jìn)行仿真。
圖 4-15. GD-LINK 仿真示意圖
4.1.6.使用 J-Link 開發(fā) GD32F30x
使用J-Link來debug GD MCU,具體配置如下:
1. 在Options for Target -> Debug中選擇“J-LINK/J-Trace Cortex”。
圖 4-16. J-Link 在 Keil 中選擇 Debugger 示意圖
2. 在Options for Target -> Debug ->Utilities,也要選擇“J-LINK/J-Trace Cortex”。
圖 4-17. J-Link 在 Utilities 下選擇 Debugger 示意圖
3. 在Options for Target -> Debug ->Settings勾選SWJ,Port選擇 SW。右框IDcode會(huì)出現(xiàn)“0xXBAXXXXX”。
圖 4-18. J-Link 成功連接目標(biāo)板示意圖
4. 在Options for Target -> Debug ->Settings -> Flash Download中添加GD32的flash算法。
圖 4-19. J-Link 在 Keil 下添加 flash 算法文件示意圖
5. 單擊下圖的快捷方式“debug”,即可使用J-Link進(jìn)行仿真。
圖 4-20. J-Link 成功仿真示意圖
4.1.7.使用 IAR 開發(fā) GD32F30x
IAR版本眾多,版本之間的兼容性并不好,如果初次使用建議安裝7.3以上的版本,安裝好IAR以后再根據(jù)該文檔來添加GD的器件型號(hào),進(jìn)行相關(guān)的debug工作。
4.1.8.在 IAR 中添加 GD32F30x MCU Device
1. 從 相 關(guān) 網(wǎng) 站 下 載 相 應(yīng) 的 GD32F30x 系 列 插 件IAR_GD32F30x_ADDON.1.0.0.exe:
2. 運(yùn)行IAR_GD32F30x_ADDON.1.0.0.exe,單擊start開始安裝插件。
圖 4-21. IAR 中安裝支持 GD32 型號(hào) pack 包示意圖
3. 安裝成功后單擊Finish,結(jié)束插件安裝。
圖 4-22. IAR 下 pack 包安裝示意圖
4.1.9.在 IAR 中編譯調(diào)試 GD32F30x
在上一小節(jié)中我們已經(jīng)添加了GD32F30x系列的插件,這一小節(jié)我們介紹應(yīng)如何使用它。
使用IAR編譯GD的型號(hào),有兩個(gè)辦法,一種是使用現(xiàn)有的工程進(jìn)行修改,還有就是重新建立工程,這里就不細(xì)說具體工程應(yīng)該如何建立,GD的工程建立和別的平臺(tái)都一致,建立工程時(shí)選擇GD的相應(yīng)型號(hào)。如果沒有安裝GD的插件,可以選擇別的M3廠家型號(hào)。
圖 4-23. 在 IAR 下選擇芯片型號(hào)示意圖
6.1以后的IAR不需要添加CMSIS文件(core_cm4.c和core_cm4.h),但是需要勾選General Options->Library Configuration的Use CMSIS,如果軟件代碼有使用到printf函數(shù),還需要修改Library為FULL。
圖 4-24. 在 IAR 下添加 CMSIS 文件示意圖
芯片的Link文件建立工程時(shí)會(huì)默認(rèn)根據(jù)型號(hào)選定,但是編譯前還是要有檢查的習(xí)慣,檢查一下ICF文件是否有配置,是否正確。
圖 4-25. 在 IAR 下添加 ICF 文件示意圖
配置Debugger->Setup選項(xiàng),新建立的工程默認(rèn)是Simulator模擬,如果需要調(diào)試那么需要根據(jù)實(shí)際情況來選擇:
1. 使用GD-LINK選擇CMSIS DAP(兼容性不好,不建議在IAR下使用);
2. 使用J-Link選擇J-Link/J-Trace。
圖 4-26. 在 IAR 下選擇 Debugger 示意圖
配置Debugger->Download選項(xiàng),新建的工程有可能沒有配置download選項(xiàng),如果我們需要調(diào)試代碼那么務(wù)必要勾選User flash loader選項(xiàng),且保證board file準(zhǔn)確,否則程序無法正常下載至芯片內(nèi)部。
圖 4-27. 在 IAR 下配置 flash loader 示意圖
如果選擇了Debugger選項(xiàng),那么還需要根據(jù)Debugger選項(xiàng)設(shè)定對(duì)應(yīng)的調(diào)試選項(xiàng);如果選擇的是GD的型號(hào),在IAR下面已經(jīng)固定將所有的調(diào)試接口都配置為SWD接口,可以忽略該選項(xiàng)配置,直接進(jìn)行相關(guān)的代碼debug工作。
4.2.System 模塊使用注意事項(xiàng)
4.2.1.HXTAL 時(shí)鐘丟失后,程序如何運(yùn)行
程序使用外部晶振正常運(yùn)行之后,如果將外部晶振去掉或者短路,GD32F30x 的程序不會(huì)取指執(zhí)行。若將晶振重新恢復(fù)正常,程序會(huì)接著之前的地址運(yùn)行,如果程序?qū)G時(shí)鐘這種場(chǎng)景有特殊要求,應(yīng)用中需要手動(dòng)使能時(shí)鐘安全系統(tǒng),在其中做相關(guān)的保護(hù)措施。
4.2.2.如何區(qū)分 standby 復(fù)位和上電復(fù)位
僅通過 RCU 的 RCU_RSTSCK 寄存器無法區(qū)分是 standby 復(fù)位還是上電復(fù)位,需要結(jié)合查詢 PMU 的 PMU_CS 寄存器解決問題。
4.2.3.HSE 注意事項(xiàng)
GD32F30x 外部晶體起振時(shí)間會(huì)比 STM32F10x 系列要長(zhǎng),所以原有的晶體超時(shí)時(shí)間需要加大:
調(diào)整前:
調(diào)整后:
4.2.4.如何通過軟件區(qū)分 GD32 和 STM32
GD32F30x 在設(shè)計(jì)階段,已經(jīng)預(yù)留了相關(guān)寄存器,用戶只需要軟件讀取寄存器,即可獲取到相關(guān)的型號(hào)信息,GD32F30x 每個(gè)型號(hào)此處值都為固定值。
Code_Num=*( uint32_t *)( 0x40022100 );
4.2.5.GD32F30x Flash 取值零等待,軟件方面注意事項(xiàng)
GD32F30x 系列 Flash 為零等待設(shè)計(jì),在同主頻下,帶來了更高的性能體驗(yàn)。如果用戶代碼有用到 for 循環(huán)或者是 while 循環(huán)語句來做延時(shí),延時(shí)時(shí)間在GD32F30x系列上會(huì)變短,需要適當(dāng)?shù)募哟笱訒r(shí)參數(shù)或改用Timer來做延時(shí)函數(shù)。
4.2.6.GD32F30x 上電啟動(dòng)異常常見原因
1. 檢查板子上 Boot 0 引腳是否懸空,GD32F30x 運(yùn)行用戶程序必須要求 Boot0經(jīng) 10K 電阻接 GND;
2. 如果板子上有大功率器件(Wifi、GSM、GPS 等),檢查大功率器件開啟瞬間
VDD 是否存在跌落情況,如存在跌落可以適當(dāng)加大電源輸出端的負(fù)載電容;
3. 觀察芯片的復(fù)位管腳,復(fù)位管腳是否一直處于拉低狀態(tài),檢查是否供電異常
或者是芯片硬件看門狗使能了,芯片處于反復(fù)復(fù)位狀態(tài)。
4.2.7.MCU 無法正常使用 SWD 下載程序
1. 接線異常,SWD 相關(guān)的調(diào)試口未正常接好;
2. 芯片是否被讀保護(hù)或者處于反復(fù)復(fù)位狀態(tài);
3. SWD 的調(diào)試線過長(zhǎng)或者是通信速率過高,適當(dāng)減短 SWD 數(shù)據(jù)線,同時(shí)降低SWD 速率;
4. 按照硬件指南給 SWD 添加相應(yīng)的上下拉電阻,提高通信抗干擾能力。
4.2.8.MCU 上電時(shí)間較長(zhǎng)
由于設(shè)計(jì)架構(gòu)差異,GD32F30x 比 STM32F10x 的上電時(shí)間和 Standby 喚醒時(shí)間較長(zhǎng),時(shí)間約 144ms,若對(duì)時(shí)間沒有要求,可忽略。
4.2.9.代碼超過 256K 后執(zhí)行速度慢
GD32F30x 系列的 Flash 分為 Code 區(qū)(前 256K)和 Data 區(qū)(256K 以后的區(qū)域),二者在擦寫操作上沒有區(qū)別,但是讀操作時(shí)間上存在較大差別,Code 區(qū)代碼取值零等待,Data 區(qū)執(zhí)行代碼會(huì)有較長(zhǎng)延時(shí)。應(yīng)用中如果涉及該架構(gòu)影響到使用可以通過分散加載來改善,具體做法參考分散加載應(yīng)用文檔。
4.3.CAN 模塊使用注意事項(xiàng)
4.3.1.CAN 發(fā)送出現(xiàn) ACK 錯(cuò)誤
假如出現(xiàn)類似 ACK 出錯(cuò)的問題,可以修改采樣點(diǎn),一般做法是將 BS1 值增大,BS2 減小。
4.3.2.CAN 接收異常,接收兩幀數(shù)據(jù)會(huì)丟一包數(shù)據(jù)
STM32 固件庫會(huì)調(diào)用 CAN_FIFORelease 函數(shù),如果手動(dòng)多調(diào)用一次清緩存的動(dòng)作會(huì)導(dǎo)致 CAN 接收丟包,也就是軟件中無需主動(dòng)調(diào)用 CAN_FIFORelease 函數(shù),CAN FIFO 會(huì)被自動(dòng)釋放。
4.4.低功耗注意事項(xiàng)
4.4.1.在 Stop 模式下,少數(shù)芯片功耗偏高
為了使功耗恢復(fù)正常,需要將沒用到的 IO 口全部配置成模擬輸入(AN)模式,芯片內(nèi)部未引出來的也要配置。
4.4.2.在 Stop 模式下,概率性不能喚醒
在不斷進(jìn)出 Stop,并且不斷有 timer 或者 systick 中斷時(shí),運(yùn)行很長(zhǎng)時(shí)間后,在 Stop模式下有概率性的無法喚醒。
解決方案:
當(dāng)進(jìn)入 Stop 時(shí)(WFI/WFE),屏蔽掉除喚醒源中斷外的所有中斷,出 Stop 之后再打開其他中斷,代碼修改如下。
4.5.ADC 模塊使用注意事項(xiàng)
4.5.1.ADC 采集數(shù)據(jù)異常問題分析
1. ADC 通道的采集引腳未配置為模擬輸入,GD32 要求通道 IO 口必須配置為模擬輸入;
2. ADC 時(shí)鐘過高,ADC 采樣時(shí)鐘高于 40M 獲取到的數(shù)據(jù)不具有參考意義;
3. ADC 不耐 5V 的 IO 口被接入超過 VDDA 的電平信號(hào);
4. ADC 采樣值偏小或不穩(wěn)定,應(yīng)該適當(dāng)?shù)慕档?ADC 時(shí)鐘,加大采樣周期的值。
4.5.2.ADC1 和 ADC2 同步模式下,注意事項(xiàng)
如果 ADC1 和 ADC2 同步采集,ADC2 是跟著 ADC1 同步觸發(fā),此時(shí) ADC2 的注入組的觸發(fā)方式需要手動(dòng)配置成軟件觸發(fā)(默認(rèn)是 TIMER1_TRGO),否則可能導(dǎo)致 ADC 注入組無數(shù)據(jù)。
4.5.3.ADC_CR2 中的 ADCON 使用注意事項(xiàng)
ADC 使能以后需要在代碼里面插入 1 個(gè)通道的 ADC 轉(zhuǎn)換周期以上;
4.5.4.ADC 查詢法采集數(shù)據(jù),出現(xiàn)通道錯(cuò)亂的情況
ADC 使用查詢法采集數(shù)據(jù)時(shí),如果使能了 ADC 的 SCAN 模式,就有可能會(huì)出現(xiàn)ADC 數(shù)據(jù)錯(cuò)亂的情況;ADC 采集通道 SCAN 功能只適用于多通道注入采樣和DMA 模式。
4.5.5.ADC 在每次復(fù)位之后采樣值有偏差
由于 MCU 上電或者復(fù)位階段,ADC 校準(zhǔn)時(shí),電源不穩(wěn)定,導(dǎo)致校準(zhǔn)時(shí)出現(xiàn)偏差,ADC 值采樣均出現(xiàn)偏大或者偏小,可以關(guān)閉校準(zhǔn),或者等電源穩(wěn)定后再校準(zhǔn)解決該問題。
4.6.RCU 模塊使用注意事項(xiàng)
當(dāng) IAP 時(shí),使用 GD32 的固件作為 boot,跳轉(zhuǎn)到 STM32 固件庫的 APP 后,可能造成系統(tǒng)時(shí)鐘不對(duì),例如 uart 打印異常,timer 異常。
GD32F30x 系列 MCU 最高主頻可以運(yùn)行 120MHz,PLL 倍頻參數(shù)比 STM32 的多幾個(gè) bit,如下,出現(xiàn)異常時(shí),需要跳轉(zhuǎn)前將相關(guān)的 bit 復(fù)位。
GD32 的 CFG0 寄存器的 bit30 bit28 bit27 為有效位。
STM32 的 RCC_CFGR 寄存器的 bit30 bit28 bit27 為保留位。
4.7.SPI 模塊使用注意事項(xiàng)
4.7.1.SPI 通信 BSY 標(biāo)志位
在 SPI 程序編寫的過程中,輪詢使用 BSY 作為通信標(biāo)志位,導(dǎo)致傳送數(shù)據(jù)丟失或者是錯(cuò)誤。
這主要是因?yàn)?GD32 的 BSY 標(biāo)志位不是在寫入 DR 后就置位的,而是發(fā)送完第一個(gè) bit 才被置位,傳輸過程中不要使用 BSY 作為每次傳輸?shù)呐袛啵褂?TXE 和RXNE 來進(jìn)行判斷。
4.7.2.SPI 使能之后配置參數(shù)不生效
當(dāng)需要修改 SPI 模式或者速度的時(shí)候,需要將 SPI 先 disable,再修改參數(shù),最后再 enable.
4.7.3.SPI 從機(jī)模式管腳模式
從機(jī)模式下 CLK、MISO、NSS 需要將 IO 配置成 Input_floating,才能正常工作。
4.8.UART 模塊使用注意事項(xiàng)
4.8.1.UART DMA 注意事項(xiàng)
使用 UART DMA 發(fā)送數(shù)據(jù)的時(shí)候,可能丟掉一幀中的第一個(gè) byte 數(shù)據(jù),注意盡量不要在發(fā)送的時(shí)候頻繁的開關(guān) UART 發(fā)送,若測(cè)試無問題,可以忽略。
usart_transmit_config(USARTx,USART_TRANSMIT_ENABLE)假如要關(guān)閉 UART 發(fā)送,需要按照以下流程:
先開啟 usart_transmit_ enable 再去打開 dma_channel_enable,如下圖。
4.9.RTC 模塊使用注意事項(xiàng)
4.9.1.LSE 驅(qū)動(dòng)模式
GD32 MCU 的 RTC 驅(qū)動(dòng)能力分四檔,默認(rèn)是強(qiáng)驅(qū)動(dòng)能力,若不使用 GD32 本身的固件庫,可能會(huì)強(qiáng)驅(qū)動(dòng)改成弱驅(qū)模式,造成部分機(jī)器不起振,則需要將寄存器RCU_BDCTL 的 LXTALDRI[1:0]配置成 11
4.10.USB 模塊使用注意事項(xiàng)
USBD 通訊假如出現(xiàn) PMOUIF 和 ERRIF 錯(cuò)誤,可以通過屏蔽 CNTR_ESOFM 標(biāo)志來解決該問題。
4.11.Flash 模塊使用注意事項(xiàng)
4.11.1.Flash 擦寫差異
GD32 MCU Flash 執(zhí)行速度快,但是寫操作慢,所以在對(duì) Flash 操作的時(shí)候需要修改下面幾個(gè)函數(shù):
4.11.2.Flash 操作地址差異
寫 Flash,必須采用絕對(duì)地址,也就是 0x08000000 為首地址。而對(duì)于讀操作,既可以使用絕對(duì)地址,也可以用相對(duì)地址 0x00000000。
本教程由GD32 MCU方案商聚沃科技原創(chuàng)發(fā)布,了解更多GD32 MCU教程,關(guān)注聚沃科技官網(wǎng)
-
單片機(jī)
+關(guān)注
關(guān)注
6035文章
44554瀏覽量
634631 -
嵌入式
+關(guān)注
關(guān)注
5082文章
19104瀏覽量
304797 -
STM32
+關(guān)注
關(guān)注
2270文章
10895瀏覽量
355729 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5032瀏覽量
97371 -
GD32
+關(guān)注
關(guān)注
7文章
403瀏覽量
24326
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論