在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

【GD32H757Z海棠派開發(fā)板使用手冊】第九講 USART-printf打印實驗

聚沃科技 ? 2024-05-15 11:39 ? 次閱讀
wKgZomYgeJOAUiXJAB6mQrDJGEg027.png

9.1實驗內容

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

9.2實驗原理

9.2.1串口簡介

串口,從廣義上看,指所有串行通信接口,比如RS232、RS422RS485、SPI、IIC等。串行通訊是指僅用一根接收線和一根發(fā)送線就能將數(shù)據(jù)以位進行傳輸?shù)耐ㄓ嵎绞?。和串行通訊相對應的是并行通訊,并?a href="http://www.xsypw.cn/v/tag/1301/" target="_blank">通信指一個傳輸接口可以傳輸8個bit即一個byte(有時甚至更多),雖然串行通信比并行通信慢,但是串口可以在僅僅使用兩根線的情況下就能實現(xiàn)數(shù)據(jù)的傳輸。

對于GD32H757來說,串口一般特指USART(通用同步異步收發(fā)器 )和UART(通用異步收發(fā)器 )。USART/UART提供了一個靈活方便的串行數(shù)據(jù)交換接口,數(shù)據(jù)幀可以通過全雙工或半雙工,同步或異步的方式進行傳輸。海棠派開發(fā)板搭載的GD32H757最多有8個串口(USART+UART), 對于一般應用來說足夠使用了。

9.2.2串口通信幀介紹

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

wKgZomZBdHiABIwiAAHgknaaCew303.png

下面來介紹下串口數(shù)據(jù)幀組成。

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

wKgZomZBdIWACJN4AAGZCDszKEQ933.png

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

空閑:串口TX或RX數(shù)據(jù)線上沒有傳輸任何數(shù)據(jù)時,則該線處于為空閑狀態(tài)??臻e是TX和RX都是處于高電平。

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

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

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

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

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

9.2.3串口波特率

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

現(xiàn)在重點介紹下GD32H757串口接收器的工作原理。GD32H757串口接收器支持16倍(默認)過采樣和8倍過采樣,16位過采樣即發(fā)送方發(fā)送數(shù)據(jù)后,GD32470串口接受器會將每個bit采樣16次,如果是8倍過采樣,則采用8次。下圖為16位過采樣的示意圖:

wKgZomZELdmAQ3R4AAB9zxqzB34755.png

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

9.2.4GD32H757串口設置步驟

串口設置的一般步驟為:

  1. GPIO時鐘開啟、串口時鐘開啟
  2. GPIO設置,發(fā)送和接受都要設置為AF模式,且需要設置為正確的AF號
  3. 串口復位
  4. 串口參數(shù)配置,主要為波特率、數(shù)據(jù)位長度、校驗位設置、停止位長度
  5. 依據(jù)是否需要使用中斷或DMA進行中斷配置或DMA配置
  6. 使能串口
  7. 編寫中斷處理函數(shù)

9.3硬件設計

海棠派開發(fā)板的P1接口將USART0——PA9、PA10引出,讀者可以通過P1口使用USART0:

wKgZomZBdSWAAhvxAADKvexuyl4120.png

9.4代碼解析

9.4.1在driver_uart.c中定義了串口初始化函數(shù)driver_uart_init。

C
void driver_uart_init(typdef_uart_struct *uartx)
{
rcu_periph_clock_enable(uartx->rcu_uart_x);
/* USART configure */
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_RDATA(uartx->uart_x),NULL,DMA_Width_8BIT,DMA_PERIPH_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_TDATA(uartx->uart_x),NULL,DMA_Width_8BIT,DMA_MEMORY_TO_PERIPH);
// usart_interrupt_enable(uartx->uart_x,USART_INT_TC);
}
}

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

9.4.2重定向函數(shù)int fputc(int ch, FILE *f)

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

fputc定義在bsp_uart.c中

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

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

C
Drv_Err driver_uart_transmit_byte(typdef_uart_struct *uartx,uint8_t data)
{
__IO uint64_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.SendSuccess=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.SendSuccess=1;
uartx->uart_control.Com_Flag.Bits.SendState=0;

return uart_state;
}

這段代碼作用是,循環(huán)去讀串口的TBE標志位,并且將待發(fā)送的數(shù)據(jù)寫到串口寄存器中。

9.4.3main函數(shù)實現(xiàn)

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

