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

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

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

GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)篇) 第20章 GD32的存儲結(jié)構(gòu)

嵌入式大雜燴 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2023-06-03 09:12 ? 次閱讀

開發(fā)環(huán)境:

MDK:Keil 5.30

開發(fā)板:GD32F207I-EVAL

MCU:GD32F207IK

1 GD32存儲結(jié)構(gòu)的工作原理

1.1 Cortex-M內(nèi)核的存儲器映射

存儲器映射是指把芯片中或芯片外的FLASH,RAM,外設(shè),BOOTBLOCK等進(jìn)行統(tǒng)一編址。即用地址來表示對象。這個地址絕大多數(shù)是由廠家規(guī)定好的,用戶只能用而不能改。用戶只能在掛外部RAM或FLASH的情況下可進(jìn)行自定義。

如下圖,是Cortex-M3存儲器映射結(jié)構(gòu)圖。

1684499765582h595y8083z

Cortex-M3是32位的內(nèi)核,因此其PC指針可以指向2^32=4G的地址空間,也就是0x0000_0000 - 0xFFFF_FFFF這一大塊空間。根據(jù)圖中描述,Cortex-M3內(nèi)核將0x0000_0000 - 0xFFFF_FFFF這塊4G大小的空間分成8大塊:代碼、SRAM、外設(shè)、外部RAM、外部設(shè)備、專用外設(shè)總線-內(nèi)部、專用外設(shè)總線-外部、特定廠商等,因此使用該內(nèi)核的設(shè)計者必須按照這個進(jìn)行各自芯片的存儲器結(jié)構(gòu)設(shè)計。

1.2 GD32存儲器結(jié)構(gòu)

首先,我們對比一下Cortex-M3存儲器結(jié)構(gòu)和GD32存儲器結(jié)構(gòu):

C:\\\\Users\\\\BruceOu\\\\Desktop\\\\11.jpg

圖中可以很清晰的看到,GD32的存儲器結(jié)構(gòu)和Cortex-M3的很相似,不同的是,GD32加入了很多實(shí)際的東西,如:Flash、SRAM等。只有加入了這些東西,才能成為一個擁有實(shí)際意義的、可以工作的處理芯片-GD32。

GD32的存儲器地址空間被劃分為大小相等的8塊區(qū)域,每塊區(qū)域大小為512MB。

對GD32存儲器知識的掌握,實(shí)際上就是對Flash和SRAM這兩個區(qū)域知識的掌握。

2 FLASH讀寫數(shù)據(jù)

2.1 GD32的Flash

GD32的Flash,嚴(yán)格說,應(yīng)該是Flash模塊。該Flash模塊包括:Flash主存儲區(qū)(Main memory)、Flash信息區(qū)(Information block),以及Flash存儲接口寄存器區(qū)(Flash memory interface)。三個組成部分分別在0x0000 0000 - 0xFFFF FFFF不同的區(qū)域,GD32F2的Flash結(jié)構(gòu)如下表所示。

1684499766584ucx37erq24

【注】信息塊存儲了boot loader,不能被用戶編程或擦除。

GD32的閃存模塊由:主存儲閃存塊、信息塊和選項(xiàng)字節(jié)塊3部分組成。

主存儲器 ,該部分用來存放代碼和數(shù)據(jù)常數(shù)(如加const類型的數(shù)據(jù))。對于主存儲閃存容量不多于512KB的GD32F20x_CL,閃存頁大小為2KB。對于主存儲閃存容量不少于768KB的GD32F20x_CL,使用了兩片閃存;前512KB容量在第一片閃存(bank0)中,后續(xù)的容量在第二片閃存(bank1)中。其中bank0的閃存頁大小為2KB, bank1的閃存頁大小為4KB。主存儲閃存的每頁都可以單獨(dú)擦除。

__信息__塊,是用來存儲GD自帶的啟動程序,用于串口下載,當(dāng)B0接3.3V,B1接GND時,運(yùn)行的就這部分代碼,用戶選擇字節(jié),則一般用于配置保護(hù)等功能。

選項(xiàng)字節(jié)塊 ,該部分用于控制閃存儲器讀取等,是整個閃存儲器的控制機(jī)構(gòu)。

對于主存儲器和信息塊的寫入有內(nèi)嵌的閃存編程管理;編程與擦除的高壓由內(nèi)部產(chǎn)生。

在執(zhí)行閃存寫操作時,任何對閃存的讀操作都會鎖定總線,在寫完成后才能正確進(jìn)行,在進(jìn)行讀取或擦除操作時,不能進(jìn)行代碼或者數(shù)據(jù)的讀取操作。

