色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

GD32F303固件庫開發(8)----USART收發配置

嵌入式單片機MCU開發 ? 來源: 嵌入式單片機MCU開發 ? 作者: 嵌入式單片機MC ? 2022-11-28 17:28 ? 次閱讀

概述

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

在這里插入圖片描述

樣品申請

https://www.wjx.top/vm/wFGhGPF.aspx#

硬件準備

這里準備了1塊開發板進行驗證,分別是GD32303C_START開發板。

在這里插入圖片描述

keil配置

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

在這里插入圖片描述

串口初始化

對串口進行配置。 使用串口時候,需要對GPIO進行復用這里把串口的 Tx 引腳配置為復用推挽輸出,Rx 引腳為浮空輸入。 設置USART0 通信參數為:波特率 115200,字長為 8,1 個停止位,沒有校驗位,收發一體工作模式,然后調用 USART 初始化函數完成配置。

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

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

    /*配置USARTx_Tx(PA9)為復用推挽輸出*/
    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);//設置串口0的波特率為115200
    usart_word_length_set(USART0, USART_WL_8BIT);          // 幀數據字長
    usart_stop_bit_set(USART0, USART_STB_1BIT);               // 停止位1位
    usart_parity_config(USART0, USART_PM_NONE);           // 無奇偶校驗位
    usart_receive_config(USART0, USART_RECEIVE_ENABLE);//使能接收器
    usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);//使能發送器
    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進行打印。

usart_data_transmit()發送

usart_data_transmit()是USART發送數據函數。 定義發送函數。

void uart_data_transmit(uint8_t arr[], uint32_t length) 
{
    uint32_t i;
    for(i=0; iusart_data_transmit(USART0, arr[i]);
        while (usart_flag_get(USART0, USART_FLAG_TBE)== RESET);
    }
}

在主程序中添加代碼,打印HELLO!

while (1)
        {
            uint8_t str[] = "HELLO!\\r\\n";
            uint32_t len =  sizeof(str) / sizeof(*str);
            uart_data_transmit(str,len-1);
            delay_1ms(1000);
        }

測試結果

在這里插入圖片描述

中斷發送

若要使用串口的中斷函數USART0_IRQHandler(),需要先開啟串口中斷。

在這里插入圖片描述

對于中斷發送,需要usart_interrupt_enable()開啟發送緩沖區空中斷。 搶占優先級,數字越小,優先級越高。 若搶占優先級相同,判斷子優先級,同樣,數字越小,優先級越高。

/*開啟USART0中斷 */
    nvic_irq_enable(USART0_IRQn, 0, 0);
    /* 使能串口發送中斷 */  
    usart_interrupt_enable(USART0, USART_INT_TBE);
    delay_1ms(1000);    //開啟后會進入中斷進行發送,故需要進行一個延遲

定義發送變量。

#define ARRAYNUM(arr_nanme)      (uint32_t)(sizeof(arr_nanme) / sizeof(*(arr_nanme)))
#define TRANSMIT_SIZE            (ARRAYNUM(txbuffer) - 1)
uint8_t txbuffer[] = "\\n\\rUSART interrupt test\\n\\r";//發送的數據
uint8_t tx_size = TRANSMIT_SIZE;//需要發送數據長度
__IO uint8_t txcount = 0; //發送數據長度

串口中斷定義。

void USART0_IRQHandler(void)
{

    if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_TBE))//發送
        {
        /* transmit data */
        usart_data_transmit(USART0, txbuffer[txcount++]);//發送一個八位數據
        if(txcount == tx_size)//發送完畢
                {
            usart_interrupt_disable(USART0, USART_INT_TBE);//關閉發送中斷
        }
    }
}

測試結果

在這里插入圖片描述

中斷接收

若要使用串口的中斷函數USART0_IRQHandler(),需要先開啟串口中斷。

在這里插入圖片描述

對于中斷接收,需要usart_interrupt_enable()開啟接收中斷。 搶占優先級,數字越小,優先級越高。 若搶占優先級相同,判斷子優先級,同樣,數字越小,優先級越高。

/*開啟USART0中斷 */
    nvic_irq_enable(USART0_IRQn, 0, 0);
    /* 使能串口發送中斷 */  
    usart_interrupt_enable(USART0, USART_INT_TBE);
        delay_1ms(1000);    //開啟后會進入中斷進行發送,故需要進行一個延遲            

    while(RESET == usart_flag_get(USART0, USART_FLAG_TC));//USART_FLAG_TC發送完成中斷
     /* 使能串口接收中斷*/  
    usart_interrupt_enable(USART0, USART_INT_RBNE);  

    /* 等待接收完畢 */
    while(rxcount < rx_size);
    if(rxcount == rx_size)
        printf("\\n\\r接收完畢,接收數據是:");
        uart_data_transmit(rxbuffer,rx_size);//發送接收數據
        printf("\\n\\r");

