精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

【GD32F303紅楓派開發板使用手冊】第十五講 USART-printf打印實驗

聚沃科技 ? 2024-06-14 09:42 ? 次閱讀
wKgaomZVdiiAfR9BAB3mDFhHnZc972.png

15.1實驗內容

通過本實驗主要學習以下內容:

15.2實驗原理

15.2.1串口簡介

串口,從廣義上看,指所有串行通信接口,比如RS232RS422RS485、SPI、IIC等。串行通訊是指僅用一根接收線和一根發送線就能將數據以位進行傳輸的通訊方式。和串行通訊相對應的是并行通訊,并行通信指一個傳輸接口可以傳輸8個bit即一個byte(有時甚至更多),雖然串行通信比并行通信慢,但是串口可以在僅僅使用兩根線的情況下就能實現數據的傳輸。

對于GD32F303來說,串口一般特指USART(通用同步異步收發器 )和UART(通用異步收發器 )。USART/UART提供了一個靈活方便的串行數據交換接口,數據幀可以通過全雙工或半雙工,同步或異步的方式進行傳輸。紅楓派開發板搭載的GD32F303ZET6總共擁有5個串口,(USART+UART) 對于一般應用來說足夠使用了。

15.2.2串口通信幀介紹

GD32F303的串口通信只需要3條線組成,分別為TX(發送線)、RX(接收線)和GND,對于兩個通信結點,TX和RX需要交叉連接,如下示例:

wKgZomZBdHiABIwiAAHgknaaCew303.png

下面來介紹下串口數據幀組成。

以下為一個標準的串口通信幀:

wKgZomZBdIWACJN4AAGZCDszKEQ933.png

一個串口幀由空閑、起始位、數據位、校驗位以及停止位組成,傳輸的數據地位在前,高位再后。

空閑:串口TX或RX數據線上沒有傳輸任何數據時,則該線處于為空閑狀態。空閑是TX和RX都是處于高電平。

起始位:占一個bit時間,標志數據起始,由一個邏輯0(低電平)的數據位表示。當發送方開始發送一幀數據時,起始位會最先發送,而對于接收方來說,檢測到起始位后,即使自己的接收時鐘與發送方的數據同步。

數據位:數據位緊跟在起始位之后,是通信中的真正有效信息。數據位的位數可以由通信雙方共同約定,對于GD32F303來說,數據位一般只有8位。

校驗位:校驗位占一bit時間,GD32F303可以設置校驗位為:奇校驗、偶校驗或無校驗。校驗位是為了保證通信的可靠性,如果是奇校驗,需要保證傳輸的數據總共有奇數個邏輯高位,如果是偶校驗,需要保證傳輸的數據總共有偶數個邏輯高位。以傳輸傳輸數據A:0x01000001為例,如果設置了奇校驗,則需要在校驗位傳輸“1”,如果是偶檢驗,則傳輸“0”。奇偶校驗是由硬件處理的,當設置好校驗位后,硬件會自動根據需要傳輸的數據自動插入校驗位。

注意:GD32F303的數據位可設置為8bit和9bit兩種方式,當設置了奇校驗或偶校驗,一定要將數據位設置為9bit;而設置了無校驗時,需要將數據位設置為8bit。

停止位:它是一幀數據的結束標志,可以是1bit、1.5bit、2bit個邏輯“1”。

15.2.3串口波特率

波特率是串口通信中一個非常重要的參數,串口通信傳輸雙方必須要設置一樣的串口波特率,否則通訊就會出錯。波特率可以認為是比特率,即每秒傳輸的位數。一般波特率可以是9600、19200、115200等等,如果設置波特率為9600,設置通信幀為1bit起始位+8bit數據幀+無校驗+1bit停止位,那么每秒鐘最多可以傳輸9600bit/10bit = 960個字節。

現在重點介紹下GD32F303串口接收器的工作原理。GD32F303串口接收器采用的是16倍過采樣,即發送方發送數據后,GD32F303串口接受器都會將每個bit采樣16次:

wKgaomZrn7uAGn0wAAA5hJtLtTE295.png

在默認情況下,接收器通過獲取三個采樣點的值來估計該位的值。如果在3個采樣點中有2個或3個為0,該數據位被視為0,否則為1。如果3個采樣點中有一個采樣點的值與其他兩個不同,不管是起始位,數據位,奇偶校驗位或者停止位,都將產生噪聲錯誤(NERR)。

15.2.4GD32F303串口設置步驟

