0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【GD32 MCU 移植教程】8、從 STM32F4xx 系列移植到 GD32F4xx 系

聚沃科技 ? 2024-09-06 09:40 ? 次閱讀

1.本文簡(jiǎn)介

GD32F4xx 系列 MCU 是基于 Arm? Cortex?-M4 處理器的 32 位通用微控制器,與 STM32F4xx系列 MCU 保持高度兼容。本文主要從以下三個(gè)方面進(jìn)行介紹:硬件資源對(duì)比、外設(shè)及性能對(duì)比以及從 STM32F4xx 移植到 GD32F4xx 的移植步驟,旨在讓開(kāi)發(fā)者能夠快速?gòu)?STM32F4xx移植到 GD32F4xx,縮短研發(fā)周期,加快產(chǎn)品開(kāi)發(fā)進(jìn)度。

2.GD32F4xx vs STM32F4xx 硬件資源對(duì)比

GD32F4xx 和 STM32F4xx 硬件引腳對(duì)比如表 2-1. GD32F4xx 和 STM32F4xx pin 對(duì)比所示,由該表可知,GD32F4xx 與 STM32F4xx 完全硬件兼容。

表 2-1. GD32F4xx 和 STM32F4xx pin 對(duì)比

wKgaombaW6iAWGY6AABJy383CG4620.png

注意:

1. NC 代表可接高、可接地、可不接。

2. STM32F4xx 的 VCAP_1/2 引腳一般是通過(guò)阻容接地,若采用 GD32F4xx 替代,建議可直接通過(guò)電阻接地,電容可省略。

3. STM32F4xx 的 BYPASS_REG 引腳一般接地或接高,不影響替換。

4. 注意 PDR_ON 引腳需通過(guò) 10K 電阻上拉。

3.GD32F4xx vs STM32F4xx 外設(shè)及性能對(duì)比

GD32F4xx 外設(shè)資源豐富,可實(shí)現(xiàn)對(duì) STM32F4xx 外設(shè)資源的覆蓋,具體系統(tǒng)及外設(shè)資源對(duì)比如表 3-1. GD32F4xx 和 STM32F4xx 系統(tǒng)及外設(shè)資源對(duì)比所示。

表 3-1. GD32F4xx 和 STM32F4xx 系統(tǒng)及外設(shè)資源對(duì)比

wKgaombaW4WAHJn_AAAsffPi_c0992.png

4.從 STM32F4xx 到 GD32F4xx 系列移植步驟

GD32F4xx 和 STM32F4xx 均基于 Arm? Cortex?-M4 內(nèi)核 MCU,可采用相同的集成開(kāi)發(fā)環(huán)境和燒錄調(diào)試工具,一般集成開(kāi)發(fā)環(huán)境為 IAR、Keil和Eclipse等,燒錄和調(diào)試工具可選用ULINK、J-Link、ST-LINK、GD-LINK 等。本節(jié)首先介紹使用 Keil 和 IAR 進(jìn)行集成開(kāi)發(fā)環(huán)境選型及工程配置,之后介紹各個(gè)外設(shè)在移植時(shí)可能碰到的問(wèn)題以及解決方法。

讀者進(jìn)行移植測(cè)試時(shí)可參考以下步驟進(jìn)行:

(1)集成開(kāi)發(fā)環(huán)境選型及工程配置(或保持之前配置);

(2)將編譯的工程代碼燒錄到芯片內(nèi)進(jìn)行測(cè)試;

(3)根據(jù)使用的外設(shè)以及測(cè)試的情況參考本節(jié)各外設(shè)移植問(wèn)題及解決方法進(jìn)行修改測(cè)試。

4.1 集成開(kāi)發(fā)環(huán)境選型及工程配置

4.1.1 使用 Keil5 開(kāi)發(fā)

