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

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

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

GD32F303固件庫(kù)開(kāi)發(fā)(9)----USART通過(guò)DMA收發(fā)

嵌入式單片機(jī)MCU開(kāi)發(fā) ? 來(lái)源:嵌入式單片機(jī)MCU開(kāi)發(fā) ? 作者:嵌入式單片機(jī)MC ? 2022-11-29 16:23 ? 次閱讀

概述

本章主要配置printf進(jìn)行打印。 查閱手冊(cè)可以得知,PA9、PA10為串口0的輸出和輸入口。需要GD樣片的可以加群申請(qǐng):615061293。

在這里插入圖片描述

硬件準(zhǔn)備

這里準(zhǔn)備了1塊開(kāi)發(fā)板進(jìn)行驗(yàn)證,分別是GD32303C_START開(kāi)發(fā)板。

在這里插入圖片描述

DMA

DMA 控制器提供了一種硬件的方式在外設(shè)和存儲(chǔ)器之間或者存儲(chǔ)器和存儲(chǔ)器之間傳輸數(shù)據(jù),而無(wú)需 CPU 的介入,從而使 CPU 可以專注在處理其他系統(tǒng)功能上。DMA 控制器有 12 個(gè)通道(DMA0 有 7 個(gè)通道,DMA1 有 5 個(gè)通道)。每個(gè)通道都是專門用來(lái)處理一個(gè)或多個(gè)外設(shè)的存儲(chǔ)器訪問(wèn)請(qǐng)求的。DMA 控制器內(nèi)部實(shí)現(xiàn)了一個(gè)仲裁器,用來(lái)仲裁多個(gè) DMA 請(qǐng)求的優(yōu)先級(jí)。 DMA 控制器和 Cortex?-M4 內(nèi)核共享系統(tǒng)總線。當(dāng) DMA 和 CPU 訪問(wèn)同樣的地址空間時(shí),DMA 訪問(wèn)可能會(huì)阻擋 CPU 訪問(wèn)系統(tǒng)總線幾個(gè)總線周期??偩€矩陣中實(shí)現(xiàn)了循環(huán)仲裁算法來(lái)分配 DMA 與 CPU 的訪問(wèn)權(quán),它可以確保 CPU 得到至少一半的系統(tǒng)總線帶寬。 主要特性:

  1. 傳輸數(shù)據(jù)長(zhǎng)度可編程配置,最大到 65536;
  2. 12 個(gè)通道,并且每個(gè)通道都可配置(DMA0 有 7 個(gè)通道,DMA1 有 5 個(gè)通道);
  3. AHB 和 APB 外設(shè),片上閃存和 SRAM 都可以作為訪問(wèn)的源端和目的端;
  4. 每個(gè)通道連接固定的硬件 DMA 請(qǐng)求;
  5. 支持軟件優(yōu)先級(jí)(低、中、高、極高)和硬件優(yōu)先級(jí)(通道號(hào)越低,優(yōu)先級(jí)越高);
  6. 存儲(chǔ)器和外設(shè)的數(shù)據(jù)傳輸寬度可配置:字節(jié),半字,字;
  7. 存儲(chǔ)器和外設(shè)的數(shù)據(jù)傳輸支持固定尋址和增量式尋址;
  8. 支持循環(huán)傳輸模式;
  9. 支持外設(shè)到存儲(chǔ)器,存儲(chǔ)器到外設(shè),存儲(chǔ)器到存儲(chǔ)器的數(shù)據(jù)傳輸;
  10. 每個(gè)通道有 3 種類型的事件標(biāo)志和獨(dú)立的中斷;
  11. 支持中斷的使能和清除。

在這里插入圖片描述

DMA0對(duì)應(yīng)通道。
在這里插入圖片描述

DMA1對(duì)應(yīng)通道。

在這里插入圖片描述

keil配置

microlib 進(jìn)行了高度優(yōu)化以使代碼變得很小。 它的功能比缺省 C 庫(kù)少,并且根本不具備某些 ISO C 特性。 某些庫(kù)函數(shù)的運(yùn)行速度也比較慢,如果要使用printf(),必須開(kāi)啟。

在這里插入圖片描述

定義發(fā)送數(shù)據(jù)

#define ARRAYNUM(arr_nanme)      (uint32_t)(sizeof(arr_nanme) / sizeof(*(arr_nanme)))
uint8_t txbuffer1[] = "