C
int main(void)
{
//延時和公共驅動部分初始化
driver_init();
//串口初始化,DMA模式開啟
BOARD_UART.uart_mode_tx=MODE_DMA;
bsp_uart_init(&BOARD_UART);
bsp_led_init(&LED2);
//打開對應串口的中斷
nvic_irq_enable(USART0_IRQn,2,0);
while(1)
{
//printg標準打印(輪訓)
printf_log("\r\ndelay 1s \r\n");
delay_ms(1000);
bsp_led_toggle(&LED2);
printf_log("printf:system driver_tick is %lld \r\n",driver_tick);

//輪訓方式打印
memset(uart_poll_buff,0,50);//清零buff
sprintf((char*)uart_poll_buff,"poll transmit:system driver_tick is %lld \r\n",driver_tick);//格式化字符串
driver_uart_poll_transmit(&BOARD_UART,uart_poll_buff,strlen((const char*)uart_poll_buff));
printf_log("%s",uart_poll_buff);


//中斷方式打印
memset(uart_int_buff,0,50);
sprintf((char*)uart_int_buff,"int transmit:system driver_tick is %lld \r\n",driver_tick);
driver_uart_int_transmit(&BOARD_UART,uart_int_buff,strlen((const char*)uart_int_buff));
printf_log("%s",uart_int_buff);


//DMA方式打印
memset(uart_dma_buff,0,50);
sprintf((char*)uart_dma_buff,"dma transmit:system driver_tick is %lld \r\n",driver_tick);
driver_uart_dma_transmit(&BOARD_UART,uart_dma_buff,strlen((const char*)uart_dma_buff));
printf_log("%s",uart_dma_buff);

}
}

本例程main函數(shù)首先進行了延時函數(shù)初始化,并設置了一個LED燈用來提示代碼運行。while(1)循環(huán)中先延時1s,再翻轉一次LED狀態(tài),接著使用printf函數(shù)打印系統(tǒng)運行tick時間。

本例程也同步做了printf打印在LCD屏幕的功能,將LCD屏接在海棠派開發(fā)板上后,打印信息將同步在顯示屏上顯示。

9.5實驗結果

使用USB轉TTL串口的連接線后,配置好串口調試助手,即可看到每秒鐘串口打印的數(shù)據(jù)了。

教程GD32 MCU方案商聚沃科技原創(chuàng)發(fā)布,了解更多GD32 MCU教程,關注聚沃科技官網(wǎng)

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

    關注

    1

    文章

    64

    瀏覽量

    18721
  • 開發(fā)板
    +關注

    關注

    25

    文章

    5050

    瀏覽量

    97471
  • USART
    +關注

    關注

    1

    文章

    195

    瀏覽量

    30857
  • GD32
    +關注

    關注

    7

    文章

    403

    瀏覽量

    24351
  • Printf
    +關注

    關注

    0

    文章

    83

    瀏覽量

    13660