首先安裝選型 pack 包,選型 pack 包可通過(guò) https://pan.baidu.com/s/1mhQsNpu 網(wǎng)盤(pán)或GD32MCU.com 官網(wǎng)下載,若采用 Keil5 開(kāi)發(fā),也可通過(guò) Pack Installer 進(jìn)行在線更新(建議通過(guò)官網(wǎng)下載)。 下 載 后 解 壓 pack 包 如 圖 4-1. AddOn 選 型 安 裝 包 所示,其中

GigaDevice.GD32F4xx_Addon.3.0.0.exe為Keil4的選 型 安 裝包 、GigaDevice.GD32F4xx_DFP.3.0.0.pack 為 Keil5 的選型安裝包、IAR_GD32F4xx_ADDON.3.0.0.exe 為 IAR 的選型安裝包,在此選擇 GigaDevice.GD32F4xx_DFP.3.0.0.pack 進(jìn)行安裝,安裝路徑默認(rèn)選擇 Keil5 安裝路徑。

wKgZombaW-OAR5MeAAAwb3dp97o696.png

安裝選型安裝包后,打開(kāi)具體軟件工程,點(diǎn)擊 Project->Option for Target 打開(kāi)配置對(duì)話(huà)框,點(diǎn)擊 Device 進(jìn)行工程選型,如圖 4-2. Keil5 下選型配置所示可選擇對(duì)應(yīng) GD32F4xx 選型,點(diǎn)擊OK。

wKgaombaW_KAGysZAACjxyqAjtE600.png

選型后,再次打開(kāi) Option for Target 配置對(duì)話(huà)框,點(diǎn)擊 Debug 選擇所使用的燒錄器,之后點(diǎn)擊Utilities->Setting,彈出如圖4-3. 下載算法選擇窗口對(duì)話(huà)框,點(diǎn)擊add選擇對(duì)應(yīng)的下載算法

wKgaombaXAiARB3kAABMp1pCQT4133.png

之后可將修改的工程其他配置與原工程進(jìn)行對(duì)比,排查預(yù)定義宏、工程優(yōu)化、FPU 配置等是否一致,不同的地方可進(jìn)行修改調(diào)整,修改后可進(jìn)行燒錄測(cè)試。

4.1.2 使用 IAR 開(kāi)發(fā)

首先安裝 IAR 選型包,如圖 4-1. AddOn 選型安裝包所示,AddOn 選型包中雙擊IAR_GD32F4xx_ADDON. 3.0.0.exe 選擇 IAR 安裝路徑默認(rèn)安裝即可。

安裝選型包后,打開(kāi)應(yīng)用工程,打開(kāi) option 對(duì)話(huà)框,選擇 general options->Target,可進(jìn)行設(shè)備選型,如圖 4-4. IAR 工程選型所示。

wKgZombaXCWADDhTAABzdFrVF4E148.png

選型之后,可以 check 下鏈接文件以及下載文件是否已更換,如圖 4-5. 鏈接文件選擇圖 4-6.下載文件選擇所示,選擇 GD32 對(duì)應(yīng)鏈接文件以及下載文件。

圖 4-5. 鏈接文件選擇

wKgZombaXDmAa_K4AABTmjHbiGQ029.png

圖 4-6. 下載文件選擇

wKgaombaXD-ARXBeAABXsMQHqww586.png

配置完成后,即可進(jìn)行燒錄下載及調(diào)試測(cè)試。

注意:若原始工程選型 GD32 MCU 編譯異常,也可以選型 STM32 對(duì)應(yīng)型號(hào)進(jìn)行編譯下載測(cè)試。若希望調(diào)試時(shí)對(duì)應(yīng) GD32 寄存器或者使用 GD32 所有特有的外設(shè)或功能可以選擇 GD32對(duì)應(yīng)型號(hào),切換選型后有關(guān)燒錄器選擇或其他工程配置需要參考之前的配置進(jìn)行修改。

4.2 SPI 模塊移植注意事項(xiàng)

4.2.1 SPI 重配異常處理

若用戶(hù)在使用時(shí)切換 SPI 配置,重配 SPI 后,SPI 時(shí)鐘改變,建議在重配 SPI 之前先關(guān)閉 SPI模塊,配置完成后,再使能 SPI。修改代碼如下所示。