USART DMA transmit example

";

使能串口

/* 使能GPI0A,用PA9、PA10為串口 */
    rcu_periph_clock_enable(RCU_GPIOA);

    /*使能串口0的時(shí)鐘 */
    rcu_periph_clock_enable(RCU_USART0);

    /*配置USARTx_Tx(PA9)為復(fù)用推挽輸出*/
    gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);

    /*配置USARTx_RxPA9)為浮空輸入 */
    gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);

    /* USART 配置 */
    usart_deinit(USART0);//重置串口0
    usart_baudrate_set(USART0, 115200U);//設(shè)置串口0的波特率為115200
    usart_word_length_set(USART0, USART_WL_8BIT);          // 幀數(shù)據(jù)字長(zhǎng)
        usart_stop_bit_set(USART0, USART_STB_1BIT);               // 停止位1位
    usart_parity_config(USART0, USART_PM_NONE);           // 無(wú)奇偶校驗(yàn)位
    usart_receive_config(USART0, USART_RECEIVE_ENABLE);//使能接收器
    usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);//使能發(fā)送器
    usart_enable(USART0);//使能USART

串口重定向

/* retarget the C library printf function to the USART */
int fputc(int ch, FILE *f)
{
    usart_data_transmit(USART0, (uint8_t)ch);
    while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));
    return ch;
}

串口重定向后就可以使用printf進(jìn)行打印。

發(fā)送DMA初始化

在DMA初始化的時(shí)候,可以將需要發(fā)送的數(shù)據(jù)填充在memory_addr中,注意需要填上長(zhǎng)度number。

/*DMA初始化*/
    dma_parameter_struct dma_init_struct;
    // 時(shí)鐘開(kāi)啟
    rcu_periph_clock_enable(RCU_DMA0);
        dma_deinit(DMA0, DMA_CH3);//dma寄存器初始化
    dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL;//傳輸模式,存儲(chǔ)到外設(shè)(發(fā)送)
    dma_init_struct.memory_addr = (uint32_t)txbuffer1;//dma內(nèi)存地址
    dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE; //內(nèi)存地址增量模式
    dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;//dma外設(shè)寬度8位
    dma_init_struct.number = ARRAYNUM(txbuffer1)-1; //長(zhǎng)度
    dma_init_struct.periph_addr =(uint32_t)(&USART_DATA(USART0));//外設(shè)基地址( (uint32_t)USART_DATA(USART0) )
    dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;//外設(shè)地址增量禁用
    dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;
    dma_init_struct.priority = DMA_PRIORITY_HIGH; //優(yōu)先級(jí)高
    dma_init(DMA0, DMA_CH3 , &dma_init_struct);

    /* configure DMA mode */
    dma_circulation_disable(DMA0, DMA_CH3);//循環(huán)模式禁用
    dma_memory_to_memory_disable(DMA0, DMA_CH3);//通道3   USART0_TX

使能DMA發(fā)送

開(kāi)啟DMA0_3通道,這個(gè)通道位串口0的TX。

/* enable USART0 DMA channel transmission and reception */
    dma_channel_enable(DMA0, DMA_CH3);
    /* USART DMA enable for transmission and reception */
    usart_dma_transmit_config(USART0, USART_DENT_ENABLE);    //發(fā)送 

    /* wait until USART0 TX DMA0 channel transfer complete */
    while(RESET == dma_flag_get(DMA0, DMA_CH3, DMA_INTF_FTFIF)){
    }

dma_flag_get()函數(shù)說(shuō)明

dma_flag_get()函數(shù)功能是獲取DMAx通道y標(biāo)志位狀態(tài)。 主要的輸入參數(shù)有4個(gè)。

在這里插入圖片描述

在GD303固件庫(kù)中,使用DMA_INTF_FTFIF和DMA_FLAG_FTF是一樣的。

在這里插入圖片描述

DMA發(fā)送測(cè)試代碼

