亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

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

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

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

基于環(huán)形隊列的UART收發(fā)回顯實驗

瑞薩嵌入式小百科 ? 來源:瑞薩嵌入式小百科 ? 2025-10-27 13:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

18.7

實驗3:基于環(huán)形隊列的UART收發(fā)回顯

在實際項目開發(fā)中,由于有些串口不具備FIFO(如SCI1和SCI2)或FIFO的buffer比較小,這可能會在數(shù)據(jù)處理速度小于數(shù)據(jù)接收速度的時候,導(dǎo)致數(shù)據(jù)的丟失。因此我們可以設(shè)計一個隊列來避免這一問題。在本實驗中,我們使用環(huán)形隊列來實現(xiàn)實驗1的串口收發(fā)回顯,將串口接收到的數(shù)據(jù)暫存在隊列中,待完成一次接收后再將隊列中的數(shù)據(jù)全部發(fā)出去。

隊列是一種特殊的線性表,只允許在隊列頭(head)刪除元素,在隊列尾(tail)添加元素。當(dāng)隊列添加一個元素,隊列尾向后移動,當(dāng)隊列刪除一個元素,同樣,刪除一個元素,隊列頭向后移動,如圖19_18。

a5979420-b2eb-11f0-8c8f-92fbcf53809c.png

圖19-18 隊列圖示

由于存儲空間是有限的,如果使用線性隊列,刪除元素后就會空出一段存儲空間,這會造成很大的浪費。因此實際上我們更多使用環(huán)形隊列。并不是說這段存儲空間是環(huán)形的,而是頭指針和尾指針到達(dá)存儲空間末尾后會回到存儲空間起點。因此在邏輯上這是循環(huán)的,如圖19_19。

a5f75432-b2eb-11f0-8c8f-92fbcf53809c.png

圖19-19 環(huán)形隊列

18.7.1

硬件設(shè)計

本實驗使用到開發(fā)板的串口和LED燈,其原理圖在本章實驗1和前面的點亮LED燈章節(jié)有介紹,這里不進(jìn)行贅述。

18.7.2

軟件設(shè)計

18.7.2.1

新建工程

因為本節(jié)的UART實驗例程與上一個實驗例程的FSP配置以及UART相關(guān)的一些代碼基本一致,因此我們可以直接以前面的“19_UART_Receive_Send”工程為基礎(chǔ)進(jìn)行修改。

對于e2studio開發(fā)環(huán)境:拷貝一份我們之前的e2s工程模板“19_UART_Receive_Send”,然后將工程文件夾重命名為“19_UART_Circular_Queue”,最后再將它導(dǎo)入到我們的e2studio工作空間中。

對于Keil開發(fā)環(huán)境:拷貝一份我們之前的Keil工程模板“19_UART_Receive_Send”,然后將工程文件夾重命名為“19_UART_Circular_Queue”,并進(jìn)入該文件夾里面雙擊Keil工程文件,打開該工程。

FSP配置完全一致,因此我們省略掉這部分。

18.7.2.2

環(huán)形隊列的實現(xiàn)

列表8:代碼清單19-7:環(huán)形隊列頭文件內(nèi)容

左右滑動查看完整內(nèi)容

#defineDATA_LEN300//隊列緩存大小
typedefstruct
{
uint16_thead;//頭指針
uint16_ttail;//尾指針
uint8_tdata[DATA_LEN];//隊列數(shù)據(jù)
}Circular_queue_t;
externCircular_queue_tCircular_queue;//環(huán)形隊列全局變量
boolQueue_Init(Circular_queue_t*circular_queue);//初始化隊列
boolQueue_isEmpty(Circular_queue_t*circular_queue);//判斷隊列是否為空
boolQueue_isFull(Circular_queue_t*circular_queue);//判斷隊列是否已滿
boolQueue_Wirte(Circular_queue_t*circular_queue,uint8_t*string, uint16_
→t len);//寫數(shù)據(jù)
boolQueue_Read(Circular_queue_t*circular_queue,uint8_t*string,uint16_t?
→len);//讀數(shù)據(jù)
uint16_tQueue_HadUse(Circular_queue_t *circular_queue);//返回隊列中數(shù)據(jù)的長度
uint16_tQueue_NoUse(Circular_queue_t*circular_queue);//返回未使用數(shù)據(jù)的長度

環(huán)形隊列相關(guān)函數(shù)的具體定義可以在例程的circular_queue.c中查看,這里就不贅述了。

18.7.2.3

串口中斷回調(diào)函數(shù)

debug_uart4_callback串口中斷回調(diào)函數(shù)的內(nèi)容修改成如下所示。

列表9:代碼清單19-8:串口中斷回調(diào)函數(shù)

左右滑動查看完整內(nèi)容

/*串口中斷回調(diào)*/
voiddebug_uart4_callback(uart_callback_args_t* p_args)
{
switch(p_args->event)
{
caseUART_EVENT_RX_CHAR:
{
/*接收到數(shù)據(jù)后馬上寫入隊列中*/
Queue_Wirte(&Circular_queue,(uint8_t*) &p_args->data,1);
break;
}
caseUART_EVENT_TX_COMPLETE:
{
uart_send_complete_flag=true;
break;
}
default:
break;
}
}

