chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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ù)開發(fā)(8)----USART收發(fā)配置

嵌入式單片機(jī)MCU開發(fā) ? 來(lái)源: 嵌入式單片機(jī)MCU開發(fā) ? 作者: 嵌入式單片機(jī)MC ? 2022-11-28 17:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

概述

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

在這里插入圖片描述

樣品申請(qǐng)

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

硬件準(zhǔn)備

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

在這里插入圖片描述

keil配置

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

在這里插入圖片描述

串口初始化

對(duì)串口進(jìn)行配置。 使用串口時(shí)候,需要對(duì)GPIO進(jìn)行復(fù)用這里把串口的 Tx 引腳配置為復(fù)用推挽輸出,Rx 引腳為浮空輸入。 設(shè)置USART0 通信參數(shù)為:波特率 115200,字長(zhǎng)為 8,1 個(gè)停止位,沒(méi)有校驗(yàn)位,收發(fā)一體工作模式,然后調(diào)用 USART 初始化函數(shù)完成配置。

/* 使能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)行打印。

usart_data_transmit()發(fā)送

usart_data_transmit()是USART發(fā)送數(shù)據(jù)函數(shù)。 定義發(fā)送函數(shù)。

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);
        }

測(cè)試結(jié)果

在這里插入圖片描述

中斷發(fā)送

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

在這里插入圖片描述

對(duì)于中斷發(fā)送,需要usart_interrupt_enable()開啟發(fā)送緩沖區(qū)空中斷。 搶占優(yōu)先級(jí),數(shù)字越小,優(yōu)先級(jí)越高。 若搶占優(yōu)先級(jí)相同,判斷子優(yōu)先級(jí),同樣,數(shù)字越小,優(yōu)先級(jí)越高。

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

定義發(fā)送變量。

#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";//發(fā)送的數(shù)據(jù)
uint8_t tx_size = TRANSMIT_SIZE;//需要發(fā)送數(shù)據(jù)長(zhǎng)度
__IO uint8_t txcount = 0; //發(fā)送數(shù)據(jù)長(zhǎng)度

串口中斷定義。

void USART0_IRQHandler(void)
{

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

測(cè)試結(jié)果

在這里插入圖片描述

中斷接收

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

在這里插入圖片描述

對(duì)于中斷接收,需要usart_interrupt_enable()開啟接收中斷。 搶占優(yōu)先級(jí),數(shù)字越小,優(yōu)先級(jí)越高。 若搶占優(yōu)先級(jí)相同,判斷子優(yōu)先級(jí),同樣,數(shù)字越小,優(yōu)先級(jí)越高。

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

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

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

定義發(fā)送變量。

uint8_t rxbuffer[10];//接收數(shù)組
uint8_t rx_size = 10;//需要接收長(zhǎng)度
__IO uint16_t rxcount = 0; //實(shí)際接收長(zhǎng)度

串口中斷定義。

/*!
    \\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))//發(fā)送
        {
        /* transmit data */
        usart_data_transmit(USART0, txbuffer[txcount++]);//發(fā)送一個(gè)八位數(shù)據(jù)
        if(txcount == tx_size)//發(fā)送完畢
                {
            usart_interrupt_disable(USART0, USART_INT_TBE);//關(guān)閉發(fā)送中斷
        }
    }
}