下面對GD32的存儲器進(jìn)行總結(jié)。

C:\\\\Users\\\\ouxiaolong\\\\Desktop\\\\zaszddf.jpg

圖中淡藍(lán)色就是你需要知道的。

  • Peripherals:外設(shè)的存儲器映射,對該區(qū)域操作,就是對相應(yīng)的外設(shè)進(jìn)行操作;
  • SRAM:運(yùn)行時臨時存放代碼的地方;
  • Flash:存放代碼的地方;
  • System Memory:GD32出廠時自帶的你只能使用,不能寫或擦除;
  • Option Bytes:可以按照用戶的需要進(jìn)行配置(如配置看門狗硬件實(shí)現(xiàn)還是軟件實(shí)現(xiàn));

今后,你的編寫代碼、程序運(yùn)行、寄存器設(shè)置、ICP、IAP都依靠這些東西。

2.2 FLASH讀寫實(shí)現(xiàn)

GD32F20x 系列產(chǎn)品的片上 Flash 起始地址時 0x0800 0000,最大容量可達(dá) 3072 KB。讀操作為 0 等待,可支持字節(jié)、半字(16 bits)和字(32 bits)訪問。 Flash 編程以半字(16 bits)或字(32bits)為單位。擦除可以以頁(page)為單位,也可以進(jìn)行全片擦除(information blocks 除外)。

Flash的寄存器有很多,當(dāng)時GD的工程師已經(jīng)封裝好了,直接用就可以,我這里就不在貼出來了。

Flash操作很簡單,我們將數(shù)據(jù)寫入到Flash中,再將其讀出來。主要有以下步驟:

1.Flash解鎖操作

2.清除Flash標(biāo)志

3.頁擦除

4.讀寫操作

5.鎖定

核心代碼如下:

#define FLASH_ADR 0x0807F800

/**
  * @brief  flash test
  * @param  WriteAddr, InData
  * @retval OutData
  */
uint32_t flash_test(uint32_t WriteAddr, uint32_t InData)
{
    uint32_t OutData = 0;

    //解鎖
    fmc_unlock();
    //清除標(biāo)志位
    fmc_flag_clear(FMC_FLAG_BANK0_PGERR | FMC_FLAG_BANK0_WPERR | FMC_FLAG_BANK0_END | FMC_FLAG_BANK1_PGERR | FMC_FLAG_BANK1_WPERR | 
    FMC_FLAG_BANK1_END);
    //要擦出頁的起始地址
    fmc_page_erase(WriteAddr);
    //寫數(shù)據(jù)
    fmc_word_program(WriteAddr, InData);

    //鎖定
    fmc_lock();

    OutData=(*(__IO uint32_t*)(WriteAddr));
    return OutData;
}

程序就不講了,這里需要注意一個C語言的知識點(diǎn)。

OutData=(*(__IO uint32_t*)(WriteAddr));

這一句很多新手很懵逼,也就是從一個地址中讀取數(shù)據(jù),多看看指針相關(guān)的知識就好理解了。

主函數(shù)如下:

/*
    brief      main function
    param[in]  none
    param[out] none
    retval     none
*/
int main(void)
{
    uint32_t InData = 12345678;
    uint32_t OutData;

    // systick init
    sysTick_init();

    //usart init 115200 8-N-1
    com_init(COM1, 115200, 0, 1);

    // led1 init
    led_init(LED1);

    printf("InData = %d\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\r\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",InData);

    // flash test
    OutData= flash_test(FLASH_ADR, InData);

    printf("OutData = %d\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\r\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n",OutData);

    if(OutData == InData)
    {
        printf("Flash test success !\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\r\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n");
    }
    else
    {
        printf("Flash test fail !\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\r\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n");
    }
    while(1)
    {
        led_on(LED1);   // 亮
        delay_ms(1000);
        led_off(LED1);   // 滅 
        delay_ms(1000);
    }
}

2.3 實(shí)驗(yàn)結(jié)果

將程序邊看一完成后下載到板子中,通過串口助手,按下板子的復(fù)位按鍵可以看到如下現(xiàn)象。

168449976724761wuxzkxp2

3 SRAM啟動

3.1 GD32的啟動模式

首先要回顧一下GD32的啟動模式,因?yàn)閱幽J經(jīng)Q定了向量表的位置,GD32有三種啟動模式:

