最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

第六章合集2:使用chatGPT編寫簡易示波器:touchGFX人機界面和數(shù)據(jù)采集

2023-02-17 16:24 作者:西郵嚴老師  | 我要投稿

6.3.2數(shù)據(jù)采集界面設計

(1)修改上一節(jié)的動態(tài)圖例程,將AD采樣結(jié)果,定時更新到graph上顯示。

程序邏輯是,通過cubeMX配置ADC,通過DMA方式,將AD采樣的數(shù)據(jù)存儲在數(shù)組中,存儲數(shù)量達到規(guī)定的值后,產(chǎn)生DMA中斷。

在MainView.cpp的handleTickEvent()定期刷新函數(shù)中,判斷是否采樣結(jié)束。如果結(jié)束了,則將數(shù)組中的數(shù)據(jù),更新到graph動態(tài)圖中,達到定期更新顯示采樣數(shù)據(jù)的示波器效果。

1)查看STM32F469I-DISCO開發(fā)板的原理圖(官方文檔“mb1189.pdf”),找到連接端子“Arduino UNO connector”部分,了解輸出端子管腳配置,我們發(fā)現(xiàn),合適作為ADC1_IN9輸入通道使用的管腳為PB1管腳。


圖6-12 查看原理圖獲得AD輸入管腳

2)打開工程路徑下的cubeMX工程,并配置ADC1的輸入為IN9通道,DMA設置為“從外設到內(nèi)存”,優(yōu)先級可以設置為高。

?

圖 6-13 設置DMA方式將采樣結(jié)果直接搬運到內(nèi)存圖

3)設置AD采樣參數(shù)。

為得到最高采樣率(2.4MHz),首先在cubeMX的“Clock Configuration”界面,將PCLK2設置為72MHz(默認為90MHz),如下圖所示:


?6-14 設置采樣時鐘

然后回到ADC1的配置界面,對ADC1做如下設置:


?6-15 設置AD采樣參數(shù)圖

如上圖所示,我們將ADC的時鐘設置為“PCLK2 divided by2”,采樣精度默認為12位(每次轉(zhuǎn)換需要15個時鐘),將“Continuous Conversion Mode”設置為“Enable”確保連續(xù)采樣,并將“DMA Continuous Request”設置為“Enable”,確保DMA搬運能連續(xù)執(zhí)行。采樣時間設置為3個時鐘周期(讀者可以選擇比較長的采樣時間,獲得較低的采樣率)。

在本例中,采樣率的計算方式為:(PCLK2/2)/15=2.4MHz,只有將PCLK2設置為72MHz,才能使得ADC的時鐘(PCLK2/2)最高,即36MHz(該單片機的最高ADC時鐘),而默認的PCLK2為90M Hz,如果按照默認的PCLK2,是不能得到最高采樣率的,讀者可以嘗試修改PCLK2的參數(shù),體會最高采樣率的設置技巧。

4)點擊cubeMX右上角的“GENERATE CODE”,然后進入工程文件夾,打開生成的MDK工程,點擊并打開“main.c”,在用戶定義的變量區(qū),增加AdcConvertedValue數(shù)組和 adcDmaOverFlag變量,數(shù)組用來存儲每次采樣的100個數(shù)據(jù),變量用來確定100個數(shù)據(jù)是否已經(jīng)采樣完成。


圖 6-16 在主函數(shù)申明采樣數(shù)組和采樣結(jié)束標志位

在主函數(shù)中,當初始化完成之后,增加DMA傳輸語句,該行程序啟動DMA傳輸,將ADC采樣的數(shù)據(jù),無需CPU介入,直接搬運到數(shù)組中,存儲完100個數(shù)據(jù)之后,產(chǎn)生DMA中斷。在采樣存儲過程中,數(shù)據(jù)存儲的地址會自動增加。如下圖所示:


圖 6-17 在主函數(shù)初始化完成后啟動ADC的DMA傳輸模式

5)點擊并打開中斷響應文件“stm32f4xx_it.c”,找到cubeMX自動生成的DMA中斷函數(shù),在每次100個數(shù)據(jù)采樣完成之后,系統(tǒng)會自動進入這個中斷,并執(zhí)行中斷響應函數(shù)。在該函數(shù)中,我們將采樣結(jié)束標志位adcDmaOverFlag置為1。如下圖所示:

?

圖 6-18 采樣結(jié)束后進入DMA中斷響應函數(shù)

由于adDmaOverFlag變量是在“main.c”中定義的,因此在“stm32f4xx_it.c”中使用時,請在該文件的用戶變量定義區(qū)

“/* USER CODE BEGIN EV */”和“/* USER CODE END EV */”之間增加“extern uint8_t adDmaOverFlag;”,申明該變量是外部變量。

6)回到touchGFX軟件界面,將本程序不需要的滾動條及其交互刪除,如下圖所示:


圖 6-19 刪除滾動條及交互操作

然后設置動態(tài)圖控件,將圖形的顯示點數(shù)、可見范圍設置為100,并將數(shù)據(jù)范圍更改為0-4095(本例使用的是12位ADC,采樣結(jié)果最大為4095)。


圖 6-20 設置graph的顯示范圍

7)點擊右下角的“Generate Code”,重新生成代碼,使用MDK重新打開生成的工程,打開“MainView.hpp”,將其中滾動條響應函數(shù)“sliderValueChanged(int )”刪除。


圖 6-21 刪除滾動條交互操作響應函數(shù)

8)打開“MainView.cpp”,將其中的滾動條響應函數(shù)、隨機數(shù)發(fā)生器函數(shù)刪除,本例中不需要使用。


圖 6-22 刪除滾動條交互操作響應函數(shù)和隨機函數(shù)發(fā)生器

然后修改“MainView.cpp”,增加包含文件“main.h”(含ADC_HandleTypeDef結(jié)構(gòu)體的定義),增加外部變量“hadc1”、 AdcConvertedValue[100]”、

“adcDmaOverFlag”申明,這些變量均在main.c中定義。如下圖所示:


圖 6-23 修改“MainView.cpp”將采樣結(jié)果更新到動態(tài)圖顯示

如上圖所示,在handleTickEvent()函數(shù)中,每隔100個handleTickEvent周期(每個周期約20ms),查詢DMA中斷標志位adcDmaOverFlag是否為1,如果為1,則表示DMA中斷已經(jīng)產(chǎn)生,100個點已經(jīng)采樣結(jié)束,可以將100個采樣數(shù)據(jù)更新到動態(tài)圖上面進行顯示。顯示完畢之后,將DMA中斷標志位adcDmaOverFlag置為0,并重新開始下一輪采樣。下一輪新的100個采樣結(jié)果會將存儲在數(shù)組中舊的采樣結(jié)果覆蓋。

9)程序編譯,下載,在開發(fā)板背面的輸出端子PB1(A0)和GND管腳上,使用信號源,輸入幅值為3伏、直流偏移為1.5伏、頻率為100KHz、占空比為50%的方波,如下圖所示:


圖 6-24 方波信號輸入測試圖

開發(fā)板所顯示的動態(tài)圖如下:


?6-25 采樣結(jié)果顯示圖

由上圖可以看出,對于100KHz的輸入信號,每個周期約有24個采樣點,可驗證單通道采樣率為2.4MHz。

讀者可改變輸入波形,查看ADC采樣的波形圖,注意信號源給出的電壓范圍不要超過0-3.3伏,這是STM32F469的ADC的輸入范圍。


第六章合集2:使用chatGPT編寫簡易示波器:touchGFX人機界面和數(shù)據(jù)采集的評論 (共 條)

分享到微博請遵守國家法律
张家川| 扎囊县| 牡丹江市| 荃湾区| 南昌市| 稻城县| 常宁市| 都江堰市| 盐池县| 新宁县| 曲沃县| 宜章县| 绍兴市| 巴彦淖尔市| 东丽区| 连平县| 阿合奇县| 建昌县| 凌海市| 大埔县| 华容县| 昌吉市| 荣昌县| 琼结县| 昌吉市| 富顺县| 渭源县| 永和县| 如皋市| 佳木斯市| 桦甸市| 马龙县| 磐石市| 石泉县| 天长市| 和平县| 海盐县| 武胜县| 库伦旗| 六安市| 安宁市|