18.7.2.4

hal_entry入口函數(shù)

hal_entry入口函數(shù)的內(nèi)容修改成如下所示。

列表10:代碼清單19-9:hal_entry入口函數(shù)

左右滑動查看完整內(nèi)容

voidhal_entry(void)
{
/*TODO:add your own code here */
uint8_tRead_Buffer[DATA_LEN];
uint16_tRead_Length;
LED_Init();
// LED 初始化
Debug_UART4_Init();// SCI4 UART 調(diào)試串口初始化
Queue_Init((Circular_queue_t*)&Circular_queue);//環(huán)形隊列初始化
printf("這是一個串口環(huán)形隊列例程
");
printf("打開串口助手發(fā)送數(shù)據(jù) 5 個及以上的數(shù)據(jù),接收窗口會打印所發(fā)送的數(shù)據(jù)
");
while(1)
{
if(Queue_isEmpty(&Circular_queue) ==false)//判斷隊列中的數(shù)據(jù)不為空
{
Read_Length =Queue_HadUse(&Circular_queue);
if( Read_Length >=5)
// 如果隊列中的數(shù)據(jù)大于等于 5 個,開始打印
隊列中的所有數(shù)據(jù)
{
printf("Read_Length=%d: ", Read_Length);
memset(Read_Buffer,0, DATA_LEN);
/* 讀出 Read_Length 個數(shù)據(jù) */
Queue_Read(&Circular_queue, Read_Buffer, Read_Length);
printf("%s
", Read_Buffer);
 }
}
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MILLISECONDS);
}
#ifBSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}

18.7.3

下載驗證

保證開發(fā)板相關(guān)硬件連接正確,用Type-CUSB線連接開發(fā)板“USBTOUART”接口電腦。本次實驗需要使用到串口調(diào)試助手,配置好串口參數(shù)并打開串口后,在調(diào)試助手的發(fā)送區(qū)域輸入超過5個的任意字符并點擊發(fā)送,即可在接收區(qū)看見返回字符,不一定馬上全部返回全部的已發(fā)送的字符,可以多發(fā)送幾次數(shù)據(jù)觀察,數(shù)據(jù)并沒有丟失。

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

    關(guān)注

    22

    文章

    1603

    瀏覽量

    110838
  • fifo
    +關(guān)注

    關(guān)注

    3

    文章

    403

    瀏覽量

    45380
  • 串口
    +關(guān)注

    關(guān)注

    15

    文章

    1602

    瀏覽量

    81605
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1292

    瀏覽量

    105851

原文標(biāo)題:實驗3:基于環(huán)形隊列的UART收發(fā)回顯——瑞薩RA系列FSP庫開發(fā)實戰(zhàn)指南(49)

文章出處:【微信號:瑞薩嵌入式小百科,微信公眾號:瑞薩嵌入式小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

    UART波特率計算及UART收發(fā)回實驗

    決定串口波特率的寄存器有BRR(Bite Rate Rigister),SEMR(Serial Extended Mode Rigister)和MDDR(Modulation Duty Register)。波特率與寄存器的值的公式如圖19_8 所示。N表示BRR寄存器的值,B是波特率,PCLK 是外設(shè)時鐘的頻率(單位:MHz)。BGDM(Baud Rate Generator Double-Speed Mode Select)在RA6M5中,SCI掛載在PHBIU(Peripheral High Speed Bus Interface Unit)總線上,使用時鐘PCLKA,該時鐘默認(rèn)頻率為100MHz。
    的頭像 發(fā)表于 10-17 09:51 ?1992次閱讀
    <b class='flag-5'>UART</b>波特率計算及<b class='flag-5'>UART</b><b class='flag-5'>收發(fā)回</b><b class='flag-5'>顯</b><b class='flag-5'>實驗</b>

    基于STM32的串口環(huán)形隊列IAP調(diào)試

    基于STM32的串口環(huán)形隊列IAP調(diào)試心得
    的頭像 發(fā)表于 09-18 15:33 ?2308次閱讀
    基于STM32的串口<b class='flag-5'>環(huán)形</b><b class='flag-5'>隊列</b>IAP調(diào)試

    環(huán)形隊列在串口數(shù)據(jù)接收中的使用

    前言??書接上回,前文主要介紹了環(huán)形隊列的實現(xiàn)原理以及C語言實現(xiàn)及測試過程,本文將回歸到嵌入式平臺的應(yīng)用中,話不多說,淦,上干貨!實驗目的HAL庫下串口的配置及使用環(huán)形
    發(fā)表于 12-06 06:27

    如何使用隊列實現(xiàn)STM32串口環(huán)形緩沖?

    串口環(huán)形緩沖的好處是什么?如何使用隊列實現(xiàn)STM32串口環(huán)形緩沖?
    發(fā)表于 12-07 07:13

    如何將DMA和環(huán)形的FIFO隊列結(jié)合在一起來使用呢

    如何將DMA和環(huán)形的FIFO隊列結(jié)合在一起來使用呢?有哪些實驗步驟呢?
    發(fā)表于 12-09 08:05

    實現(xiàn)隊列環(huán)形緩沖的方法

    串口隊列環(huán)形緩沖區(qū)隊列串口環(huán)形緩沖的好處代碼實現(xiàn)隊列??要實現(xiàn)隊列
    發(fā)表于 02-21 07:11

    環(huán)形隊列的相關(guān)資料分享

    前言??當(dāng)代碼,不再是簡單的完成需求,對代碼進(jìn)行堆砌,而是開始思考如何寫出優(yōu)美代碼的時候,我們的代碼水平必然會不斷提升,今天,咱們來學(xué)習(xí)環(huán)形隊列結(jié)構(gòu)。環(huán)形隊列的基本概念??相信對數(shù)據(jù)結(jié)
    發(fā)表于 02-23 06:10

    環(huán)形隊列的操作如何去實現(xiàn)呢

    環(huán)形隊列結(jié)構(gòu)的定義是什么?環(huán)形隊列的操作如何去實現(xiàn)呢?
    發(fā)表于 02-25 06:35

    深度解析數(shù)據(jù)結(jié)構(gòu)與算法篇之隊列環(huán)形隊列的實現(xiàn)

    的位置。 02 — 環(huán)形隊列的實現(xiàn) 要想將元素放入隊列我們必須知道對頭和隊尾,在隊列長度不能無限大的條件下我們還要知道隊列的最大容量,我們還
    的頭像 發(fā)表于 06-18 10:07 ?2343次閱讀

    【STM32+cubemx】0005 HAL庫開發(fā):uart串口中斷和fifo環(huán)形隊列

    上一節(jié)我們學(xué)習(xí)了串口的輪詢收發(fā),以及HAL庫自帶的中斷收發(fā)。也分析了優(yōu)缺點,這一節(jié)我們來講講如何改寫HAL庫函數(shù),使它能更高效地收發(fā)數(shù)據(jù),更方便地使用。早些年在使用51單片機、AVR單片機的時候
    發(fā)表于 11-15 20:36 ?39次下載
    【STM32+cubemx】0005 HAL庫開發(fā):<b class='flag-5'>uart</b>串口中斷和fifo<b class='flag-5'>環(huán)形</b><b class='flag-5'>隊列</b>

    基于STM32的串口環(huán)形隊列IAP調(diào)試心得

    使用環(huán)形隊列,簡單點說就是個環(huán)形數(shù)組,一邊接收上位機數(shù)據(jù),一邊往flash里面寫。
    發(fā)表于 02-08 15:22 ?5次下載
    基于STM32的串口<b class='flag-5'>環(huán)形</b><b class='flag-5'>隊列</b>IAP調(diào)試心得

    嵌入式環(huán)形隊列和消息隊列的實現(xiàn)

    嵌入式環(huán)形隊列和消息隊列是實現(xiàn)數(shù)據(jù)緩存和通信的常見數(shù)據(jù)結(jié)構(gòu),廣泛應(yīng)用于嵌入式系統(tǒng)中的通信協(xié)議和領(lǐng)域。
    的頭像 發(fā)表于 04-14 11:52 ?2250次閱讀

    嵌入式環(huán)形隊列和消息隊列是如何去實現(xiàn)的?

    嵌入式環(huán)形隊列和消息隊列是實現(xiàn)數(shù)據(jù)緩存和通信的常見數(shù)據(jù)結(jié)構(gòu),廣泛應(yīng)用于嵌入式系統(tǒng)中的通信協(xié)議和領(lǐng)域。
    發(fā)表于 05-20 14:55 ?1540次閱讀

    裸機中環(huán)形隊列與RTOS中消息隊列有何區(qū)別呢?

    環(huán)形隊列”和“消息隊列”在嵌入式領(lǐng)域有應(yīng)用非常廣泛,相信有經(jīng)驗的嵌入式軟件工程師對它們都不陌生。
    的頭像 發(fā)表于 01-26 09:38 ?1246次閱讀
    裸機中<b class='flag-5'>環(huán)形</b><b class='flag-5'>隊列</b>與RTOS中消息<b class='flag-5'>隊列</b>有何區(qū)別呢?

    嵌入式環(huán)形隊列與消息隊列的實現(xiàn)原理

    嵌入式環(huán)形隊列,也稱為環(huán)形緩沖區(qū)或循環(huán)隊列,是一種先進(jìn)先出(FIFO)的數(shù)據(jù)結(jié)構(gòu),用于在固定大小的存儲區(qū)域中高效地存儲和訪問數(shù)據(jù)。其主要特點包括固定大小的數(shù)組和兩個指針(頭指針和尾指針
    的頭像 發(fā)表于 09-02 15:29 ?1591次閱讀