1)主閃存存儲器(Main Flash)啟動:從GD32內(nèi)置的Flash啟動(0x0800 0000-0x0807 FFFF),一般我們使用JTAG或者SWD模式下載程序時,就是下載到這個里面,重啟后也直接從這啟動程序。以0x08000000 對應(yīng)的內(nèi)存為例,則該塊內(nèi)存既可以通過0x00000000 操作也可以通過0x08000000 操作,且都是操作的同一塊內(nèi)存。

2)系統(tǒng)存儲器(System Memory)啟動:從系統(tǒng)存儲器啟動(0x1FFFF000 - 0x1FFF F7FF),這種模式啟動的程序功能是由廠家設(shè)置的。一般來說,我們選用這種啟動模式時,是為了從串口下載程序,因?yàn)樵趶S家提供的ISP程序中,提供了串口下載程序的固件,可以通過這個ISP程序?qū)⒂脩舫绦蛳螺d到系統(tǒng)的Flash中。以0x1FFFFFF0對應(yīng)的內(nèi)存為例,則該塊內(nèi)存既可以通過0x00000000 操作也可以通過0x1FFFFFF0操作,且都是操作的同一塊內(nèi)存。

3)片上SRAM啟動:從內(nèi)置SRAM啟動(0x2000 0000-0x3FFFFFFF),既然是SRAM,自然也就沒有程序存儲的能力了,這個模式一般用于程序調(diào)試。SRAM 只能通過0x20000000進(jìn)行操作,與上述兩者不同。從SRAM 啟動時,需要在應(yīng)用程序初始化代碼中重新設(shè)置向量表的位置。

用戶可以通過設(shè)置BOOT0和BOOT1的引腳電平狀態(tài),來選擇復(fù)位后的啟動模式。如下圖所示:

16844997675999ih3hfv9z9

啟動模式只決定程序燒錄的位置 ,加載完程序之后會有一個重映射(映射到0x00000000地址位置);真正產(chǎn)生復(fù)位信號的時候,CPU還是從開始位置執(zhí)行。

值得注意的是GD32上電復(fù)位以后,代碼區(qū)都是從0x00000000開始的,三種啟動模式只是將各自存儲空間的地址映射到0x00000000中。

3.2 GD32的SRAM

不同類型的Cortex-M單片機(jī)的SRAM大小是不一樣的,但是他們的起始地址都是0x2000 0000,終止地址都是0x2000 0000+其固定的容量大小。

SRAM的理解比較簡單,其作用是用來存取各種動態(tài)的輸入輸出數(shù)據(jù)、中間計算結(jié)果以及與外部存儲器交換的數(shù)據(jù)和暫存數(shù)據(jù)。設(shè)備斷電后,SRAM中存儲的數(shù)據(jù)就會丟失。

GD32F20x 系列產(chǎn)品的片上 SRAM 起始地址是 0x2000 0000,最大容量可達(dá) 384KB,可支持字節(jié)、半字(16bits)和字(32bits)訪問。 片上 SRAM 被分為 SRAM0、 SRAM1 和 SRAM2 等三個模塊,且每個模塊都有一個與 AHB 總線矩陣連接的專用接口,這意味著它們可以被同時訪問。

模塊 容量 地址范圍
SRAM1 112KB 0x2000 0000 ~
0x2001 BFFF
SRAM2 16KB 0x2001 C000 ~
0x2001 FFFF
SRAM3 256KB 0x2002 0000 ~
0x2005 FFFF

3.3 片上SRAM啟動實(shí)現(xiàn)

在使用片上SRAM調(diào)試之前,需要了解為何要使用片上SARM來啟動程序,因此GD32的片上Flash的擦寫次數(shù)有限,若超過最大擦除次數(shù)則會損壞內(nèi)部Flash,因此在平時的程序調(diào)試階段,最好使用SRAM啟動。

總的來說,SRAM啟動程序有如下用途:

1.調(diào)試階段,需要頻繁更新程序,可以SRAM啟動,加快調(diào)試,減少flash擦寫損耗

2.程序SWD/JTAG接口已經(jīng)配置為普通端口,程序啟動后無法程序更新,可在SRAM中啟動后,再更新flash程序

3.程序已經(jīng)開啟了讀保護(hù),可在SRAM啟動后,進(jìn)行讀保護(hù)關(guān)閉

片上SRAM啟動實(shí)現(xiàn)的方法很簡單,這里以GDF207+Keil5舉例,實(shí)現(xiàn)方法如下:

1.修改內(nèi)存分配

修改了內(nèi)存分配,也就是修改分散加載文件xxx.sct文件。

16844997678613pbroii5be