串口設置的一般步驟為:

  1. GPIO時鐘開啟、串口時鐘開啟
  2. GPIO設置,一般發送IO需要設置為AF模式,接受IO設置為in-floating模式
  3. 串口復位
  4. 串口參數配置,主要為波特率、數據位長度、校驗位設置、停止位長度
  5. 依據是否需要使用中斷或DMA進行中斷配置或DMA配置
  6. 使能串口
  7. 編寫中斷處理函數

15.3硬件設計

紅楓派開發板設計了一個USB轉UART功能,通過USB TypeC線將電腦和開發板連接起來,就可以進行電腦和開發板之間的串口通訊了。

wKgZomZrn8mAOLyYAAIK6BT2g0g316.png

15.4代碼解析

15.4.1在driver_uart.c中定義了串口初始化函數driver_uart_init。

C
void driver_uart_init(typdef_uart_struct *uartx)
{
rcu_periph_clock_enable(uartx->rcu_uart_x);
usart_deinit(uartx->uart_x);
driver_gpio_general_init(uartx->uart_rx_gpio);
driver_gpio_general_init(uartx->uart_tx_gpio);
if(uartx->uart_mode_rx==MODE_DMA)
{
if(uartx->uart_rx_dma!=NULL)
{
driver_dma_com_init(uartx->uart_rx_dma,(uint32_t)&USART_DATA(uartx->uart_x),NULL,DMA_Width_8BIT,DMA_PERIPHERAL_TO_MEMORY);
usart_interrupt_enable(uartx->uart_x,USART_INT_IDLE);
}
}

if(uartx->uart_mode_tx==MODE_DMA)
{
if(uartx->uart_tx_dma!=NULL)
{
driver_dma_com_init(uartx->uart_tx_dma,(uint32_t)&USART_DATA(uartx->uart_x),NULL,DMA_Width_8BIT,DMA_MEMORY_TO_PERIPHERAL);
}
}
usart_baudrate_set(uartx->uart_x, uartx->baudrate);
usart_receive_config(uartx->uart_x, USART_RECEIVE_ENABLE);
usart_transmit_config(uartx->uart_x, USART_TRANSMIT_ENABLE);
usart_word_length_set(uartx->uart_x, uartx->data_length);
usart_parity_config(uartx->uart_x, uartx->parity);
usart_enable(uartx->uart_x);
}

15.4.2重定向函數int fputc(int ch, FILE *f)

要使用Printf,重定向函數fputc是必須的。在C 語言標準庫中,fputc函數是printf 函數內部的一個函數,功能是將字符ch寫入到文件指針file所指向文件的當前寫指針位置,簡單理解就是把字符寫入到特定文件中。我們使用USART函數重新修改fputc函數內容,達到類似“寫入”的功能。

fputc定義在bsp_uart.c中

C
int fputc(int ch, FILE *f)
{
driver_uart_transmit_byte(&BOARD_UART,(uint8_t)ch);
return ch;
}

這個函數比較簡單,就是調用了接口driver_uart_transmit_byte,該接口定義在driver_uart.c中:

C
Drv_Err driver_uart_transmit_byte(typdef_uart_struct *uartx,uint8_t data)
{
uint32_t timeout = driver_tick;
while(uartx->uart_control.Com_Flag.Bits.SendState==1)
{
if((timeout+UART_TIMEOUT_MS) <= driver_tick)?
{
uartx->uart_control.Com_Flag.Bits.SendState=0;
return DRV_ERROR;
}
}

Drv_Err uart_state=DRV_SUCCESS;
uartx->uart_control.Com_Flag.Bits.SendSucess=0;
uartx->uart_control.Com_Flag.Bits.SendState=1;
uart_state=driver_uart_flag_wait_timeout(uartx,USART_FLAG_TBE,SET);
usart_data_transmit(uartx->uart_x,data);
uartx->uart_control.Com_Flag.Bits.SendSucess=1;
uartx->uart_control.Com_Flag.Bits.SendState=0;
return uart_state;
}

這段代碼作用是,循環去讀串口的TBE標志位,并且將待發送的數據寫到串口寄存器中。

15.4.3main函數實現

串口初始化完成并定義好fputc重定向函數后,就可以通過printf函數往電腦上打印數據了。以下main函數:

C
int main(void)
{
delay_init();
bsp_uart_init(&BOARD_UART);
bsp_led_init(&LED0);
while(1)
{
delay_ms(1000);
bsp_led_toggle(&LED0);
printf("printf:system driver_tick is %lld \r\n",driver_tick);
}
}

本例程main函數首先進行了延時函數初始化,再配置開發板上的USB串口,并設置了一個LED燈用來提示代碼運行。while(1)循環中先延時1s,再翻轉一次LED狀態,接著使用printf函數打印系統運行tick時間。

