精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

聚沃科技 ? 2024-09-07 10:24 ? 次閱讀

1. 前言

GD32E230 對比 STM32F030 有著很好的兼容性和更高的性價比,內核和外設都有所增強。本人曾做過產品MCU 替換,將基于 STM32F0xx 1.5.0 固件庫的應用程序移植到 GD32E230 上,大體上來說工作量不大,移植后的效果也不錯,GD32E230 相比 STM32F030 有不少功能的升級,主頻也更高,能感覺到國產 MCU 一直在進步。本人將此前的移植經驗進行了整理,可幫助有需要的朋友快速將應用程序從 STM32F030 移植到GD32E230 上(基于STM32F0xx 標準庫 V3.5.0 和 STM32F10x 標準庫 V3.5.0)。本移植工作除基于STM32F0xx 1.5.0固件庫的工程外還需準備STM32F10x 1.5.0固件庫。GD32E230系列采用 Cortex-M23 內核,該內核向下兼容 Cortex-M0/M0+。由于 KEIL5.25/IAR8.23及以上版本才提供了對 M23 內核的支持,因此常規情況下,必須在 KEIL5.26/IAR8.23 及以上開發環境下才可以正常使用該芯片。調試仿真器如果使用 Jlink 的話需要 JlinkV9,也可以用 GD 官方的 GDlink 調試,但 GDlink 在 IAR 下的支持相對差一些。據了解也有在低版本開發環境下開發 E230的方法,可詢問供應商或原廠。本文的介紹開發環境使用 Keil5.26 版本。

GD32E230 較 STM32F030 主要有以下優點:

1、更高的主頻(72MHz VS 48MHz)

2、更高版本的內核(Cortex M23 VS M0)

3、支持更多指令集(單周期乘法、17 周期除法)

4、ADC 時鐘更高(28MHz VS 14MHz)

5、運行功耗更低

2. 引腳兼容性

STM32F030 與 GD32E230 在相同封裝下是 Pin To Pin 兼容的。外設上 GD32E230 功能覆蓋STM32F030,大部分外設完全兼容,后文我會具體介紹。需要注意:相關手冊中 STM32F030 外設編號從 1 開始,GD32E230 外設編號從 0 開始,且命名有差異。

3. 資源兼容性

(1)下表給出了 STM32F030 與 GD32E230 的資源對比總覽(以 STM32F030C8 和 GD32E230C8對比為例):

表 1 STM32F030 系列和 GD32E230 系列內部資源對比總覽

wKgZombbt8uAHInvAABhm4YCeBw706.png

(2)在外設邏輯地址上 GD32E230C8 和 STM32F030C8 也是相同的,如下表 2。

表 2 STM32F030C8 系列和 GD32E230C8 系列外設基地址對比

wKgZombbt9WAaB-HAAEFP_t2NWk774.png

(1) STM32F030 規格書上沒有 TIM2,但實際是有的,如果使用到這個隱藏資源需使用 GD32E230 的其他定時器替代。

4. 環境配置

本文基于Keil5.25版本進行移植,需提前準備GD32E230 IDE芯片插件,插件可到GD32MCU資料網站 gd32mcu.com 或他們的網盤 https://pan.baidu.com/s/1mhQsNpu 進行下載

(1) 安裝 GigaDevice.GD32E230_DFP.pack 后更改為 GD32E230 的對應型號,如圖 1

wKgaombbt_SAfwLqAAC5eIGmWik279.png

(2) 選擇好型號后先點擊 OK 然后再打開工程選項,切換至 C/C++選項卡。將 Warnings設置項選擇 AC5-like Warnings;Language C 設置為 C99;Language C++設置為 C++11;Misc Controls 如果添加了內容將其刪除。修改后如圖 2 紅框內容所示。

wKgaombbuA2AcaZxAACOuE-JSPI544.png

(3) 在 Debug 選項卡選擇對應的仿真器并在 Settings 里添加 GD32E230 的 Flash 下載算法。Utilities 選項卡中采用同樣設置。

5. 程序移植

對比上文內容可知 GD32E230C8 和 STM32F030C8 大部分外設功能、配置以及邏輯地址都是兼容的。所以如果僅只是從 STM32F030C8 上把代碼移植到 GD32E230C8 上,需改動的底層文件有 ADC 和 Flash、I2C,另外有細節設計差異需要調整 PWR 中進入 standby 的函數。下面詳細介紹一下如何對這兩部分進行修改。

