上一篇中介紹了UART的收發數據操作,那些操作都是基于外設庫的,而不是采用Harmony的動態驅動,也沒有采用狀態機的機制。本篇就來介紹一下如何使用Harmony的動態驅動和狀態機來編寫程序。其實狀態機是挺簡單的,就是事先定義好可能發生的哪些狀態,然后主循環里根據不同的狀態進行不同的處理,這個在項目中也是比較常用的方法。
注意Dynamic的驅動對象都需要有一個Open動作來創建一個Handle,后續所有操作都是用Handle來代表這個驅動對象。所有動態驅動的中斷都是采用注冊回調函數的方式來使用,無需到system_init中添加,也無需自己清除中斷標識,驅動已經自己完成了。
另外要注意的一點是,串口接收一個字節后進入了中斷,如果不使用Read接收一下,那么后續就再也無法進入中斷,就會出現僅中斷一次的現象,因此,也不要在中斷中進行耗時操作,避免沒有及時接收數據,導致數據殘缺不全。
先在app.h文件中定義狀態機和UART要使用的相關變量結構體,使用結構體也是滿方便的。
在app.c中編寫應用程序,包含頭文件之后,初始化函數編寫,這里的初始化不是底層的初始化,而是初始化UART的相關變量,并創建句柄。第一步要initial(open一個客戶端),然后判斷創建的客戶端時候有效,有效的話,就創建中斷回調函數,中斷程序的內容直接在回調函數里編寫就可以了。
編寫中斷回調函數內容程序,收到一個數據后存儲到數據緩沖區,并置位接收完成標志位
發送數據的函數,發送采用查詢方式
編寫Uart_Task()函數,狀態里就在這里處理,初始化狀態時進行初始化,然后進入接收數據狀態,接收到數據后回發,并在OLED上顯示接收到的字節數。
在APP_Tasks()中循環調用Uart_Task(),以處理接收到的數據。
編譯,下載程序到開發板,打開串口軟件測試
OLED顯示效果
-
狀態機
+關注
關注
2文章
493瀏覽量
28067
發布評論請先 登錄
為什么PIC32的Harmony編寫沒有交互的狀態機?
什么是有限狀態機呢
狀態機原理在控制程序設計中的應用
基于事件驅動的有限狀態機介紹
狀態模式(狀態機)

評論