wKgaombaXF6AaFIgAAASrqzMy7Y588.png

4.3 ADC 模塊移植注意事項(xiàng)

4.3.1 ADC 8 位對(duì)齊模式處理

ADC 在設(shè)置為 8bit 模式右對(duì)齊時(shí),GD32F4xx 是取 12bit 數(shù)據(jù)中的高 8bit,使用時(shí)請(qǐng)注意,如表 4-1. 右對(duì)齊時(shí) ADC 采樣數(shù)據(jù)寄存器所示??刹捎米髮?duì)齊,讀取高字節(jié)數(shù)據(jù),如表 4-2. 左對(duì)齊時(shí) ADC 采樣數(shù)據(jù)寄存器所示

wKgZombaXH2AKwdzAAAcjsfk40g817.pngwKgaombaXIOAcQAyAAAdnOOQdi8716.png

4.3.2 ADC 軟件觸發(fā)時(shí)機(jī)處理

在 ADC IDLE 的時(shí)候,軟件寫(xiě)一下 swstart,硬件會(huì)檢測(cè)到 swstart 的上升沿,然后開(kāi)始采樣,并在采樣開(kāi)始的時(shí)候?qū)?swstart 清 0。如果在 ADC 正在轉(zhuǎn)換時(shí)寫(xiě) swstart,此時(shí) ADC 無(wú)法檢測(cè)上升沿,當(dāng) ADC 轉(zhuǎn)換完當(dāng)前通道后,swstart 雖為高電平,但檢測(cè)不到上升沿, ADC 也無(wú)法啟動(dòng)轉(zhuǎn)換,因此置位 swstart 之前需要等待 EOC 標(biāo)志置位,即 ADC 轉(zhuǎn)換完成。

4.3.3 ADC 規(guī)則組查詢(xún) EOC 讀取數(shù)據(jù)異常處理

ADC 規(guī)則組采樣數(shù)據(jù)后先置位 EOC,然后在下個(gè) ADCCLK 將數(shù)據(jù)填充到數(shù)據(jù)寄存器,如果ADC 時(shí)鐘較慢且主頻較高情況下,可能存在無(wú)法讀取 ADC 規(guī)則組采樣數(shù)據(jù)的情況,可以通過(guò)在 EOC 后延遲超過(guò) 1 個(gè) ADCCLK 時(shí)間然后再讀取 ADC 規(guī)則組數(shù)據(jù)解決。

4.4 USART 模塊移植注意事項(xiàng)

4.4.1 串口 DMA 發(fā)送數(shù)據(jù)丟失處理

GD32F4xx MCU 的 USART 使用 DMA 發(fā)送,如果先使能 DMA,后使能串口的 Tx 功能,會(huì)導(dǎo)致由于 DMA 先于 USART 打開(kāi)的時(shí)間差,造成在 USART 沒(méi)準(zhǔn)備好發(fā)送的情況下 DMA 事先傳輸數(shù)據(jù),進(jìn)而導(dǎo)致數(shù)據(jù)丟失,軟件上可修改 DMA 和串口配置順序,先配置串口,然后配置DMA。

4.4.2 串口通信由于時(shí)鐘波特率誤差導(dǎo)致數(shù)據(jù)錯(cuò)亂處理

本項(xiàng)適用于 GD32F405/407/450 系列。在一些存在波特率誤差(高低位時(shí)間偏差)的應(yīng)用場(chǎng)景下,比如 485 長(zhǎng)距離通信、強(qiáng)干擾等,可能會(huì)存在串口 START 位檢測(cè)異常導(dǎo)致數(shù)據(jù)錯(cuò)亂的情況,該情況下可通過(guò)以下方法進(jìn)行改善:

1. 將 16 倍過(guò)采樣配置為 8 倍過(guò)采樣,注意過(guò)采樣配置需要在波特率配置之前,可提高對(duì)波特率誤差的容錯(cuò)能力;

