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

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

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

【GD32 MCU 移植教程】3、從 STM32F10x 移植到 GD32E103 的移植說明

聚沃科技 ? 2024-09-01 10:42 ? 次閱讀

1. 前言

對于使用微控制器進(jìn)行產(chǎn)品開發(fā)的設(shè)計人員來說,因產(chǎn)品及功能升級,往往需要將一種微控制器替換成另一種微控制器,在保留既有功能的情況下增加新功能。為了更快地推出新產(chǎn)品,設(shè)計人員經(jīng)常要將應(yīng)用程序移植到新的微控制器。

本應(yīng)用筆記旨在幫助您快速將應(yīng)用程序從 STM32F10x 系列微控制器移植到 GD32E103 系列微控制器(基于 STM32F10x 標(biāo)準(zhǔn)庫 V3.5.0)。

GD32E103 和 STM32F10x 系列相比,考慮軟硬件兼容性,從 Flash 和 SRAM 容量,包括外設(shè)模塊的增強性能上來看,GD32E103 最接近 STM32F10x 互聯(lián)性。

開始前您需要安裝 GD32E103 關(guān)于 KEIL 或 IAR 的插件,在工程選項的器件條目中選擇 GD32E103對應(yīng)型號,添加 GD32E103 的 Flash 下載算法。

GD32E103 較 STM32F10x 具有以下優(yōu)點:

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

2、更高版本的內(nèi)核(Cortex M4 VS M3)

3、更低的功耗(Run Mode:28.6mA@120MHz VS 50mA@72MHz;Sleep Mode:20.8mA@120MHz VS 30mA@72MHz )

但需要注意的是,GD32E103 較 STM32F10x 少了 SDIO 功能,如果用戶使用到 SDIO 功能,從STM32F10x 到 GD32E103 的移植,顯然是不合適的。

2. 引腳兼容性

STM32F10x 與 GD32E103 在相同封裝下是 Pin To Pin 兼容的。但由于外設(shè)功能上的細(xì)微差別,兩者引腳定義有少許不同,如表 1 所示。注意:STM32F10x 外設(shè)編號從 1 開始,GD32E103 外設(shè)編號從 0 開始,且命名有差異。

表 1 STM32F10x 系列和 GD32E103 系列引腳區(qū)別

wKgaombT0LKAbKLrAAC3yY4rAjo076.pngwKgZombT0LaADCUgAAClEzOz6OU635.pngwKgZombT0LmAcJWRAADDqZOs1YM486.png

3. 內(nèi)部資源兼容性

下表給出了 STM32F10x 與 GD32E103 的資源對比總覽(以 STM32F103V8、STM32F105V8 和GD32E103V8 對比為例):

表 2 STM32F105 系列和 GD32E103 系列內(nèi)部資源對比總覽

wKgaombT0M6AbcGHAACM7xq0RNI262.png

4. 程序移植

4.1 時鐘移植

GD32E103 時鐘設(shè)置與 STM32F10x 互聯(lián)系列兼容,如從 STM32F103 移植到 GD32E103,IDE 需要做相關(guān)調(diào)整,具體過程如下:

(1) 使用 MDK 環(huán)境時:

在工程選項 C/C++選項卡中 Preprocessor Symbol Define 中加入 GD32F10X_CL 的宏定義;在工程選項 Device 中選擇原 MCU 對應(yīng)的互聯(lián)性型號,或?qū)?yīng)的 GD32E103 型號。

(2) 使用 IAR 環(huán)境時:

在 工 程 選 項 C/C++ Compiler 項 中 Preprocessor 選項卡下 Define Symbol 中加入GD32F10X_CL 的宏定義。

在工程選項 Device 中選擇原 MCU 對應(yīng)的互聯(lián)性型號,或?qū)?yīng)的 GD32E103 型號。

4.2 Flash 操作相關(guān)軟件移植

4.2.1 FLash 編程操作

STM32F10x 系列 MCU 僅支持 16 位半字編程,而 GD32E103 僅支持 32 位字和 64 位雙字編程,所以需要對 Flash 編程相關(guān)庫函數(shù)進(jìn)行更改。