while(1)
{

    uint8_t txbuffer22[] = "123456";
    dma_channel_disable(DMA0, DMA_CH3);//使能DMA0_CH3
    dma_flag_clear(DMA0, DMA_CH3, DMA_FLAG_FTF);//清除DMA通道傳輸完成標(biāo)志
    dma_memory_address_config(DMA0, DMA_CH3,  (uint32_t)txbuffer22);//配置存儲(chǔ)器基地址
    dma_transfer_number_config(DMA0, DMA_CH3,  ARRAYNUM(txbuffer22)-1);
    dma_channel_enable(DMA0, DMA_CH3);
    /* wait until USART0 TX DMA0 channel transfer complete */
    while(RESET == dma_flag_get(DMA0, DMA_CH3, DMA_INTF_FTFIF)){
    }
    delay_1ms(1000);


}

DMA發(fā)送測(cè)試結(jié)果

在這里插入圖片描述

DMA循環(huán)發(fā)送

修改代碼。

dma_circulation_disable(DMA0, DMA_CH3);

修改為。

dma_circulation_enable(DMA0, DMA_CH3);

結(jié)果如下。

在這里插入圖片描述

定義接收數(shù)組

/* DMA接收緩沖區(qū) */
uint8_t dma_buffer[10];

/* 待處理數(shù)據(jù)個(gè)數(shù):大于1為有數(shù)據(jù)待處理,0為沒(méi)有數(shù)據(jù)待處理*/
uint32_t USART_RX_NUM = 0;

接收DMA初始化

在DMA初始化的時(shí)候,可以將需要接收的數(shù)據(jù)填充在memory_addr中,注意需要填上長(zhǎng)度number。

/* USART0 DMA 接收配置*/
    dma_deinit(DMA0, DMA_CH4);
    dma_init_struct.direction = DMA_PERIPHERAL_TO_MEMORY;        /* 外設(shè)到內(nèi)存 */
    dma_init_struct.memory_addr = (uint32_t)dma_buffer;            /* 設(shè)置內(nèi)存接收基地址 */
    dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;    /* 內(nèi)存地址遞增 */
    dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;        /* 8位內(nèi)存數(shù)據(jù) */
    dma_init_struct.number = sizeof(dma_buffer);
    dma_init_struct.periph_addr = ((uint32_t)0x40013804);        /* 外設(shè)基地址,USART數(shù)據(jù)寄存器地址 */
    dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;    /* 外設(shè)地址不遞增 */
    dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;    /* 8位外設(shè)數(shù)據(jù) */
    dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;            /* 最高DMA通道優(yōu)先級(jí) */
    dma_init(DMA0, DMA_CH4, &dma_init_struct);                     /* 按照結(jié)構(gòu)體的配置初始化DMA */  


    dma_circulation_disable(DMA0, DMA_CH4);            /* 關(guān)閉DMA循環(huán)模式 */
    dma_memory_to_memory_disable(DMA0, DMA_CH4);    /* DMA內(nèi)存到內(nèi)存模式不開(kāi)啟 */
        dma_channel_enable(DMA0, DMA_CH4);                /* 使能DMA傳輸 */

        usart_dma_receive_config(USART0, USART_DENR_ENABLE);    /* USART0 DMA接收模式開(kāi)啟 */

使能串口空閑中斷

當(dāng)接收完數(shù)據(jù)之后,會(huì)進(jìn)入空閑中斷。

nvic_irq_enable(USART0_IRQn, 0, 0);        /* USART中斷設(shè)置,搶占優(yōu)先級(jí)0,子優(yōu)先級(jí)0 */
    usart_interrupt_enable(USART0, USART_INT_IDLE);            /* 使能USART0空閑中斷 */

USART0_IRQHandler()函數(shù)

定義串口的中斷服務(wù)函數(shù),當(dāng)DMA接收完畢會(huì)進(jìn)入。

/* 串口0中斷服務(wù)程序 */
void USART0_IRQHandler(void)    
{
    if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_IDLE)) //空閑中斷
    {
        usart_interrupt_flag_clear(USART0,USART_INT_FLAG_IDLE);    /* 清除空閑中斷標(biāo)志位 */
        usart_data_receive(USART0);                                /* 清除接收完成標(biāo)志位 */
        dma_channel_disable(DMA0, DMA_CH4);                        /* 關(guān)閉DMA傳輸 */
        USART_RX_NUM = sizeof(dma_buffer) - dma_transfer_number_get(DMA0,DMA_CH4);
        printf("RECV %d date:%s
", USART_RX_NUM, dma_buffer);
        memset(&dma_buffer ,'',sizeof(dma_buffer));        
        /* 重新設(shè)置DMA傳輸 */
        dma_memory_address_config(DMA0,DMA_CH4,(uint32_t)dma_buffer);
        dma_transfer_number_config(DMA0,DMA_CH4,sizeof(dma_buffer));
        dma_channel_enable(DMA0, DMA_CH4);        /* 開(kāi)啟DMA傳輸 */
    }
}