5.1 ADC 外設庫修改

GD32E230C8 和 STM32F030C8 的 ADC 設計不同,實際和 STM32F103 配置相同。對此需要修改底層的 ADC 配置文件。雖然 ADC 設計上不相同,但其外設基地址還是相同的,也就是說只需要修改對應的外設配置函數,寄存器定義即可。對此有一個便捷的方法:可將 STM32F0xx標準庫中的stm32f0xx_adc.h 和 stm32f0xx_adc.c 文件內代碼替換為 STM32F10x 標準庫中stm32f10x_adc.h 和 stm32f10x_adc.c 里的代碼,修改 stm32f0xx.h 中的 ADC 寄存器結構體即可。

具體步驟如下:

(1) 將 stm32f10x_adc.c 中的代碼復制到 stm32f0xx_adc.c 中替換原始內容,將兩個頭文件聲明改回 0xx 的頭文件聲明,如圖 3。

wKgZombbuDmAcrFuAACAajPqN_g692.png

(2) 將替換后的 stm32f0xx_adc.c 中 void ADC_DeInit(ADC_TypeDef* ADCx)函數內除 ADC1外的代碼刪除。如圖 4。

wKgaombbuEeAO1Q3AADdbYhJvc0999.png

(3) 將 stm32f10x_adc.h 中的代碼復制到 stm32f0xx_adc.h 中替換原始內容,頭文件聲明改回 0xx 的頭文件聲明,如圖 5。

wKgaombbuFKAWNRhAABK2EIUStc166.png

(4) 將 stm32f10x.h 中的 ADC 寄存器結構體 ADC_TypeDef 復制到 stm32f0xx.h 中替換原有的 ADC_TypeDef,如圖 6。

wKgZombbuGOAN4tgAAEyFk6wFOM850.png

至此 ADC 外設的底層文件就移植完成,配置方法可參考 GD32E230 用戶手冊或者也可以直接參考 STM32F103 的 ADC 配置例程,功能上更加靈活。

E230 的 ADC 設計相比 STM32F072 更加靈活,在 F072 上 adc 通道只能配置成一個組且轉換順序只能按通道號順序來進行,在 E103 上 adc 通道可以分為兩個組且順序排號可以自由定義,以下舉例在移植后的程序中如何配置 adc 通道 14 進行連續轉換:

wKgZombbuHqAA-XjAACeEKRr2Lg651.png

5.2 I2C 外設庫修改

GD32E230C8 和 STM32F030C8 的 I2C 設計不同,實際和 STM32F103 配置相同,所以移植方式也是和 ADC 一樣,將 STM32F0xx 標準庫中的 stm32f0xx_i2c.h 和 stm32f0xx_i2c.c 文件內代碼替換為 STM32F10x 標準庫中 stm32f10x_i2c.h 和 stm32f10x_i2c.c 里的代碼,修改 stm32f0xx.h 中

的 ADC 寄存器結構體即可。具體步驟如下:

(1) 將 stm32f10x_i2c.c 中的代碼復制到 stm32f0xx_i2c.c 中替換原始內容,將兩個頭文件聲明改回 0xx 的頭文件聲明。

(2) 將 stm32f10x_i2c.h 中的代碼復制到 stm32f0xx_i2c.h 中替換原始內容,頭文件聲明改回 0xx 的頭文件聲明

(3) 將 stm32f10x.h 中的 I2C 寄存器結構體 I2C_TypeDef 復制到 stm32f0xx.h 中替換原有的 I2C_TypeDef至此 ADC 外設的底層文件就移植完成,配置方法可參考 GD32E230 用戶手冊或者也可以直接參考 STM32F103 的 I2C 配置例程。

5.3 Flash 外設庫修改

STM32F030 系列的 Flash 和選項字節編程是按照 16 位編程的,E230 僅支持 32 位和 64 位編程,所以 Flash 文件中所有操作選項字節的函數和 Flash 操作都需要調整,修改成 32 位操作。此外選項字節字節中無讀保護的值在 GD32E230 中是 A5,在 STM32F030 中是 AA。本人將需要修改的內容進行了整理,步驟如下:

(1) stm32f0xx_flash.h 中修改 OB_RDP_Level_0 宏定義為 0xA5,如圖 7。

wKgZombbuJ2ATd5TAAAtUGhPQVk216.png

(2) 修改 FLASH_OB_Erase 中寫選項字節的函數,原始代碼是直接對 16 位的結構體成員賦值,現將其修改為 32 位操作即可,做如圖 8 兩處改動。其他的所有操作選項字節函數都做類似的修改,不在一一進行說明。

wKgZombbuK6AfWieAADizSCqraI071.png

(3) stm32f0xx 固件庫中有兩個對 Flash 編程的函數接口:FLASH_ProgramWord 和FLASH_ProgramHalfWord;其中 FLASH_ProgramWord 中連續寫了兩次 16 位數據占滿了 4 個地址,這樣在 E230 上也是可以的,所以 FLASH_ProgramWord 不需要再做修改,當然也可以把連續寫兩次 16 為數據的操作改為直接寫 32 位數據。如果有調用 FLASH_ProgramHalfWord 需要修改驅動改為按字操作,或對該函數進行一點修改,在對目標地址寫入 16 位數據后再往后面地址填充一個 0xFFFF,修改內容如圖 9。

wKgaombbuM6AYPfXAACtxvSRUJ4120.png

在進行 Flash 編程時需注意,GD32E230 的 Flash 為 4 字節對齊,在 STM32F030 上可以對偶地址編程,移植到 GD32E230 后 Flash 編程的起始地址必須為 4 的整倍數!

5.4 pwr.c 進入 standby 模式函數修改

為在 standby 模式下達到最低功耗,進入 standby 前需手動關閉 HXTAL,如圖 10 在PWR_EnterSTANDBYMode 函數添加如下紅框代碼:

wKgaombbuOWALLY2AAC9Byxyj30046.png

6. 移植后應用注意事項

6.1 while 和 for 循環

GD32E230 和 STM32F030 工藝、內核、Flash 上都有區別,所以在相同主頻下代碼效率可能會有差異,應用中如果有軟件延時需要進行調整、或使用定時器等進行精準延時。

6.2 Flash

需再次強調:在進行 Flash 編程時需注意,GD32E230 的 Flash 為 4 字節對齊,在 STM32F030 上可以對偶地址編程,移植到 GD32E230 后 Flash 編程的起始地址必須為 4 的整倍數!正常情況編譯器會自動的各類型變量都按 4 字節對齊方式分配地址,但如果使用了指定地址的方式定義變量,需注意定義地址按 4 字節對齊地址。

6.3 Flash 和 DMA 操作時序

E230 是 M23 內核,和以往 GD 型號的 M3、M4 總線架構有區別,Flash 操作時 DMA 會出現阻塞,當 Flash 操作(主要是擦除時間比較久,編程操作時間短,每次編程間有間隔)時,最好暫停使用DMA 的外設,特別是 adc,避免 Flash 操作期間請求丟失導致后續搬運 buff 數據錯位。

6.4 功能升級

GD32E230 相比 STM32F030 很多外設功能有擴展升級,但基于 STM32F0xx 的代碼移植過來的應用程序沒有新功能 API,若希望發揮 E230 更多性能建議使用 GD 的官方固件庫進行開發。

教程GD32 MCU方案商聚沃科技原創發布,了解更多GD32 MCU教程,關注聚沃科技官網

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6023

    文章

    44377

    瀏覽量

    628538
  • 嵌入式
    +關注

    關注

    5046

    文章

    18821

    瀏覽量

    298675
  • STM32
    +關注

    關注

    2258

    文章

    10828

    瀏覽量

    352526
  • 開發板
    +關注

    關注

    25

    文章

    4771

    瀏覽量

    96196
  • GD32
    +關注

    關注

    7

    文章

    400

    瀏覽量

    23975