收藏 人收藏

    評論

    相關推薦

    GD32H757Z海棠開發(fā)板使用手冊】第四 FMC-片內Flash擦寫讀實驗

    FMC即Flash控制器,其提供了片上Flash操作所需要的所有功能,在GD32H7XX系列MCU中,具有高達3840KB字節(jié)的片上閃存可用于存儲指令或數(shù)據(jù)。FMC也提供了扇區(qū)擦除和整片擦除操作以及
    的頭像 發(fā)表于 04-19 10:09 ?1280次閱讀
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊</b>】第四<b class='flag-5'>講</b> FMC-片內Flash擦寫讀<b class='flag-5'>實驗</b>

    GD32F470紫藤開發(fā)板使用手冊第九 USART-printf打印實驗

    通過本實驗主要學習以下內容: 串口簡介 GD32F470串口工作原理 使用printf打印信息
    的頭像 發(fā)表于 05-13 10:14 ?1740次閱讀
    【<b class='flag-5'>GD</b>32F470紫藤<b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</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>

    GD32H757Z海棠開發(fā)板使用手冊】第十三講 SDIO-SD卡讀寫實驗

    通過本實驗主要學習以下內容: ?USB協(xié)議基本原理 ?GD32H7xx USBHS的使用 ?虛擬鍵盤的協(xié)議原理及使用
    的頭像 發(fā)表于 06-06 11:26 ?1919次閱讀
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊</b>】第十三講 SDIO-SD卡讀寫<b class='flag-5'>實驗</b>

    YL-51開發(fā)板使用手冊

    YL-51開發(fā)板使用手冊,YL-51開發(fā)板使用手冊YL-51開發(fā)板使用手冊YL-51
    發(fā)表于 05-10 16:31 ?21次下載

    開發(fā)板燒寫測試使用手冊

    開發(fā)板燒寫測試使用手冊,有需要的下來看看
    發(fā)表于 06-03 14:30 ?0次下載

    51開發(fā)板使用手冊

    51開發(fā)板使用手冊,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 11-23 15:45 ?11次下載

    KC705開發(fā)板英文使用手冊

    KC705開發(fā)板英文使用手冊
    發(fā)表于 11-01 10:19 ?5次下載

    iTOP-3399開發(fā)板使用手冊大更新

    iTOP-3399開發(fā)板使用手冊大更新
    的頭像 發(fā)表于 12-10 15:46 ?1369次閱讀
    iTOP-3399<b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊</b>大更新

    GD32H757Z海棠開發(fā)板使用手冊】第二 GPIO-按鍵查詢檢測實驗

    2.1實驗內容通過本實驗主要學習以下內容:GPIO輸入功能原理;按鍵查詢輸入檢測原理;2.2實驗原理2.2.1GPIO輸入功能原理GD32H7XX系列MCUGPIO輸入配置結構如下圖所
    的頭像 發(fā)表于 04-17 10:42 ?741次閱讀
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊</b>】第二<b class='flag-5'>講</b> GPIO-按鍵查詢檢測<b class='flag-5'>實驗</b>

    GD32H757Z海棠開發(fā)板使用手冊】第五 PMU-低功耗實驗

    PMU即電源管理單元,其內部結構下圖所示,由該圖可知,GD32H7XX系列MCU具有三個電源域,包括VDD/VDDA電源域、0.9V電源域以及電池備份域,其中,VDD /VDDA域由電源直接供電
    的頭像 發(fā)表于 04-20 09:32 ?1035次閱讀
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊</b>】第五<b class='flag-5'>講</b> PMU-低功耗<b class='flag-5'>實驗</b>

    GD32H757Z海棠開發(fā)板使用手冊】第八 ADC-規(guī)則組多通道采樣實驗

    通過本實驗主要學習以下內容: ADC的簡介 GD32FH757 ADC工作原理 DMA和DMAMUX的原理 規(guī)則組多通道循環(huán)采樣
    的頭像 發(fā)表于 05-14 09:39 ?634次閱讀
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊</b>】第八<b class='flag-5'>講</b> ADC-規(guī)則組多通道采樣<b class='flag-5'>實驗</b>

    GD32H757Z海棠開發(fā)板使用手冊】第十 USART-中斷串口收發(fā)實驗

    通過本實驗主要學習以下內容: ?使用中斷進行串口收發(fā)
    的頭像 發(fā)表于 05-16 10:30 ?684次閱讀
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊</b>】第十<b class='flag-5'>講</b> <b class='flag-5'>USART</b>-中斷串口收發(fā)<b class='flag-5'>實驗</b>

    GD32H757Z海棠開發(fā)板使用手冊】第十一講 SPI-SPI NOR FLASH讀寫實驗

    通過本實驗主要學習以下內容: ?SPI簡介 ?GD32H7 SPI簡介 ?SPI NOR FLASH——GD25Q128ESIGR簡介 ?使用GD32H7 SPI接口實現(xiàn)對
    的頭像 發(fā)表于 06-04 11:42 ?1007次閱讀
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊</b>】第十一講 SPI-SPI NOR FLASH讀寫<b class='flag-5'>實驗</b>

    GD32H757Z海棠開發(fā)板使用手冊】第十二 SDIO-SD卡讀寫實驗

    SD卡是一種主要以Nand Flash作為存儲介質,具有體積小、數(shù)據(jù)傳輸速度快以及支持熱插拔的優(yōu)點。如今,已被廣泛應用于數(shù)碼相機、便攜式移動設備以及手機等多種設備中。SD卡的驅動一般有SPI接口或SDIO接口,本例程介紹使用GD32F4xx的SDIO接口驅動SD卡的實現(xiàn)。
    的頭像 發(fā)表于 06-05 10:35 ?719次閱讀
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊</b>】第十二<b class='flag-5'>講</b> SDIO-SD卡讀寫<b class='flag-5'>實驗</b>

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

    通過本實驗主要學習以下內容: ?SPI通信協(xié)議,參考19.2.1東方紅開發(fā)板使用手冊 ?GD32F303 SPI操作方式,參考19.2.2東方紅
    的頭像 發(fā)表于 06-20 09:50 ?904次閱讀
    【<b class='flag-5'>GD</b>32F303紅楓<b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊</b>】第二十<b class='flag-5'>講</b> SPI-SPI NAND FLASH讀寫<b class='flag-5'>實驗</b>
    主站蜘蛛池模板: 一级黄色片欧美| 真人午夜a一级毛片| 中文字幕一区二区三区视频在线| 91国在线啪精品一区| 欧美不卡一区| 欧洲mv日韩mv国产mv| 国产精品欧美一区二区三区 | 国产主播在线观看| 成人网18免费下| www.福利| 婷婷在线影院| 久久成人综合网| 免费一级黄| 一级毛片a| 国产欧美网站| 2021久久精品99精品久久| 亚洲啊v在线| 99久久久精品| 91午夜在线观看| 日韩 三级| 成人欧美一区二区三区黑人免费| 91精品福利久久久| 四虎看黄| sihu在线| 在线h网站| 一级毛片一级毛片一级毛片aa| 韩国三级hd中文字幕好大| 国产精品久久久久影院免费| 末发育女一区二区三区| 久久免费精品国产72精品剧情| 海外毛片| 色婷婷色丁香| 日日草天天干| 久久久国产在线| 国模沟沟一区二区三区| 日女人免费视频| 婷婷色人阁| 天天草天天草| 欧美色图一区二区| 国产嫩草影院在线观看| 38pao强力打造永久免费高清视频|