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