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