控制系統(tǒng)軟件分為3個部分:主程序、線程1、線程2。其中,主程序負(fù)責(zé)硬件的初始化,負(fù)責(zé)線程1和線程2的創(chuàng)建,還負(fù)責(zé)線程間通信用的消息隊列的創(chuàng)建;線程1負(fù)責(zé)處理觸摸屏人機界面,線程2負(fù)責(zé)處理后臺控制邏輯??刂栖浖鞒虉D如圖2所示。
軟件的設(shè)計過程,分別在3個開發(fā)工具中按順序完成,簡述如下:
1)在硬件配置工具STM32CubeMX中,根據(jù)配置向?qū)瓿娠@示屏的LTDC顯示控制器的設(shè)置,完成FMC外置內(nèi)存控制器的設(shè)置,完成連接繼電器的GPIO口的配置,完成ADC溫度采集的配置、計時周期為1 s的定時器的設(shè)置。在STM32CubeMX中還要完成嵌入式實時操作系統(tǒng)的設(shè)置,以在應(yīng)用程序中開啟多線程;新建2個線程,線程1負(fù)責(zé)處理觸摸屏人機界面,線程2負(fù)責(zé)處理后臺控制邏輯。
2)用TouchGFX圖形界面編輯器制作出如圖3所示的觸摸屏界面。
3)在代碼編輯器IAR workbench中,編輯修改上述兩步所生成的程序代碼,以實現(xiàn)圖2所示的邏輯。用戶界面中設(shè)定變量(溫度和時間),包括“啟動”和“停止”按鈕的動作,在屏幕刷新的過程中,由線程1通過消息隊列傳遞給線程2;線程2每秒采集一次當(dāng)前的溫度并計算一次累加保溫時間,將當(dāng)前溫度和剩余時間通過消息隊列傳遞給線程1,線程1再將收到的值顯示在屏幕上。
系統(tǒng)加電后,當(dāng)用戶按下“啟動”按鍵時開始循環(huán)工作,直到累計保溫時間達(dá)到預(yù)定時間,或者按下“停止”按鍵。為了保證溫度的采樣有較高的精度,負(fù)責(zé)溫度采集的ADC采樣模塊采集10個值,再對10個值取平均值,作為最終的溫度值。為了保證保溫時間的累加有較高的精度,定時器以1 s為周期持續(xù)定時,當(dāng)1 s計時結(jié)束后,產(chǎn)生中斷,又開始新一輪的1 s計時。定時器更新中斷觸發(fā)ADC溫度采集和邏輯處理,由于定時器獨立于CPU內(nèi)核運行,不占用CPU的邏輯處理時間,所以可以保證高的計時精度。