DMA接收測(cè)試結(jié)果

在這里插入圖片描述

由于不是循環(huán)接收,當(dāng)接收長(zhǎng)度超過(guò)數(shù)組的長(zhǎng)度,就會(huì)照成數(shù)據(jù)混亂。 解決辦法可以增加接受數(shù)組的長(zhǎng)度或者設(shè)用循環(huán)接收,但是循環(huán)接收會(huì)覆蓋之前接收到的數(shù)據(jù)。

DMA循環(huán)接收

修改代碼。

dma_circulation_disable(DMA0, DMA_CH4);

修改為

dma_circulation_enable(DMA0, DMA_CH4);

結(jié)果如下。

在這里插入圖片描述

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • 串口
    +關(guān)注

    關(guān)注

    14

    文章

    1540

    瀏覽量

    76080
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    558

    瀏覽量

    100367
  • USART
    +關(guān)注

    關(guān)注

    1

    文章

    195

    瀏覽量

    30768
  • 固件庫(kù)
    +關(guān)注

    關(guān)注

    2

    文章

    97

    瀏覽量

    14918
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32CUBEMX開(kāi)發(fā)GD32F303(8)----USART收發(fā)配置

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中進(jìn)行開(kāi)發(fā),同時(shí)通過(guò)GD32303C_START
    的頭像 發(fā)表于 11-29 10:40 ?3075次閱讀
    STM32CUBEMX<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>GD32F303</b>(8)----<b class='flag-5'>USART</b><b class='flag-5'>收發(fā)</b>配置

    STM32CUBEMX開(kāi)發(fā)GD32F3039)----USART通過(guò)DMA收發(fā)

    概述 本章STM32CUBEMX配置STM32F103,并且在GD32F303中進(jìn)行開(kāi)發(fā),同時(shí)通過(guò)GD32303C_START
    的頭像 發(fā)表于 11-29 11:15 ?2007次閱讀
    STM32CUBEMX<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>GD32F303</b>(<b class='flag-5'>9</b>)----<b class='flag-5'>USART</b><b class='flag-5'>通過(guò)</b><b class='flag-5'>DMA</b><b class='flag-5'>收發(fā)</b>

    GD32F303固件庫(kù)開(kāi)發(fā)(14)----IIC之配置OLED

    本章配置GD32F303使用IIC進(jìn)行驅(qū)動(dòng)SSD1306的12864OLED。
    的頭像 發(fā)表于 07-26 08:55 ?3525次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>開(kāi)發(fā)</b>(14)----IIC之配置OLED

    GD32F303】星空派介紹

    GD32官方資料的基礎(chǔ)上,提供GD32F303的庫(kù)函數(shù)開(kāi)發(fā)資料、例程講解、視頻課程等。同時(shí)還提供RT-Thread相關(guān)的驅(qū)動(dòng)開(kāi)發(fā)、應(yīng)用開(kāi)發(fā)、
    發(fā)表于 09-11 17:55

    GD32F30x系列固件庫(kù)

    GD32F30x系列固件庫(kù)包含GD32F303GD32F305、GD32F307三個(gè)系列的最新
    發(fā)表于 08-21 09:00 ?165次下載

    GD32F303固件庫(kù)開(kāi)發(fā)(1)----前期準(zhǔn)備與燒錄

    在這使用STM32CUBEMX進(jìn)行配置STM32F103,移植到兆易創(chuàng)新GD32F303,然后進(jìn)行測(cè)試。需要樣片的可以加Qun申請(qǐng):615061293。
    的頭像 發(fā)表于 11-23 11:15 ?2560次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>開(kāi)發(fā)</b>(1)----前期準(zhǔn)備與燒錄

    GD32F303固件庫(kù)開(kāi)發(fā)(3)----使用固件庫(kù)點(diǎn)亮LED

    概述 在GD的官網(wǎng)中有許多的DEMO文件,可以使用開(kāi)發(fā)板的案例或者對(duì)應(yīng)的MCU標(biāo)準(zhǔn)固件庫(kù)。需要樣片的可以加群申請(qǐng):6_15061293。 下圖是GD
    的頭像 發(fā)表于 11-23 17:36 ?2813次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>開(kāi)發(fā)</b>(3)----使用<b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b>點(diǎn)亮LED

    GD32F303固件庫(kù)開(kāi)發(fā)(5)----GPIO輸出模式,速率測(cè)試、開(kāi)漏和輸出說(shuō)明

    以STM32CUBEMX創(chuàng)建STM32F103工程,同時(shí)移植在GD32F303中,同時(shí)通過(guò)GD32303C_START開(kāi)發(fā)板內(nèi)進(jìn)行驗(yàn)證。
    的頭像 發(fā)表于 11-25 15:32 ?3093次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>開(kāi)發(fā)</b>(5)----GPIO輸出模式,速率測(cè)試、開(kāi)漏和輸出說(shuō)明

    STM32CUBEMX開(kāi)發(fā)GD32F303(11)----ADC在DMA模式下掃描多個(gè)通道

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中進(jìn)行開(kāi)發(fā),同時(shí)通過(guò)GD32303C_START
    的頭像 發(fā)表于 11-30 10:59 ?2203次閱讀
    STM32CUBEMX<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>GD32F303</b>(11)----ADC在<b class='flag-5'>DMA</b>模式下掃描多個(gè)通道

    GD32F303固件庫(kù)開(kāi)發(fā)(12)----輸出PWM及修改PWM頻率與占空比

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中進(jìn)行開(kāi)發(fā),同時(shí)通過(guò)開(kāi)發(fā)板內(nèi)進(jìn)行驗(yàn)證。 本章主要配置定時(shí)器輸出PWM
    的頭像 發(fā)表于 11-30 15:36 ?9152次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>開(kāi)發(fā)</b>(12)----輸出PWM及修改PWM頻率與占空比

    STM32CUBEMX開(kāi)發(fā)GD32F303(14)----IIC之配置OLED

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中進(jìn)行開(kāi)發(fā),同時(shí)通過(guò)開(kāi)發(fā)板內(nèi)進(jìn)行驗(yàn)證。
    的頭像 發(fā)表于 07-26 13:52 ?1887次閱讀
    STM32CUBEMX<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>GD32F303</b>(14)----IIC之配置OLED

    GD32F303固件庫(kù)開(kāi)發(fā)(15)----外部中斷EXTI

    本章配置GD32F303使用EXTI進(jìn)行驅(qū)動(dòng)LED。
    的頭像 發(fā)表于 07-26 15:56 ?1394次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>開(kāi)發(fā)</b>(15)----外部中斷EXTI

    GD32F303固件庫(kù)開(kāi)發(fā)

    的可以加群申請(qǐng):615061293 。 GD32F303固件庫(kù)開(kāi)發(fā)(1)----前期準(zhǔn)備與燒錄 使用GDLINK、jlink、串口下載程序到GD
    的頭像 發(fā)表于 07-27 09:27 ?1089次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>開(kāi)發(fā)</b>

    GD32F303紅楓派開(kāi)發(fā)板使用手冊(cè)】第十六講 USART-DMA串口收發(fā)實(shí)驗(yàn)

    在前面ADC章節(jié)中,我們介紹了DMA的工作原理,這里就不多做介紹。從GD32F303用戶手冊(cè)中可以查到,各串口的TX和RX分別對(duì)應(yīng)DMA的不同通道,比如USART0的TX對(duì)應(yīng)
    的頭像 發(fā)表于 06-15 09:54 ?937次閱讀
    【<b class='flag-5'>GD32F303</b>紅楓派<b class='flag-5'>開(kāi)發(fā)</b>板使用手冊(cè)】第十六講 <b class='flag-5'>USART-DMA</b>串口<b class='flag-5'>收發(fā)</b>實(shí)驗(yàn)

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

    GD32E503 系列是 GD 推出的 Cortex_M33 系列產(chǎn)品,該系列資源上與 GD32F303 兼容度非常高,本應(yīng)用筆記旨在幫助您快速將應(yīng)用程序從 GD32F303 系列微控
    的頭像 發(fā)表于 08-31 09:36 ?1312次閱讀
    【<b class='flag-5'>GD</b>32 MCU 移植教程】2、從 <b class='flag-5'>GD32F303</b> 移植到 <b class='flag-5'>GD32F</b>503