(1) FLASH_ProgramWord 函數(shù)

wKgZombT0PKAbe4MAABbvZ4r2Ds074.png

說明:由原來的兩次半字編程改為一次字編程。

(2) FLASH_EnableWriteProtection 函數(shù)

wKgZombT0QCAWnhVAAF6MklXwbI281.png

(3) FLASH_ProgramOptionByteData 函數(shù)

wKgaombT0Q6AAP7EAAA0BCgCgMI114.png

說明:由原來的半字編程改為字編程,用戶需注意,選項字節(jié)需至少一次寫一個字,且目標(biāo)地址必須是 4 的

整數(shù)倍。

(4) FLASH_EraseOptionBytes 函數(shù)

wKgZombT0R6AHinsAAEebzlXYJA225.png

(5) FLASH_ReadOutProtection 函數(shù)

wKgaombT0TGANF3VAAE5eNnafdA842.png

(6) FLASH_UserOptionByteConfig 函數(shù)

wKgZombT0USAHz1cAAEW7Gn1Hg8407.png

注:以上代碼中的 CR_OPTWRE_Set 的定義是 STM32 固件庫中沒有的,需要用戶自行定義為:

#define CR_OPTWRE_Set ((uint32_t)0x00000200)

4.2.2 注意事項

STM32F10x 的互聯(lián)型和大容量型(因為 GD32E103 沒有大容量型,所以可不考慮)的 Flash 閃存頁大小為 2K,而 GD32E103 為 1K,所以用戶在調(diào)用頁擦除時要注意頁地址范圍。

5. 外設(shè)差異性

STM32F10x 與 GD32E103 在外設(shè)上基本是兼容的,但 GD32E103 較 STM32F10x 在很多外設(shè)上增加了部分功能,用戶可根據(jù)以下羅列出的外設(shè)差異性選擇是否使用這些功能。

5.1 模數(shù)轉(zhuǎn)換器 ADC

為減輕 CPU 的負(fù)擔(dān),GD32E103 較 STM32F10x 增加了片上硬件過采樣單元。它能夠處理多個轉(zhuǎn)換,并將多個轉(zhuǎn)換的結(jié)果取平均,得出一個 16 位寬的數(shù)據(jù)。 片上硬件過采樣單元是以降低數(shù)據(jù)輸出率為代價,換取較高的數(shù)據(jù)分辨率。 具體功能以及寄存器設(shè)置,請用戶參考 GD32E10x 用戶

手冊。

另外,由于兩款芯片的在 ADC 設(shè)計上的差異性,在移植到 GD32E103 時,ADC 使能之后,校準(zhǔn)之前,需加入 1ms 的延時,以便 ADC 穩(wěn)定后再進(jìn)行校準(zhǔn)。

5.2 通用同步異步收發(fā)器 USART

GD32E103 較 STM32F10x 在 USART 上增加了塊模式(STM32F10x 只支持字節(jié)模式)、數(shù)據(jù)極性設(shè)置、數(shù)據(jù)位反轉(zhuǎn)以及 TX、RX 引腳電平反轉(zhuǎn)等功能,因此,GD32E103 多了四個寄存器,分別為:USART_CTL3、USART_RT、USART_STAT1、USART_CHC。具體功能以及寄存器設(shè)置,請用戶參考 GD32E10x 用戶手冊。

5.3 內(nèi)部集成電路總線接口 I2C

GD32E103和STM32F10x的I2C都支持標(biāo)速(最高100KHz)和快速(最高400KHz),同時GD32E103可支持高速模式(最高 1MHz),要使能高速模式,需將 I2C_FMPCFG 寄存器的 FMPEN 置 1。具體功能以及寄存器設(shè)置,請用戶參考 GD32E10x 用戶手冊。

5.4 串行外設(shè)接口/片上音頻接口 SPI/I2S