2. 降低波特率;

3. 硬件整改,減少實(shí)際波形波特率偏差;

4. 更換 GD32F425/427/470 系列測(cè)試。

4.4.3 串口 DMA 接收不定長(zhǎng)數(shù)據(jù) DMA 無(wú)法重配處理

串口 DMA 接收不定長(zhǎng)數(shù)據(jù)一般在串口超時(shí)中斷或 IDLE 中斷中重新配置 DMA,以準(zhǔn)備接收下一幀數(shù)據(jù),由于關(guān)閉 DMA 將會(huì)置位 DMA 傳輸完成標(biāo)志,進(jìn)而導(dǎo)致 DMA 無(wú)法重新配置,可以通過(guò)在關(guān)閉 DMA 后清除 DMA 傳輸完成標(biāo)志進(jìn)行解決。

4.5 ENET 模塊移植注意事項(xiàng)

4.5.1 以太網(wǎng) Ping 不通的相關(guān)處理

若出現(xiàn)以太網(wǎng) ping 不通的問(wèn)題,若排除硬件問(wèn)題,軟件有以下兩種可能:

(1)由于 GD32F4xx芯片主頻較高,在代碼端,應(yīng)該保證將 ENET_DMA_CTL 寄存器的第 20 位 FTF 置 1,清空發(fā)送 FIFO 后,必須軟件等待該位被硬件清 0 后適當(dāng)延遲再進(jìn)行其他操作。否則,有概率性導(dǎo)致ENET 發(fā)送異常,從而出現(xiàn) PING 不通的情況,修改代碼如下所示。

wKgZombaXM-AK-v6AAAWhxNekio085.png

(2)若客戶(hù)以太網(wǎng)采用半雙工通信,若打開(kāi)載波偵聽(tīng),會(huì)導(dǎo)致發(fā)送異常,按照 802.1 以太網(wǎng)協(xié)議,需關(guān)閉載波監(jiān)聽(tīng)功能,修改代碼如下所示。

wKgZombaXOGALMlyAAAVBOv5BYw689.png

4.5.2 以太網(wǎng)硬件 checksum 異常處理

由于在 GD32F4 上硬件 checksum 使用更嚴(yán)格,可建議使用軟件 checksum,或軟件上使能ENET_DMA_CTL 里面的 FERF 位,并對(duì)錯(cuò)誤幀進(jìn)行相應(yīng)處理。

4.6 USBFS 模塊移植注意事項(xiàng)

4.6.1 USB 發(fā)送數(shù)據(jù)偶爾出錯(cuò)異常處理

若出現(xiàn) USB 端點(diǎn)發(fā)送數(shù)據(jù)偶爾出錯(cuò)的情況,請(qǐng)排查 DCD_EP_Flush();函數(shù)使用情況,該函數(shù)僅需在 USB 初始化中端點(diǎn)緩沖區(qū)配置完成后,進(jìn)行 Flush,其他地方 Flush 緩沖區(qū)可能會(huì)造成USB緩沖區(qū)異常,因而建議只需在USB初始化時(shí)進(jìn)行一次緩沖區(qū)Flush操作,其他地方的Flush操作可屏蔽。

4.7 IIC 模塊移植注意事項(xiàng)

4.7.1 作為主機(jī)讀取 2 個(gè)字節(jié)數(shù)據(jù) IIC 總線卡死處理

該問(wèn)題出現(xiàn)的原因是由于在設(shè)置 POS 之前被其他中斷打斷,導(dǎo)致 POS 控制異常,對(duì)緊接著的數(shù)據(jù)回復(fù)了 NACK 導(dǎo)致總線掛死,可以有以下兩種解決方法:

1、在地址發(fā)送之前禁用中斷,并在 POS 配置之后使能中斷;

2、修改配置流程,將 POS 配置放置在 Start 發(fā)送之前。

4.8 HXTAL 時(shí)鐘移植注意事項(xiàng)

4.8.1 HXTAL 超時(shí)等待宏定義配置較短導(dǎo)致溢出處理