測(cè)試結(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)投訴
  • 固件庫(kù)
    +關(guān)注

    關(guān)注

    2

    文章

    98

    瀏覽量

    15598
  • gd32f303
    +關(guān)注

    關(guān)注

    4

    文章

    38

    瀏覽量

    4194
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    LAT1171+STM32F745 USART1 Bootloader 失敗原因分析與解決

    使用 STM32F745 進(jìn)行產(chǎn)品開發(fā)的時(shí)候,出現(xiàn)了使用 STM32CubeProgramer 無(wú)法通過(guò) USART1 Bootloader 進(jìn)行程序升級(jí)的問(wèn)題。為了解決客戶的問(wèn)題,我在 NUCLEO-
    發(fā)表于 01-11 17:33 ?0次下載

    基于RT-Thread與GD32F527I-EVAL的多媒體門禁系統(tǒng) | 技術(shù)集結(jié)

    陣容,為GD32MCU高性能產(chǎn)品線再添新銳。該系列基于Armv8-M架構(gòu),主頻高達(dá)280MHz,具備靈活的存儲(chǔ)配置、高集成度、內(nèi)置多種安全功能,為高性能計(jì)算提供堅(jiān)實(shí)
    的頭像 發(fā)表于 11-25 18:31 ?1024次閱讀
    基于RT-Thread與<b class='flag-5'>GD32F</b>527I-EVAL的多媒體門禁系統(tǒng) | 技術(shù)集結(jié)

    USART1、USART2、UART3的串口使用

    本人用藍(lán)牙測(cè)試通過(guò)了三個(gè)串口模塊,其中USART1需要重映射配置。USART0我暫時(shí)沒(méi)有啟用! 下圖是USART1的使用,相關(guān)接口映射可以查找“用戶指南”,代碼在文末(重映射需要開啟A
    發(fā)表于 10-31 09:05

    兆易創(chuàng)新GD32F5xx與GD32G5xx STL軟件測(cè)試庫(kù)獲頒IEC61508功能安全認(rèn)證

    業(yè)界領(lǐng)先的半導(dǎo)體器件供應(yīng)商 兆易創(chuàng)新GigaDevice 宣布,其GD32F5xx與GD32G5xx系列MCU配套的STL(Software Test Library)軟件測(cè)試庫(kù)獲得德國(guó)萊茵TüV
    的頭像 發(fā)表于 10-24 12:55 ?391次閱讀

    MCU無(wú)法檢測(cè)到W5500是怎么回事?

    在兆易創(chuàng)新 GD32F303,國(guó)民技術(shù) N32G457和ST STM32F103上試用了W5500以太網(wǎng)模塊(RT-Thread版本是rt-thread-4.1.1), 只有STM32F103上可以
    發(fā)表于 10-14 07:38

    在標(biāo)準(zhǔn)庫(kù)配置的stm32f103x的spi在引入rtthread后收發(fā)的消息就錯(cuò)了,為什么?

    我在標(biāo)準(zhǔn)庫(kù)配置的stm32f103x的spi在引入rtthread后收發(fā)的消息就錯(cuò)了,引入之前沒(méi)問(wèn)題,請(qǐng)問(wèn)這是啥情況
    發(fā)表于 10-13 08:07

    NVIC中斷配置固件庫(kù)詳解

    固件庫(kù)文件core_cm33.h的最后,還提供了NVIC的一些函數(shù),這些函數(shù)遵循CMSIS規(guī)則,只要是Cortex-M33的處理器都可以使用。
    的頭像 發(fā)表于 09-23 09:34 ?1399次閱讀
    NVIC中斷<b class='flag-5'>配置</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b>詳解

    backtrace命令無(wú)法使用?為什么?

    GD32F303,之前一直用nano,最近使用5.2.0標(biāo)準(zhǔn)版,工程使用最新版本bsp中的,直接下載,發(fā)現(xiàn)有backtrace命令,根據(jù)提示使用,一直提示無(wú)效輸入?是M核不支持嗎?還是我哪里沒(méi)有開啟,雖然暫時(shí)沒(méi)用到,還是想多了解一下?
    發(fā)表于 09-22 08:13

    GD32F103RCT6 rt_kprintf無(wú)法打印怎么解決?

    使用的芯片為GD32F103RCT6,文件夾board路徑里有一個(gè)不使用rt操作系統(tǒng)的串口打印配置,映射到printf,使用這個(gè)代碼配置的printf可以正常打印。我使用的串口為uart1,引腳為
    發(fā)表于 09-19 07:42

    GD32的串口DMA收發(fā)數(shù)據(jù)失敗怎么解決?

    我在使用RTT的GD32F303的BSP時(shí),配置使用串口DMA收發(fā)(rt_device_open),發(fā)現(xiàn)錯(cuò)誤,最終無(wú)法收發(fā)數(shù)據(jù),對(duì)比了STM32的BSP發(fā)現(xiàn)在drv_
    發(fā)表于 09-17 06:04

    GD32F437開發(fā)板添加lwip支持后ping不通電腦怎么解決?

    使用GD32F437的開發(fā)板,在studio中添加lwip的支持后,將開板板設(shè)置和電腦相同的網(wǎng)段,并用網(wǎng)線連接開發(fā)板和電腦,開發(fā)板啟動(dòng)后ping不通電腦,如下:
    發(fā)表于 09-09 07:43

    高新興瑞聯(lián)推出新款LTE Cat.1高性能OBD產(chǎn)品GD303

    2025年8月,高新興瑞聯(lián)新款LTE Cat.1高性能OBD產(chǎn)品——GD303正式上市!憑借卓越的性能、豐富的功能和廣泛的應(yīng)用場(chǎng)景適用性和易用性,GD303將豐富高新興瑞聯(lián)的OBD Tracker產(chǎn)品家族,滿足更多客戶在數(shù)字化車
    的頭像 發(fā)表于 08-15 11:02 ?2069次閱讀

    GD32串口高效率數(shù)據(jù)收發(fā):多方案深度解析與實(shí)戰(zhàn)

    一、引言 在嵌入式系統(tǒng)開發(fā)中,串口通信的高效實(shí)現(xiàn)直接影響系統(tǒng)性能。本文以GD32微控制器為例,深度解析DMA+空閑中斷接收+DMA發(fā)送的黃金組合方案,并與輪詢、單DMA、普通中斷等四種主流實(shí)現(xiàn)方式
    發(fā)表于 03-29 16:20

    STM32/GD32開發(fā)板基本串口RS232\\RS485通信及CAN接口 usbhid升級(jí) U盤升級(jí) sd卡升級(jí)升級(jí)學(xué)習(xí)方案開發(fā)

    STM32F103/STM32F407/gd32F103/GD32F303開發(fā)板,例程用標(biāo)準(zhǔn)庫(kù)
    發(fā)表于 02-27 14:56

    GD-LINK無(wú)法在KEIL上調(diào)試怎么解決?

    :startup_stm32f10x_hd.s。 驅(qū)動(dòng):st的標(biāo)準(zhǔn)庫(kù)驅(qū)動(dòng),如stm32f10x_gpio.c。 KEIL配置:芯片型號(hào)GD32F30
    發(fā)表于 02-27 08:24