上一篇中介紹了UART的收發(fā)數(shù)據(jù)操作,那些操作都是基于外設(shè)庫的,而不是采用Harmony的動(dòng)態(tài)驅(qū)動(dòng),也沒有采用狀態(tài)機(jī)的機(jī)制。本篇就來介紹一下如何使用Harmony的動(dòng)態(tài)驅(qū)動(dòng)和狀態(tài)機(jī)來編寫程序。其實(shí)狀態(tài)機(jī)是挺簡單的,就是事先定義好可能發(fā)生的哪些狀態(tài),然后主循環(huán)里根據(jù)不同的狀態(tài)進(jìn)行不同的處理,這個(gè)在項(xiàng)目中也是比較常用的方法。
注意Dynamic的驅(qū)動(dòng)對象都需要有一個(gè)Open動(dòng)作來創(chuàng)建一個(gè)Handle,后續(xù)所有操作都是用Handle來代表這個(gè)驅(qū)動(dòng)對象。所有動(dòng)態(tài)驅(qū)動(dòng)的中斷都是采用注冊回調(diào)函數(shù)的方式來使用,無需到system_init中添加,也無需自己清除中斷標(biāo)識,驅(qū)動(dòng)已經(jīng)自己完成了。
另外要注意的一點(diǎn)是,串口接收一個(gè)字節(jié)后進(jìn)入了中斷,如果不使用Read接收一下,那么后續(xù)就再也無法進(jìn)入中斷,就會出現(xiàn)僅中斷一次的現(xiàn)象,因此,也不要在中斷中進(jìn)行耗時(shí)操作,避免沒有及時(shí)接收數(shù)據(jù),導(dǎo)致數(shù)據(jù)殘缺不全。
先在app.h文件中定義狀態(tài)機(jī)和UART要使用的相關(guān)變量結(jié)構(gòu)體,使用結(jié)構(gòu)體也是滿方便的。
在app.c中編寫應(yīng)用程序,包含頭文件之后,初始化函數(shù)編寫,這里的初始化不是底層的初始化,而是初始化UART的相關(guān)變量,并創(chuàng)建句柄。第一步要initial(open一個(gè)客戶端),然后判斷創(chuàng)建的客戶端時(shí)候有效,有效的話,就創(chuàng)建中斷回調(diào)函數(shù),中斷程序的內(nèi)容直接在回調(diào)函數(shù)里編寫就可以了。
編寫中斷回調(diào)函數(shù)內(nèi)容程序,收到一個(gè)數(shù)據(jù)后存儲到數(shù)據(jù)緩沖區(qū),并置位接收完成標(biāo)志位
發(fā)送數(shù)據(jù)的函數(shù),發(fā)送采用查詢方式
編寫Uart_Task()函數(shù),狀態(tài)里就在這里處理,初始化狀態(tài)時(shí)進(jìn)行初始化,然后進(jìn)入接收數(shù)據(jù)狀態(tài),接收到數(shù)據(jù)后回發(fā),并在OLED上顯示接收到的字節(jié)數(shù)。
在APP_Tasks()中循環(huán)調(diào)用Uart_Task(),以處理接收到的數(shù)據(jù)。
編譯,下載程序到開發(fā)板,打開串口軟件測試
OLED顯示效果
-
狀態(tài)機(jī)
+關(guān)注
關(guān)注
2文章
492瀏覽量
27649
發(fā)布評論請先 登錄
相關(guān)推薦
為什么PIC32的Harmony編寫沒有交互的狀態(tài)機(jī)?
什么是有限狀態(tài)機(jī)呢
狀態(tài)機(jī)原理在控制程序設(shè)計(jì)中的應(yīng)用
簡述使用QII狀態(tài)機(jī)向?qū)绾蝿?chuàng)建一個(gè)狀態(tài)機(jī)
![<b class='flag-5'>簡述</b>使用QII<b class='flag-5'>狀態(tài)機(jī)</b>向?qū)绾蝿?chuàng)建一個(gè)<b class='flag-5'>狀態(tài)機(jī)</b>](https://file.elecfans.com/web1/M00/53/54/pIYBAFsg4dKAB1bnAAAlWZ49GCw970.jpg)
FPGA之狀態(tài)機(jī)的功能簡述與學(xué)習(xí)建議
狀態(tài)機(jī)如何簡化PLC程序的編寫
FPGA:狀態(tài)機(jī)簡述
![FPGA:<b class='flag-5'>狀態(tài)機(jī)</b><b class='flag-5'>簡述</b>](https://file.elecfans.com/web1/M00/CE/BE/pIYBAF-jzASAShR6AACiktqHlng534.png)
基于事件驅(qū)動(dòng)的有限狀態(tài)機(jī)介紹
狀態(tài)模式(狀態(tài)機(jī))
![<b class='flag-5'>狀態(tài)</b>模式(<b class='flag-5'>狀態(tài)機(jī)</b>)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
基于事件驅(qū)動(dòng)的有限狀態(tài)機(jī)介紹
如何使用FSME來定制狀態(tài)機(jī)
![如何使用FSME<b class='flag-5'>來</b>定制<b class='flag-5'>狀態(tài)機(jī)</b>](https://file1.elecfans.com/web2/M00/8E/6E/wKgaomTHHUWAAZpjAACk3vZlG2s624.jpg)
評論