在 stm32f4xx.h 中的 HSE_STARTUP_TIMEOUT 超時(shí)宏定義建議從 0x0500 改成 0xfffff,修改代碼如下所示。

wKgZombaXSyAacvHAAAOMtQoDz4267.png

4.9 CAN 模塊移植注意事項(xiàng)

4.9.1 CAN 連續(xù)發(fā)送概率性丟幀處理

若使用 STM32 Cube 庫(kù),在連續(xù)發(fā)送且不判斷上一幀數(shù)據(jù)發(fā)送完成的情況下,可能存在概率性丟幀情況,該問(wèn)題的原因在于 NUM[1:0]控制位 GD32 和 STM32 的行為不一致,在有 mailbox為空的情況下,STM32 的 Code 位為最小的那個(gè)空的 mailbox,而 GD32 的 NUM[1:0]位是正在處理的那個(gè) mailbox。因而建議可通過(guò)判斷 TME0/1/2 來(lái)選擇郵箱,具體修改代碼如圖 4-7. 修改代碼示例所示。

wKgZombaXSOAYPfxAAEMx2YjdOM636.png

4.9.2 CAN 無(wú)法接收異常處理

若使用 STM32 Cube 庫(kù),建議將 CAN 初始化中 SlaveStartFilterBank 由 0 改成 14,否則會(huì)出現(xiàn) CAN0 沒(méi)有過(guò)濾器可用導(dǎo)致無(wú)法接收數(shù)據(jù),具體修改如圖 4-8. 修改代碼示例所示。

wKgZombaXV2ADofOAAWmbprwuGM111.png