GD32E103 和 STM32F10x 的 SPI/I2S 模塊差異性主要表現(xiàn)在 GD32E103 支持 SPI TI 模式、SPI NSS 脈沖模式和 SPI 四線功能(只有 SPI1),其中 SPI 的四線模式是用于控制四線 SPI Flash 外設(shè),此模式下,數(shù)據(jù)傳輸速率是普通模式下的 4 倍。具體功能以及寄存器設(shè)置,請用戶參考 GD32E10x 用戶手冊。

5.5 通用串行總線全速設(shè)備接口 USBFS

GD32E103 和 STM32F105/107 的 USBFS 一致,同時 GD32E103 較 STM32F105/107 相比多了IRC48M 的時鐘源可選擇。具體功能以及寄存器設(shè)置,請用戶參考 GD32E103 用戶手冊。

GD32E103 和 STM32F103 的 USB 模塊是不兼容的,如果用戶是從 STM32F103 移植而來,需要進(jìn)行代碼移植,具體請參考 STM32F103 與 STM32F105/107 的 USB 差異性。

6. 附錄:

(Flash 更改后的程序,用戶可直接復(fù)制替換原庫函數(shù))

0、在 stm32f10x_flash.c 中添加

#define CR_OPTWRE_Set ((uint32_t)0x00000200)

1、

FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data) { FLASH_Status status = FLASH_COMPLETE; __IO uint32_t tmp = 0; /* Check the parameters */ assert_param(IS_FLASH_ADDRESS(Address)); /* Wait for last operation to be completed */ status = FLASH_WaitForLastOperation(ProgramTimeout); if(status == FLASH_COMPLETE) { FLASH->CR |= CR_PG_Set; *(__IO uint32_t*)Address = (uint32_t)Data; /* Wait for last operation to be completed */ status = FLASH_WaitForLastOperation(ProgramTimeout); /* Disable the PG Bit */ FLASH->CR &= CR_PG_Reset; } /* Return the Program Status */ return status; }

2、