收藏 人收藏

    評論

    相關推薦

    GD32 MCU 移植教程】1、 GD32F10x 移植 GD32F30x

    應用程序移植新的微控制器。本應用筆記旨在幫助您快速將應用程序 GD32F10x 系列微控制器移植
    的頭像 發表于 08-30 09:52 ?1217次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>移植</b>教程】1、<b class='flag-5'>從</b> <b class='flag-5'>GD32F10</b>x <b class='flag-5'>移植</b><b class='flag-5'>到</b> <b class='flag-5'>GD32F</b>30x

    gd32e230 flash 模擬eeprom

    請問有沒有gd32e230 flash 模擬eeprom例程。我有一個stm32移植gd32
    發表于 09-03 07:36

    STM32F10x系列移植GD32F10x系列電子版

    STM32F10x系列移植GD32F10x系列
    發表于 05-31 09:22 ?0次下載

    GD32移植STM32開發平臺

    GD32移植STM32開發平臺
    發表于 12-02 14:51 ?28次下載
    <b class='flag-5'>GD32</b><b class='flag-5'>移植</b><b class='flag-5'>到</b><b class='flag-5'>STM32</b>開發平臺

    STM32F10x系列移植GD32F10x系列指導文檔

    STM32F10x系列移植GD32F10x系列
    發表于 12-03 16:29 ?6次下載

    AN011 GD32F10x系列移植GD32F30x系列

    AN011 GD32F10x系列移植GD32F30x系列
    發表于 02-23 18:59 ?2次下載
    AN011 <b class='flag-5'>GD32F10</b>x<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>

    AN047 GD32E103&C103系列移植GD32F30x系列

    AN047 GD32E103&C103系列移植GD32F30x系列
    發表于 02-23 18:59 ?0次下載
    AN047 <b class='flag-5'>GD32E</b>103&C103<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>

    AN046 GD32E230系列移植GD32F3x0系列

    AN046 GD32E230系列移植GD32F3x0系列
    發表于 02-23 19:00 ?0次下載
    AN046 <b class='flag-5'>GD32E230</b><b class='flag-5'>系列</b><b class='flag-5'>移植</b><b class='flag-5'>到</b><b class='flag-5'>GD32F</b>3x0<b class='flag-5'>系列</b>

    AN011 GD32F10x系列移植GD32F30x系列

    兆易創新AN011GD32F10x系列移植GD32F30x系列AN011
    發表于 10-19 17:26 ?3次下載

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

    GD32E503 系列GD 推出的 Cortex_M33 系列產品,該系列資源上與 GD32F
    的頭像 發表于 08-31 09:36 ?1050次閱讀
    【<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 系列

    移植 GD32F330 系列的需求,本文 檔專門針對既有的 GD32E230 代碼如何移植
    的頭像 發表于 09-03 10:05 ?426次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>移植</b>教程】5、<b class='flag-5'>GD32E230</b> <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 移植教程】6、GD32F1x0和GD32F3x0移植GD32E230

    和低成本,所以在存量客戶 中可能會有越來越多的客戶會有 GD32F1x0 和 GD32F3x0 移植
    的頭像 發表于 09-04 09:38 ?149次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>移植</b>教程】6、<b class='flag-5'>從</b><b class='flag-5'>GD32F</b>1x0和<b class='flag-5'>GD32F</b>3x0<b class='flag-5'>移植</b><b class='flag-5'>到</b><b class='flag-5'>GD32E230</b>

    GD32 MCU 移植教程】7、 GD32F10x 移植 GD32E103

    本應用筆記旨在幫助您快速將基于 GD32F10x 2.0 版本及以上固件庫開發的應用程序GD32F10x 系列微控制器移植
    的頭像 發表于 09-05 09:40 ?188次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>移植</b>教程】7、<b class='flag-5'>從</b> <b class='flag-5'>GD32F10</b>x <b class='flag-5'>移植</b><b class='flag-5'>到</b> <b class='flag-5'>GD32E</b>103

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

    、外設及性能對比以及 STM32F4xx 移植 GD32F4xx 的移植步驟,旨在讓開發者能
    的頭像 發表于 09-06 09:40 ?516次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>移植</b>教程】8、<b class='flag-5'>從</b> <b class='flag-5'>STM32F</b>4xx <b class='flag-5'>系列</b><b class='flag-5'>移植</b><b class='flag-5'>到</b> <b class='flag-5'>GD32F</b>4xx 系

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

    對比、外設及性能對比以及 STM32F10x 移植 GD32F30x 的移植步驟,旨在讓開發
    的頭像 發表于 09-07 09:57 ?156次閱讀
    【<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'>STM32F10</b>x <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>