教程GD32 MCU方案商聚沃科技原創(chuàng)發(fā)布,了解更多GD32 MCU教程,關(guān)注聚沃科技官網(wǎng)

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6022

    文章

    44375

    瀏覽量

    628280
  • 嵌入式
    +關(guān)注

    關(guān)注

    5045

    文章

    18813

    瀏覽量

    298429
  • STM32
    +關(guān)注

    關(guān)注

    2257

    文章

    10826

    瀏覽量

    352428
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4768

    瀏覽量

    96150
  • GD32
    +關(guān)注

    關(guān)注

    7

    文章

    400

    瀏覽量

    23971
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    GD32F4xx系列固件庫(kù)

    GD32F4xx系列固件庫(kù)包含GD32F403、GD32F405、GD32F407以及GD32F
    發(fā)表于 08-21 08:55 ?182次下載

    STM32F0xx系列移植GD32F1x0系列軟件操作說(shuō)明

    本文檔介紹了STM32F0xx系列GD32F1x0系列的軟件移植操作。
    發(fā)表于 08-28 16:17 ?26次下載

    GD32F4xx系列芯片編程軟件免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是GD32F4xx系列芯片編程軟件免費(fèi)下載
    發(fā)表于 01-22 08:00 ?24次下載
    <b class='flag-5'>GD32F4xx</b><b class='flag-5'>系列</b>芯片編程軟件免費(fèi)下載

    GD32F4xx 用戶(hù) 手冊(cè)

    GD32F4xx 用戶(hù) 手冊(cè)
    發(fā)表于 02-23 18:46 ?11次下載
    <b class='flag-5'>GD32F4xx</b> 用戶(hù) 手冊(cè)

    GD32F4xx 固件庫(kù) 用戶(hù) 指南

    GD32F4xx 固件庫(kù) 用戶(hù) 指南
    發(fā)表于 02-23 18:58 ?12次下載
    <b class='flag-5'>GD32F4xx</b> 固件庫(kù) 用戶(hù) 指南

    AN056 GD32F4xx系列硬件開(kāi)發(fā)指南

    AN056 GD32F4xx系列硬件開(kāi)發(fā)指南
    發(fā)表于 02-23 19:01 ?1次下載
    AN056 <b class='flag-5'>GD32F4xx</b><b class='flag-5'>系列</b>硬件開(kāi)發(fā)指南

    AN018 GD32F4xx MPU使用說(shuō)明

    AN018 GD32F4xx MPU使用說(shuō)明
    發(fā)表于 02-27 18:22 ?1次下載
    AN018 <b class='flag-5'>GD32F4xx</b> MPU使用說(shuō)明

    兆易創(chuàng)新AN056 GD32F4xx系列硬件開(kāi)發(fā)指南

    兆易創(chuàng)新AN056GD32F4xx系列硬件開(kāi)發(fā)指南AN056GD32F4xx系列硬件開(kāi)發(fā)指南
    發(fā)表于 10-19 17:26 ?2次下載

    兆易創(chuàng)新GD32F4xx系列MCU固件庫(kù)使用指南

    兆易創(chuàng)新GD32F4xx系列MCU固件庫(kù)使用指南GD32F4xx系列MCU固件庫(kù)使用指南
    發(fā)表于 10-19 17:26 ?20次下載

    兆易創(chuàng)新GD32F4xx系列MCU用戶(hù)手冊(cè)

    兆易創(chuàng)新GD32F4xx系列MCU用戶(hù)手冊(cè)GD32F4xx系列MCU用戶(hù)手冊(cè)
    發(fā)表于 10-19 17:26 ?25次下載

    兆易創(chuàng)新GD32F4xx系列開(kāi)發(fā)板套件

    兆易創(chuàng)新GD32F4xx系列開(kāi)發(fā)板套件GD32F4xx系列開(kāi)發(fā)板套件
    發(fā)表于 10-19 17:26 ?8次下載

    GD32 MCU 移植教程】2、 GD32F303 移植 GD32F503

    GD32E503 系列GD 推出的 Cortex_M33 系列產(chǎn)品,該系列資源上與 GD32F
    的頭像 發(fā)表于 08-31 09:36 ?1033次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>移植</b>教程】2、<b class='flag-5'>從</b> <b class='flag-5'>GD32F</b>303 <b class='flag-5'>移植</b><b class='flag-5'>到</b> <b class='flag-5'>GD32F</b>503

    GD32 MCU 移植教程】5、GD32E230 系列移植 GD32F330 系列

    GD32E230 系列GD 的 Cortex_M23 系列產(chǎn)品,GD32F330 系列
    的頭像 發(fā)表于 09-03 10:05 ?401次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>移植</b>教程】5、<b class='flag-5'>GD</b>32E230 <b class='flag-5'>系列</b><b class='flag-5'>移植</b><b class='flag-5'>到</b> <b class='flag-5'>GD32F</b>330 <b class='flag-5'>系列</b>

    GD32 MCU 移植教程】9、 STM32F10x 系列移植 GD32F30x 系列

    GD32F30x 系列 MCU 是基于 Arm? Cortex?-M4 處理器的 32 位通用微控制器,與 STM32F10x
    的頭像 發(fā)表于 09-07 09:57 ?146次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>移植</b>教程】9、<b class='flag-5'>從</b> <b class='flag-5'>STM32F</b>10x <b class='flag-5'>系列</b><b class='flag-5'>移植</b><b class='flag-5'>到</b> <b class='flag-5'>GD32F</b>30x <b class='flag-5'>系列</b>

    GD32 MCU 移植教程】10、STM32F030系列移植GD32E230系列

    GD32E230 對(duì)比 STM32F030 有著很好的兼容性和更高的性?xún)r(jià)比,內(nèi)核和外設(shè)都有所增強(qiáng)。本人曾做過(guò)產(chǎn)品的 MCU 替換,將基于 STM32F0xx 1.5.0 固件庫(kù)的應(yīng)用程
    的頭像 發(fā)表于 09-07 10:24 ?244次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>移植</b>教程】10、<b class='flag-5'>從</b><b class='flag-5'>STM32F</b>030<b class='flag-5'>系列</b><b class='flag-5'>移植</b><b class='flag-5'>到</b><b class='flag-5'>GD</b>32E230<b class='flag-5'>系列</b>