15.5實驗結果

使用USB-TypeC線,連接電腦和板上USB to UART口后,配置好串口調試助手,即可看到每秒鐘串口打印的數據了。

教程GD32 MCU方案商聚沃科技原創發布,了解更多GD32 MCU教程,關注聚沃科技官網

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

    關注

    6032

    文章

    44514

    瀏覽量

    632941
  • 串口
    +關注

    關注

    14

    文章

    1543

    瀏覽量

    76184
  • 開發板
    +關注

    關注

    25

    文章

    4943

    瀏覽量

    97188
  • USART
    +關注

    關注

    1

    文章

    195

    瀏覽量

    30790
  • GD32
    +關注

    關注

    7

    文章

    403

    瀏覽量

    24218
收藏 人收藏

    評論

    相關推薦

    STM32CUBEMX開發GD32F303(8)----USART收發配置

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中進行開發,同時通過GD32303C_START開發板內進行驗證。
    的頭像 發表于 11-29 10:40 ?3102次閱讀
    STM32CUBEMX<b class='flag-5'>開發</b><b class='flag-5'>GD32F303</b>(8)----<b class='flag-5'>USART</b>收發配置

    STM32CUBEMX開發GD32F303(9)----USART通過DMA收發

    概述 本章STM32CUBEMX配置STM32F103,并且在GD32F303中進行開發,同時通過GD32303C_START開發板內進行驗
    的頭像 發表于 11-29 11:15 ?2027次閱讀
    STM32CUBEMX<b class='flag-5'>開發</b><b class='flag-5'>GD32F303</b>(9)----<b class='flag-5'>USART</b>通過DMA收發

    GD32F470紫藤開發板使用手冊】第九 USART-printf打印實驗

    通過本實驗主要學習以下內容: 串口簡介 GD32F470串口工作原理 使用printf打印信息
    的頭像 發表于 05-13 10:14 ?1613次閱讀
    【<b class='flag-5'>GD32F</b>470紫藤<b class='flag-5'>派</b><b class='flag-5'>開發板</b><b class='flag-5'>使用手冊</b>】第九<b class='flag-5'>講</b>  <b class='flag-5'>USART-printf</b><b class='flag-5'>打印</b><b class='flag-5'>實驗</b>

    GD32F303】星空介紹

    一、開發板介紹星空GD開發板是由旗點科技推出的一款GD32開發板,板載
    發表于 09-11 17:55

    【星空GD32F303開發板試用體驗】開箱+環境搭建

    Watchpoint: 4Load "G:\\星空GD32F303開發板\\03 例程\\Project\\04_USART_Printf\\MDK-ARM\\output
    發表于 10-18 14:15

    【星空GD32F303開發板試用體驗】開箱+環境搭建

    完全,APM32F0xx_SDK解包,到星空GD32F303開發板\03 例程\Project\04_USART_printf\MDK-A
    發表于 11-02 15:36

    星空GD32F303開發板的相關資料下載

    一、開發板介紹星空GD開發板是由旗點科技推出的一款GD32開發板,板載
    發表于 12-10 08:27

    GD32F303開發板介紹

    目錄如下,持續更新~~【1】星空GD32F303開發板介紹 與 文章目錄1. 串口基礎概念USART數據格式一般分為啟動位、數據幀、可能的奇偶校驗位、停止位,如圖4.34所示。啟動位
    發表于 01-17 08:06

    GD32F303固件庫開發

    的可以加群申請:615061293 。 GD32F303固件庫開發(1)----前期準備與燒錄 使用GDLINK、jlink、串口下載程序到GD芯片。 [https://blog.csdn.net
    的頭像 發表于 07-27 09:27 ?1109次閱讀
    <b class='flag-5'>GD32F303</b>固件庫<b class='flag-5'>開發</b>

    GD32H757Z海棠開發板使用手冊】第九 USART-printf打印實驗

    通過本實驗主要學習以下內容: ?串口簡介 ?GD32H757串口工作原理 ?使用printf打印信息
    的頭像 發表于 05-15 11:39 ?628次閱讀
    【<b class='flag-5'>GD</b>32H757Z海棠<b class='flag-5'>派</b><b class='flag-5'>開發板</b><b class='flag-5'>使用手冊</b>】第九<b class='flag-5'>講</b> <b class='flag-5'>USART-printf</b><b class='flag-5'>打印</b><b class='flag-5'>實驗</b>

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

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

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

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

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

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

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

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

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

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