修改后再次生成工程,分散文件也會修改。

1684499768136mcxb3il87a

下面談?wù)凷RAM參數(shù)的分配,首先確定MCU的RAM大小,筆者使用的MCU是GD32F207,因此SRAM大小是256KB,然后還需要根據(jù)程序的編譯大小來分配SRAM空間。

1684499768519imq0kzsipv

如果想方便點(diǎn)可以直接看MAP文件。

16844997687846pfdozcr9u

FLASH和RAM的大小分別如下:

Flash = Code + RO Data + RW Data = 3.88KB(3968)

RAM = RW-data + ZI-data=8.07KB(8264)

因此筆者這里分配空間如下:

IROM1地址為0x2000 0000, 大小是0x10000=65536=64kB

IRAM1地址為0x2000 3000, 大小是0x20000=131072=128kB

當(dāng)然啦,SRAM空間分配需要根據(jù)自己的 MCU來決定。

2.修改debug配置

新建RAM.ini文件,配置如下:

/*----------------------------------------------------------------------------
 * Name:    RAM.ini
 * Purpose: RAM Debug Initialization File
 * Note(s):
 *----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
  Setup()  configure PC & SP for RAM Debug
 *----------------------------------------------------------------------------*/
FUNC void Setup (void) {
  SP = _RDWORD(0x20000000);          // Setup Stack Pointer
  PC = _RDWORD(0x20000004);          // Setup Program Counter
  _WDWORD(0xE000ED08, 0x20000000);   // Setup Vector Table Offset Register
}

FUNC void OnResetExec (void)  {      // executes upon software RESET
  Setup();                           // Setup for Running
}

load %L incremental

Setup();                             // Setup for Running

g, main

然后加載進(jìn)來。

168449976904471crcriy6z

RAM.ini文件主要是初始化SP和PC指針。Cortex-M3復(fù)位時會從0x00000000和0x00000004的相對位置取出MSP初值以及將復(fù)位向量地址賦給PC,在SRAM中的絕對位置就是0x20000000和0x20000004。GD32F207需要手動配置。

C:\\\\Users\\\\BruceOu\\\\Desktop\\\\1.png

3.修改下載配置

需要把程序下載到SRAM,修改相應(yīng)的下載地址。

1684499769605bhv2p1ahoz

4.修改中斷向量表指針

由啟動文件可知,程序啟動首先執(zhí)行Reset_Handler函數(shù),SRAM啟動硬件強(qiáng)制將PC指針賦值為0x200001E0,PC指針加1開始執(zhí)行啟動文件,故Reset_Handler函數(shù)的運(yùn)行地址需為0x200001E1才行,否則程序就會跑飛。

因此需要在中斷向量表的末尾添加SPACE 0x96。

1684499769910zngknxcfmo

同時在在main函數(shù)中添加設(shè)置中斷向量表以及系統(tǒng)初化函數(shù)。

nvic_vector_table_set(NVIC_VECTTAB_RAM,0x00);

SystemInit();

5.修改啟動模式

這里選擇SRAM啟動,因此BOOT0->1 BOOT1->1。

最后編譯下載程序,然后就可以運(yùn)行程序了。

1684499770201dea23o8tko

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

    關(guān)注

    10

    文章

    1614

    瀏覽量

    147655
  • 存儲器
    +關(guān)注

    關(guān)注

    38

    文章

    7434

    瀏覽量

    163519
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1364

    瀏覽量

    114445
  • Cortex-M
    +關(guān)注

    關(guān)注

    2

    文章

    227

    瀏覽量

    29708
  • GD32
    +關(guān)注

    關(guān)注

    7

    文章

    403

    瀏覽量

    24111