FLASH_Status FLASH_EnableWriteProtection(uint32_t FLASH_Pages) { uint16_t WRP0_Data = 0xFFFF, WRP1_Data = 0xFFFF, WRP2_Data = 0xFFFF, WRP3_Data = 0xFFFF; uint32_t temp1,temp2; FLASH_Status status = FLASH_COMPLETE; /* Check the parameters */ assert_param(IS_FLASH_WRPROT_PAGE(FLASH_Pages)); FLASH_Pages = (uint32_t)(~FLASH_Pages); WRP0_Data = (uint16_t)(FLASH_Pages & WRP0_Mask); WRP1_Data = (uint16_t)((FLASH_Pages & WRP1_Mask) >> 8); WRP2_Data = (uint16_t)((FLASH_Pages & WRP2_Mask) >> 16); WRP3_Data = (uint16_t)((FLASH_Pages & WRP3_Mask) >> 24); temp1 = (((uint32_t)WRP1_Data)<<16) | ((uint32_t)WRP0_Data); temp2 = (((uint32_t)WRP3_Data)<<16) | ((uint32_t)WRP2_Data); /* Wait for last operation to be completed */ status = FLASH_WaitForLastOperation(ProgramTimeout); if(status == FLASH_COMPLETE) { /* Authorizes the small information block programming */ FLASH->OPTKEYR = FLASH_KEY1; FLASH->OPTKEYR = FLASH_KEY2; while((FLASH->CR&CR_OPTWRE_Set)!=CR_OPTWRE_Set ) {} FLASH->CR |= CR_OPTPG_Set; if(temp1 != 0xFFFF) { //OB->WRP0 = temp1; *(__IO uint32_t*)0X1ffff808=temp1; /* Wait for last operation to be completed */ status = FLASH_WaitForLastOperation(ProgramTimeout); } if((status == FLASH_COMPLETE) && (temp2 != 0xFFFF)) { //OB->WRP1 = temp2; *(__IO uint32_t*)0X1ffff80c=temp2; /* Wait for last operation to be completed */ status = FLASH_WaitForLastOperation(ProgramTimeout); } if(status != FLASH_TIMEOUT) { /* if the program operation is completed, disable the OPTPG Bit */ FLASH->CR &= CR_OPTPG_Reset; } } /* Return the write protection operation Status */ return status; }

3、

FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint32_t Data) { FLASH_Status status = FLASH_COMPLETE; /* Check the parameters */ assert_param(IS_OB_DATA_ADDRESS(Address)); status = FLASH_WaitForLastOperation(ProgramTimeout); if(status == FLASH_COMPLETE) { /* Authorize the small information block programming */ FLASH->OPTKEYR = FLASH_KEY1; FLASH->OPTKEYR = FLASH_KEY2; while((FLASH->CR&CR_OPTWRE_Set)!=CR_OPTWRE_Set ) {} /* Enables the Option Bytes Programming operation */ FLASH->CR |= CR_OPTPG_Set; *(__IO uint32_t*)Address = Data; /* Wait for last operation to be completed */ status = FLASH_WaitForLastOperation(ProgramTimeout); if(status != FLASH_TIMEOUT) { /* if the program operation is completed, disable the OPTPG Bit */ FLASH->CR &= CR_OPTPG_Reset; } } /* Return the Option Byte Data Program Status */ return status; }

4、

FLASH_Status FLASH_EraseOptionBytes(void) { uint16_t temp_spc = RDP_Key; uint32_t temp; FLASH_Status status = FLASH_COMPLETE; /* Get the actual read protection Option Byte value */ if(FLASH_GetReadOutProtectionStatus() != RESET){ temp_spc = 0xbb; } /* Wait for last operation to be completed */ status = FLASH_WaitForLastOperation(EraseTimeout); if(status == FLASH_COMPLETE){ /* Authorize the small information block programming */ FLASH->OPTKEYR = FLASH_KEY1; FLASH->OPTKEYR = FLASH_KEY2; while((FLASH->CR&CR_OPTWRE_Set)!=CR_OPTWRE_Set ) {} /* if the previous operation is completed, proceed to erase the option bytes */ FLASH->CR |= CR_OPTER_Set; FLASH->CR |= CR_STRT_Set; /* Wait for last operation to be completed */ status = FLASH_WaitForLastOperation(EraseTimeout); if(status == FLASH_COMPLETE) { /* if the erase operation is completed, disable the OPTER Bit */ FLASH->CR &= CR_OPTER_Reset; /* Enable the Option Bytes Programming operation */ FLASH->CR |= CR_OPTPG_Set; /* Restore the last read protection Option Byte value */ // OB->RDP = (uint16_t)rdptmp; temp = ((uint32_t)temp_spc)|0xffff0000; *(__IO uint32_t*)0X1ffff800=temp; /* Wait for last operation to be completed */ status = FLASH_WaitForLastOperation(ProgramTimeout); if(status != FLASH_TIMEOUT) { /* if the program operation is completed, disable the OPTPG Bit */ FLASH->CR &= CR_OPTPG_Reset; } } else{ if (status != FLASH_TIMEOUT){ /* Disable the OPTPG Bit */ FLASH->CR &= CR_OPTPG_Reset; } } } /* Return the erase status */ return status; }

5、

FLASH_Status FLASH_ReadOutProtection(FunctionalState NewState) { uint16_t temp_spc; uint32_t temp; FLASH_Status status = FLASH_COMPLETE; /* Check the parameters */ assert_param(IS_FUNCTIONAL_STATE(NewState)); status = FLASH_WaitForLastOperation(EraseTimeout); if(status == FLASH_COMPLETE) { /* Authorizes the small information block programming */ FLASH->OPTKEYR = FLASH_KEY1; FLASH->OPTKEYR = FLASH_KEY2; while((FLASH->CR&CR_OPTWRE_Set)!=CR_OPTWRE_Set ) {} FLASH->CR |= CR_OPTER_Set; FLASH->CR |= CR_STRT_Set; /* Wait for last operation to be completed */ status = FLASH_WaitForLastOperation(EraseTimeout); if(status == FLASH_COMPLETE) { /* if the erase operation is completed, disable the OPTER Bit */ FLASH->CR &= CR_OPTER_Reset; /* Enable the Option Bytes Programming operation */ FLASH->CR |= CR_OPTPG_Set; if(NewState != DISABLE){ temp_spc = 0xBB; temp = ((uint32_t)temp_spc)|0xffff0000; } else{ temp_spc = (uint16_t)RDP_Key; temp = ((uint32_t)temp_spc)|0xffff0000; } *(__IO uint32_t*)0x1ffff800=temp; /* Wait for last operation to be completed */ status = FLASH_WaitForLastOperation(EraseTimeout); if(status != FLASH_TIMEOUT){ FLASH->CR &= CR_OPTPG_Reset; } } else { if(status != FLASH_TIMEOUT){ /* Disable the OPTER Bit */ FLASH->CR &= CR_OPTER_Reset; } } } /* Return the protection operation Status */ return status; }

6、

FLASH_Status FLASH_UserOptionByteConfig(uint16_t OB_IWDG,uint16_t OB_STOP, uint16_t OB_STDBY) { FLASH_Status status = FLASH_COMPLETE; uint16_t temp_spc = RDP_Key; uint32_t temp; /* Get the actual read protection Option Byte value */ if(FLASH_GetReadOutProtectionStatus() != RESET) { temp_spc = 0xbb; } /* Check the parameters */ assert_param(IS_OB_IWDG_SOURCE(OB_IWDG)); assert_param(IS_OB_STOP_SOURCE(OB_STOP)); assert_param(IS_OB_STDBY_SOURCE(OB_STDBY)); /* Authorize the small information block programming */ FLASH->OPTKEYR = FLASH_KEY1; FLASH->OPTKEYR = FLASH_KEY2; while((FLASH->CR&CR_OPTWRE_Set)!=CR_OPTWRE_Set ) {} /* if the previous operation is completed, proceed to erase the option bytes */ FLASH->CR |= CR_OPTER_Set; FLASH->CR |= CR_STRT_Set; /* Wait for last operation to be completed */ status = FLASH_WaitForLastOperation(ProgramTimeout); if(status == FLASH_COMPLETE) { /* if the erase operation is completed, disable the OPTER Bit */ FLASH->CR &= CR_OPTER_Reset; /* Enable the Option Bytes Programming operation */ FLASH->CR |= CR_OPTPG_Set; temp =OB_IWDG | (uint16_t)(OB_STOP | (uint16_t)(OB_STDBY | ((uint16_t)0xF8))); temp=temp<<16; temp = ((uint32_t)temp|temp_spc); *(__IO uint32_t*)0x1ffff800=temp; /* Wait for last operation to be completed */ status = FLASH_WaitForLastOperation(ProgramTimeout); if(status != FLASH_TIMEOUT) { /* if the program operation is completed, disable the OPTPG Bit */ FLASH->CR &= CR_OPTPG_Reset; } } /* Return the Option Byte program Status */ return status; }

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

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

    關(guān)注

    6030

    文章

    44489

    瀏覽量

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

    關(guān)注

    5059

    文章

    18973

    瀏覽量

    301999
  • STM32
    +關(guān)注

    關(guān)注

    2264

    文章

    10854

    瀏覽量

    354289
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4895

    瀏覽量

    97057
  • GD32
    +關(guān)注

    關(guān)注

    7

    文章

    403

    瀏覽量

    24106
收藏 人收藏

    評論

    相關(guān)推薦

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

    應(yīng)用程序移植新的微控制器。本應(yīng)用筆記旨在幫助您快速將應(yīng)用程序 GD32F10x 系列微控制器移植
    的頭像 發(fā)表于 08-30 09:52 ?1397次閱讀
    【<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'>GD32F10x</b> <b class='flag-5'>移植</b><b class='flag-5'>到</b> <b class='flag-5'>GD32F30x</b>

    STM32F10x系列軟件移植GD32F1x0系列操作說明

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

    STM32F10x系列移植GD32F10x系列電子版

    STM32F10x系列移植GD32F10x系列電子版
    發(fā)表于 05-31 09:22 ?0次下載

    GD32移植STM32開發(fā)平臺

    GD32移植STM32開發(fā)平臺
    發(fā)表于 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>開發(fā)平臺

    STM32F10x系列移植GD32F10x系列指導(dǎo)文檔

    STM32F10x系列移植GD32F10x系列指導(dǎo)文檔
    發(fā)表于 12-03 16:29 ?6次下載

    AN047 GD32E103&C103系列移植GD32F30x系列

    AN047 GD32E103&C103系列移植GD32F30x系列
    發(fā)表于 02-23 18:59 ?0次下載
    AN047 <b class='flag-5'>GD32E103</b>&C<b class='flag-5'>103</b>系列<b class='flag-5'>移植</b><b class='flag-5'>到</b><b class='flag-5'>GD32F30x</b>系列

    AN047 GD32E103&C103移植GD32F30x

    兆易創(chuàng)新AN047GD32E103&C103系列移植GD32F30x系列AN047GD32E103&C103系列
    發(fā)表于 10-19 17:26 ?3次下載

    AN011 GD32F10x系列移植GD32F30x系列

    兆易創(chuàng)新AN011GD32F10x系列移植GD32F30x系列AN011GD32F10x系列移植
    發(fā)表于 10-19 17:26 ?3次下載

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

    GD32E503 系列是 GD 推出的 Cortex_M33 系列產(chǎn)品,該系列資源上與 GD32F303 兼容度非常高,本應(yīng)用筆記旨在幫助您快速將應(yīng)用程序
    的頭像 發(fā)表于 08-31 09:36 ?1306次閱讀
    【<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 代碼如何移植
    的頭像 發(fā)表于 09-03 10:05 ?823次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>移植</b>教程】5、<b class='flag-5'>GD32E</b>230 系列<b class='flag-5'>移植</b><b class='flag-5'>到</b> <b class='flag-5'>GD32F</b>330 系列

    GD32 MCU 移植教程】6、GD32F1x0和GD32F3x0移植GD32E230

    和低成本,所以在存量客戶 中可能會有越來越多的客戶會有 GD32F1x0 和 GD32F3x0 移植
    的頭像 發(fā)表于 09-04 09:38 ?381次閱讀
    【<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'>GD32F1x</b>0和<b class='flag-5'>GD32F3x</b>0<b class='flag-5'>移植</b><b class='flag-5'>到</b><b class='flag-5'>GD32E</b>230

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

    本應(yīng)用筆記旨在幫助您快速將基于 GD32F10x 2.0 版本及以上固件庫開發(fā)的應(yīng)用程序GD32F10x 系列微控制器移植
    的頭像 發(fā)表于 09-05 09:40 ?380次閱讀
    【<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'>GD32F10x</b> <b class='flag-5'>移植</b><b class='flag-5'>到</b> <b class='flag-5'>GD32E103</b>

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

    、外設(shè)及性能對比以及 STM32F4xx 移植 GD32F4xx 的移植步驟,旨在讓開發(fā)者能
    的頭像 發(fā)表于 09-06 09:40 ?881次閱讀
    【<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'>GD32F</b>4xx 系

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

    對比、外設(shè)及性能對比以及 STM32F10x 移植 GD32F30x移植步驟,旨在讓開發(fā)
    的頭像 發(fā)表于 09-07 09:57 ?452次閱讀
    【<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'>STM32F10x</b> 系列<b class='flag-5'>移植</b><b class='flag-5'>到</b> <b class='flag-5'>GD32F30x</b> 系列

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

    GD32E230 對比 STM32F030 有著很好的兼容性和更高的性價比,內(nèi)核和外設(shè)都有所增強。本人曾做過產(chǎn)品的 MCU 替換,將基于 STM32F0xx 1.5.0 固件庫的應(yīng)用程
    的頭像 發(fā)表于 09-07 10:24 ?482次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>移植</b>教程】<b class='flag-5'>10</b>、<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'>GD32E</b>230系列