定義發送變量。

uint8_t rxbuffer[10];//接收數組
uint8_t rx_size = 10;//需要接收長度
__IO uint16_t rxcount = 0; //實際接收長度

串口中斷定義。

/*!
    \\brief      this function handles USART RBNE interrupt request and TBE interrupt request
    \\param[in]  none
    \\param[out] none
    \\retval     none
*/
void USART0_IRQHandler(void)
{
    if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)){
        /* receive data */
        rxbuffer[rxcount++] = usart_data_receive(USART0);
        if(rxcount == rx_size){
            usart_interrupt_disable(USART0, USART_INT_RBNE);
        }
    }
    if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_TBE))//發送
        {
        /* transmit data */
        usart_data_transmit(USART0, txbuffer[txcount++]);//發送一個八位數據
        if(txcount == tx_size)//發送完畢
                {
            usart_interrupt_disable(USART0, USART_INT_TBE);//關閉發送中斷
        }
    }
}

測試結果

在這里插入圖片描述

審核編輯 黃昊宇

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

    關注

    2

    文章

    97

    瀏覽量

    14967
  • gd32f303
    +關注

    關注

    4

    文章

    38

    瀏覽量

    3708
收藏 人收藏

    評論

    相關推薦

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

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

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

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

    GD32F303使用KEIL仿真,JLINK連不上什么原因?需要怎么設置?

    GD32F303使用KEIL仿真,JLINK連不上什么原因?需要怎么設置?
    發表于 07-26 06:34

    GD32F303紅楓派開發板使用手冊】第二十七講 USB-虛擬鍵盤實驗

    ,傳輸速度也很快,這些特性使支持USB接口的電子設備更易用、更大眾化。GD32F303系列MCU集成了USB2.0全速設備USBD模塊,可以滿足作為USB設備與主機
    的頭像 發表于 06-27 09:42 ?954次閱讀
    【<b class='flag-5'>GD32F303</b>紅楓派<b class='flag-5'>開發</b>板使用手冊】第二十七講  USB-虛擬鍵盤實驗

    GD32F303紅楓派開發板使用手冊】第二十講 SPI-SPI NAND FLASH讀寫實驗

    通過本實驗主要學習以下內容: ?SPI通信協議,參考19.2.1東方紅開發板使用手冊 ?GD32F303 SPI操作方式,參考19.2.2東方紅開發板使用手冊 ?NAND FLASH基本原理 ?SPI NAND介紹 ?使用
    的頭像 發表于 06-20 09:50 ?1012次閱讀
    【<b class='flag-5'>GD32F303</b>紅楓派<b class='flag-5'>開發</b>板使用手冊】第二十講 SPI-SPI NAND FLASH讀寫實驗

    GD32F303紅楓派開發板使用手冊】第十六講 USART-DMA串口收發實驗

    在前面ADC章節中,我們介紹了DMA的工作原理,這里就不多做介紹。從GD32F303用戶手冊中可以查到,各串口的TX和RX分別對應DMA的不同通道,比如USART0的TX對應DMA0的通道3,而RX對應DMA0的通道4。
    的頭像 發表于 06-15 09:54 ?1173次閱讀
    【<b class='flag-5'>GD32F303</b>紅楓派<b class='flag-5'>開發</b>板使用手冊】第十六講 <b class='flag-5'>USART</b>-DMA串口<b class='flag-5'>收發</b>實驗

    GD32F303紅楓派開發板使用手冊】第六講 PMU-低功耗實驗講

    PMU即電源管理單元,其內部結構下圖所示,由該圖可知,GD32F303系列MCU具有三個電源域,包括VDD/VDDA電源域、1.2V電源域以及電池備份域,其中,VDD /VDDA域由電源直接供電。在
    的頭像 發表于 06-02 10:12 ?801次閱讀
    【<b class='flag-5'>GD32F303</b>紅楓派<b class='flag-5'>開發</b>板使用手冊】第六講 PMU-低功耗實驗講

    GD32F303紅楓派開發板使用手冊】第五講 FMC-片內Flash擦寫讀實驗

    MC即Flash控制器,其提供了片上Flash操作所需要的所有功能,在GD32F303系列MCU中,Flash前256K字節空間內,?CPU執行指令零等待,具有相同主頻下最快的代碼執行效率。FMC也
    的頭像 發表于 06-02 10:05 ?850次閱讀
    【<b class='flag-5'>GD32F303</b>紅楓派<b class='flag-5'>開發</b>板使用手冊】第五講 FMC-片內Flash擦寫讀實驗

    GD32F303紅楓派開發板使用手冊】第三講 GPIO-按鍵查詢檢測實驗

    GD32F303系列MCU GPIO輸入配置結構如下圖所示,輸入可配置上下拉電阻,通過施密特觸發器后可通過備用功能輸入或者通過輸入狀態寄存器進行讀取。
    的頭像 發表于 05-30 10:02 ?961次閱讀
    【<b class='flag-5'>GD32F303</b>紅楓派<b class='flag-5'>開發</b>板使用手冊】第三講 GPIO-按鍵查詢檢測實驗

    GD32F303紅楓派開發板使用手冊】第二講 GPIO-流水燈實驗

    GD32F303系列MCU最多可支持?112?個通用I/O?引腳(GPIO),分別為?PA0 ~ PA15,?PB0 ~ PB15,?PC0 ~ PC15,PD0 ~ PD15,?PE0
    的頭像 發表于 05-29 10:02 ?1791次閱讀
    【<b class='flag-5'>GD32F303</b>紅楓派<b class='flag-5'>開發</b>板使用手冊】第二講 GPIO-流水燈實驗

    GD32F10x 固件使用指南

    電子發燒友網站提供《GD32F10x 固件使用指南.pdf》資料免費下載
    發表于 05-22 14:15 ?27次下載

    GD32 MCU如何使用雙ADC內核提高ADC采樣率?

    如下圖所示,GD32F303系列MCU在不同的ADC位寬情況下均具有對應的最高采樣率,那這個最高采樣率還可以提高嗎?
    的頭像 發表于 02-29 09:42 ?1359次閱讀
    <b class='flag-5'>GD</b>32 MCU如何使用雙ADC內核提高ADC采樣率?

    GD32F303為什么啟動慢?

    在MCU開發中,有一項非常重要的參數——MCU啟動時間,即MCU上電后到程序開始運行這段時間。我們來看下GD32F303的datasheet中對啟動時間的描述:
    的頭像 發表于 02-22 11:11 ?1429次閱讀
    <b class='flag-5'>GD32F303</b>為什么啟動慢?

    GD32固件庫里時鐘配置時的神秘代碼?高頻切低頻時芯片會發生什么

    GD固件的時鐘配置函數里看到這樣一段神秘代碼,研究分析后不得不佩服原廠固件庫里的細節處理
    的頭像 發表于 02-19 09:44 ?775次閱讀
    <b class='flag-5'>GD</b>32<b class='flag-5'>固件</b>庫里時鐘<b class='flag-5'>配置</b>時的神秘代碼?高頻切低頻時芯片會發生什么

    GD32F303想控制PA13~15、PB3和PB4不成功?

    有沒有小伙伴遇到這種情況:在使用GD32F303的時候,想要將PA13~15以及PB3和PB4作為IO口來使用,卻怎么也不成功呢?下面小編就來告訴大家原因。
    的頭像 發表于 02-01 09:49 ?2811次閱讀
    <b class='flag-5'>GD32F303</b>想控制PA13~15、PB3和PB4不成功?
    主站蜘蛛池模板: 美国女孩毛片| 国产曰批试看免费视频播放免费 | 亚洲人成77777| 国产超碰人人爱被IOS解锁| 欧美日韩中文国产一区发布| 6080yy亚洲久久无码| 玖玖爱精品视频| 一级做a爰片久久毛片苍井优| 国产综合欧美区在线| 亚洲精品不卡视频| 国产亚洲精品久久久久久无码网站 | 久久国产精品免费网站| 亚洲最大在线视频| 久久精品亚洲热综合一本| 2224x最新网站| 欧美人与动牲交A免费| 成人在线免费视频观看| 色欲国产麻豆一精品一AV一免费 | 小柔的性放荡羞辱日记| 国产精品资源网站在线观看| 午夜天堂一区人妻| 黑吊大战白xxxxxx| 一二三四高清中文版视频| 久久伊人电影| 99re8久久热在线视频| 日韩免费一区| 国产老头与老太hd| 在线播放日韩欧美亚洲日本| 米奇影视999| 儿子操妈妈| 亚洲电影第1页| 久久这里只有精品国产精品99| 99久久99久久久99精品齐| 日本久久久WWW成人免费毛片丨| 国产激情视频在线播放| 亚洲一区精品在线| 免费国产黄线在线播放| 高清国产在线播放成人| 亚洲一区国产| 色哒哒影院| 久久精品亚洲AV中文2区金莲 |