收藏 人收藏

    評論

    相關(guān)推薦

    GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)) 14 內(nèi)部溫度傳感器

    GD32 有一個內(nèi)部的溫度傳感器,可以用來測量 CPU 及周圍的溫度(TA)。該溫度傳感器在內(nèi)部和 ADCx_IN16 輸入通道相連接,此通道把傳感器輸出的電壓轉(zhuǎn)換成數(shù)字值。溫度傳感器模擬輸入
    的頭像 發(fā)表于 05-17 08:58 ?5172次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b><b class='flag-5'>指南</b>(基礎(chǔ)<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>14<b class='flag-5'>章</b> 內(nèi)部溫度傳感器

    GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)) 16 RTC

    開發(fā)環(huán)境: MDK:Keil 5.30 開發(fā)板:GD32F207I-EVAL MCU:GD32F207IK 1 RTC工作原理 1.1 RTC簡介
    的頭像 發(fā)表于 05-18 22:14 ?6972次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b><b class='flag-5'>指南</b>(基礎(chǔ)<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>16<b class='flag-5'>章</b> RTC

    GD32和STM32有哪些不同的地方

    一、前言GD32是國內(nèi)開發(fā)的一款單片機(jī),據(jù)說開發(fā)的人員是來自ST公司的,GD32也是以STM32作為模板做出來的。所以GD32和STM32有
    發(fā)表于 08-09 07:03

    什么是GD32

    一、前言什么GD32GD32是國內(nèi)開發(fā)的一款單片機(jī),據(jù)說開發(fā)的人員是來自ST公司的,GD32也是以STM32作為模板做出來的。所以
    發(fā)表于 08-12 07:46

    GD32 MCU原理及固件庫開發(fā)指南》+讀后感

    2介紹GD32 MCU快速入門與開發(fā)平臺搭建的方法,包括對軟硬件開發(fā)平臺、調(diào)試工具、GD32
    發(fā)表于 06-06 21:52

    GD32和STM32的區(qū)別

    一、前言GD32是國內(nèi)開發(fā)的一款單片機(jī),據(jù)說開發(fā)的人員是來自ST公司的,GD32也是以STM32作為模板做出來的。所以GD32和STM32有
    發(fā)表于 11-18 20:51 ?47次下載
    <b class='flag-5'>GD32</b>和STM32的區(qū)別

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

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

    GD32選型手冊

    GD32選型手冊
    發(fā)表于 06-17 14:49 ?67次下載

    STM32、GD32、ESP32的區(qū)別

    GD32 是國產(chǎn)單片機(jī),據(jù)說開發(fā)人員來自ST公司,GD32 也是以 STM32 作為模板做出來的。所以 GD32 和 STM32 有很多地方都是一樣的,不過
    的頭像 發(fā)表于 04-12 09:51 ?2994次閱讀

    GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)) 19 程序加密

    GD32通過讀取芯片唯一ID號來實(shí)現(xiàn)程序的保護(hù),防止被抄襲。96位的產(chǎn)品唯一身份標(biāo)識所提供的參考號碼對任意一個GD32微控制器
    的頭像 發(fā)表于 05-20 09:10 ?4054次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b><b class='flag-5'>指南</b>(基礎(chǔ)<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>19<b class='flag-5'>章</b> 程序加密

    GD32和AT32哪個好?

    GD32和AT32哪個好? GD32和AT32是兩種不同的微控制器型號,它們都是國內(nèi)開發(fā)的芯片。GD32系列由國內(nèi)芯片制造商GigaDevice Semiconductor
    的頭像 發(fā)表于 08-16 11:32 ?2269次閱讀

    GD32與STM32兼容嗎?

    GD32與STM32兼容嗎? GD32與STM32是兩個不同的微控制器系列,是由兩個不同的公司設(shè)計和生產(chǎn)的。GD32系列是由國內(nèi)的長沙國芯微電子設(shè)計和生產(chǎn)的,而STM32系列則是由歐洲
    的頭像 發(fā)表于 08-16 11:32 ?2806次閱讀

    STM32與GD32橫向?qū)Ρ葏^(qū)別

    GD32 是國產(chǎn)單片機(jī),據(jù)說開發(fā)人員來自ST公司,GD32 也是以 STM32 作為模板做出來的。所以 GD32 和 STM32 有很多地方都是一樣的
    的頭像 發(fā)表于 09-13 11:47 ?3532次閱讀
    STM32與<b class='flag-5'>GD32</b>橫向?qū)Ρ葏^(qū)別

    GD32如何替換STM32?

    GD32如何替換STM32?
    的頭像 發(fā)表于 09-18 10:58 ?2079次閱讀
    <b class='flag-5'>GD32</b>如何替換STM32?

    GD32 MCU入門教程】GD32 MCU GPIO 結(jié)構(gòu)與使用注意事項(xiàng)

    本文是專門為基于GD32 MCU開發(fā)的工程設(shè)計人員提供,主要介紹了GPIO的功能配置、內(nèi)部結(jié)構(gòu)以及在不同場景使用時的注意事項(xiàng),旨在幫助GD32 MCU
    的頭像 發(fā)表于 09-07 10:34 ?521次閱讀
    【<b class='flag-5'>GD32</b> MCU入門教程】<b class='flag-5'>GD32</b> MCU GPIO <b class='flag-5'>結(jié)構(gòu)</b>與使用注意事項(xiàng)