極簡STM32:基于HAL庫與FreeRTOS的Arm Cortex-M4編程與開發 課件 第7章 模擬外設_第1頁
極簡STM32:基于HAL庫與FreeRTOS的Arm Cortex-M4編程與開發 課件 第7章 模擬外設_第2頁
極簡STM32:基于HAL庫與FreeRTOS的Arm Cortex-M4編程與開發 課件 第7章 模擬外設_第3頁
極簡STM32:基于HAL庫與FreeRTOS的Arm Cortex-M4編程與開發 課件 第7章 模擬外設_第4頁
極簡STM32:基于HAL庫與FreeRTOS的Arm Cortex-M4編程與開發 課件 第7章 模擬外設_第5頁
已閱讀5頁,還剩67頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第7章

模擬外設及其應用第7章

模擬外設【實踐案例7-1】利用DAC輸出鋸齒波【照貓畫虎7-1】利用DAC輸出正弦波【實踐案例7-2】單通道模擬電壓采集【照貓畫虎7-2】單通道模擬電壓采集【實踐案例7-3】多通道模擬電壓采集【照貓畫虎7-3】多通道模擬電壓采集第7章

模擬外設第7章

模擬外設

7.1.1DAC功能框圖7.1.2DAC相關HAL庫驅動【實踐案例7-1】利用DAC輸出鋸齒波【照貓畫虎7-1】利用DAC輸出正弦波7.1DAC及其應用STM32F407中的DAC具有如下主要特性:一個DAC轉換器,有兩個獨立的輸出通道12位模式下數據可以采用左對齊或右對齊同步更新功能可以生成噪聲波、三角波等各種波形兩個通道可單獨或同時轉換,每個通道都具有DMA功能具有DMA下溢錯誤檢測功能可以通過外部觸發信號進行轉換可以外接參考電壓VREF+以獲得更高的轉換分辨率7.1DAC及其應用7.1DAC及其應用7.1.1DAC功能框圖通道1:PA4通道2:PA5數據保持寄存器數據輸出寄存器觸發輸入DMA使能待轉換數據通過DHRx間接傳給DORx。數據送入DOR寄存器后,立即進行轉換,輸出模擬電壓與DOR中數據的關系為:DAC_OUT=VREF+

×DOR/40957.1DAC及其應用

數據格式支持8位和12位模式。在8位模式下,待轉換的數據是右對齊的。當DAC配置為12位模式時,數據可以設置為左對齊或右對齊。在12位模式下,如果選擇左對齊,那么數據的高12位將被轉換,而低4位將被忽略。如果選擇12位右對齊模式,那么待轉換的數據將被放置在最低12位,而高4位將被填充為0。這種模式允許直接使用一個12位的數據字進行DAC轉換,而不需要擔心數據對齊的問題,因此使用最頻繁。7.1DAC及其應用觸發方式指的是啟動DAC轉換的方式,可以配置為通過軟件或者硬件觸發轉換,也可以配置為不使用觸發。不使用觸發方式:當向DHRx寫入待轉換數據后,數據會在一個APB1時鐘周期后自動送到寄存器DORx,并立即轉換輸出。

軟件觸發:待轉換數據輸出到DHRx后,必須再啟動DAC轉換,才能將寫入的數據送到DORx并轉換輸出。硬件觸發:數據傳輸在觸發發生以后3個APB1時鐘周期后完成。觸發源可以通過DAC控制寄存器CR中的TSEL位進行設置和選擇,8個觸發事件如表7-1所示。

DAC的觸發方式7.1DAC及其應用7.1DAC及其應用7.1.2DAC相關HAL庫驅動與其他外設一樣,要使用DAC,必須調用HAL_DAC_Init()函數對DAC進行初始化配置,并啟用DAC總線時鐘。之后,調用HAL_DAC_Start()函數啟動DAC。此外,在stm32f407xx.h頭文件中,將DAC內部所有的寄存器封裝為DAC結構體,在stm32f4xx.h中定義了DAC句柄結構體DAC_

HandleTypeDef、DAC通道結構體DAC_ChannelConfTypeDef和DAC狀態枚舉類型。注意:DAC沒有初始化結構體。7.1DAC及其應用在stm32f4xx_hal_dac.c/.h文件中,實現DAC外設初始化及所用的DAC通道配置的函數是HAL_DAC_Init()和HAL_DAC_ConfigChannel()。通道配置主要包括設置通道的觸發方式和指定輸出緩沖器。這兩項設置參數封裝為DAC_ChannelConfTypeDef結構體。DAC初始化和通道配置通道觸發方式DAC輸出緩沖器DAC通道配置結構體7.1DAC及其應用通道觸發方式DAC輸出緩沖器7.1DAC及其應用7.1DAC及其應用例如,如下代碼配置DAC的通道1為定時器TIM2定時觸發,啟用輸出緩沖功能:DAC_ChannelConfTypeDefsConfig;sConfig.DAC_Trigger=DAC_TRIGGER_T2_TRGO;sConfig.DAC_OutputBuffer=DAC_OUTPUTBUFFER_ENABLE;if(HAL_DAC_ConfigChannel(&hdac,&sConfig,DAC_CHANNEL_1)!=HAL_OK)

{

Error_Handler();}7.1DAC及其應用DAC的啟動如果將DAC配置為軟件觸發方式,必須在送出待轉換的數據后,再調用HAL_DAC_Start()啟動DAC轉換。如果配置為不使用觸發,當輸出數字量后,將立即啟動DAC轉換,因此不需要調用上述函數。7.1DAC及其應用數字量的輸出7.1DAC及其應用【實踐案例7-1】利用DAC輸出鋸齒波本案例要求利用DAC通道1和2產生鋸齒波,兩個通道分別采用定時器TIM7觸發和軟件觸發。7.1DAC及其應用圖7-2

DAC配置CubeMX中的配置7.1DAC及其應用定時間隔(采樣間隔):1/[84/84/5000]=5ms圖7-3

TIM7參數配置7.1DAC及其應用應用程序的編寫7.1DAC及其應用7.1DAC及其應用觀察分析:程序中都是延時5ms輸出一個點,為什么兩個通道輸出的鋸齒波周期不同?7.1DAC及其應用【照貓畫虎7-1】利用DAC輸出正弦波本案例要求利用DAC通道1產生正弦波,采用定時器TIM7觸發。正弦波的頻率通過TIM7的參數配置進行設置,幅度在程序中設置。7.2ADC及其應用7.2.1

功能框圖7.2.2ADC的初始化及相關HAL庫驅動函數 【實踐案例7-2】單通道模擬電壓采集——中斷方式【照貓畫虎7-2】單通道模擬電壓采集——查詢方式7.2ADC及其應用STM32F4xx系列芯片擁有3個ADC外設,這些ADC可以獨立使用,其中ADC1和ADC2還可以組成雙重模式(提高采樣率)。STM32F407的ADC具有如下主要特性:

1)可配置12位、10位、8位或6位分辨率;

2)單次/連續轉換模式和間斷模式

3)雙重模式(帶2個或以上ADC的器件)

4)采樣間隔可以按通道分別編程

5)規則轉換和注入轉換均有外部觸發選項

6)ADC轉換時間:最大轉換速率為2.4MHz,轉換時間為0.41us7)轉換結束、注入轉換結束和發生模擬看門狗事件時產生中斷

8)規則通道轉換期間可以產生DMA請求

7.2.1功能框圖7.2ADC及其應用外部觸發輸入模擬輸入通道

中斷請求APB2外設時鐘PCLK2STM32的每個ADC多達19個通道,其中16個外部通道IN0~IN15來自與GPIO的模擬模式。模擬輸入通道每個ADC還有內部通道。其中ADC1的通道IN16~18分別連接到內部的VSS、內部參考電壓VREFINT、芯片內部的溫度傳感器或者備用電源VBAT。ADC2和ADC3的通道16、17、18全部連接到內部的VSS。7.2ADC及其應用7.2ADC及其應用注意:很多通道是多個ADC共用,從GPIO引腳的角度看,共24個外部通道。根據封裝的不同,有些通道不能用。規則通道(RegularChannel)又稱為規則組通道,其中多個通道輸入的模擬電壓按照事先指定的順序進行轉換。注入通道(InjectionChannel)可以理解為插入或插隊的意思,是一種在規則通道轉換的過程中強行插入轉換的通道。如果在規則通道轉換過程中,有注入通道插隊,則先轉換完注入通道輸入的模擬電壓,之后再回到規則通道的轉換流程。7.2ADC及其應用每個ADC的規則組中最多允許有16個通道,這些通道構成一個轉換序列,序列中各通道按照配置好的順序依次進行轉換。例如,假設規則組中包括3個通道IN0~IN2,則轉換序列可以為IN0-IN1-IN2,也可以為IN0-IN2-IN1、IN1-IN0-IN2等,具體轉換順序可以由規則序列寄存器SQR進行配置。類似地,每個ADC的注入組最多允許有4個通道,各通道的轉換順序可以通過注入序列寄存器JSQR進行配置。7.2ADC及其應用轉換序列與轉換順序7.2ADC及其應用規則通道組中的各通道按照規則序列寄存器中指定的順序轉換。一旦啟動注入通道,則立即執行注入通道組的轉換,并按照注入序列寄存器中各位確定的順序進行轉換。軟件觸發是通過將控制寄存器CR2中的ADON位置位來啟動A/D轉換,寫入0時則停止轉換。這種方式常用于查詢方式的A/D轉換。硬件觸發也就是通過外部事件觸發轉換,可以是定時器輸出觸發事件(TRGO)或定時器通道輸入捕獲信號(CHx),也可以是GPIO引腳輸入外部信號等,如圖7-8所示。規則組和注入組的觸發源分別由CR2中的EXTSEL[2:0]和JEXTSEL[2:0]位進行配置。對外部觸發事件,還可以通過設置CR2的EXTEN[1:0]和JEXTEN[1:0]位來控制觸發極性,可以是禁止觸發檢測、上升沿檢測、下降沿檢測以及上升沿和下降沿均檢測。觸發源7.2ADC及其應用7.2ADC及其應用注入組數據寄存器JDR注入組最多可以有4個通道,剛好注入數據寄存器也有4個,每個通道對應著自己的寄存器,不會出現數據覆蓋的問題。JDR是32位的,低16位有效,數據同樣分為左對齊和右對齊,具體由CR2中的D11位ALIGN進行設置。數據寄存器7.2ADC及其應用規則組數據寄存器每個ADC外設中的規則組數據寄存器DR只有一個,這是一個32位的寄存器,但只有低16位有效并且只是用于獨立模式存放轉換完成數據。因為ADC的最大精度是12位,而DR是16位有效,這樣允許ADC存放數據時候選擇左對齊或者右對齊,具體由CR2寄存器中的D11位ALIGN進行設置。假如設置ADC的轉換精度為12位,如果設置數據為左對齊,那轉換結果數據存放在DR寄存器中的D4~15位;如果為右對齊,則存放在D0~11位。

7.2ADC及其應用7.2ADC及其應用ADC的輸入時鐘ADC_CLK由PCLK2經過分頻產生,分頻系數可以為2、4、6和8。對于STM32F407ZGT6,一般設置PCLK2=HCLK/2=84MHz,所以程序一般使用4分頻或者6分頻,以保證轉換速率不超過最大值36MHz。

ADC需要若干個ADC_CLK周期完成對輸入的電壓進行采樣,每個通道可以分別用不同的時間采樣。其中采樣周期最小是3個ADC_CLK周期。轉換時間7.2ADC及其應用ADC的總轉換時間與ADC的輸入時鐘和采樣時間有關,可以表示為:

Tconv=采樣時間+12個周期假設PCLK2=84MHz,預分頻系數為4分頻,則ADC_CLK時鐘頻率為21MHz,采樣時間設置為最小值3個周期,則轉換時間為15個周期,即15/21≈0.71ms。7.2ADC及其應用連續轉換(ContinuousConversion)模式這種模式只適用于規則組通道。當規則組中所有通道轉換完畢后,立即從第一個通道開始自動啟動下一輪轉換。連續轉換模式通常用于對單個通道進行連續不斷的轉換,此時規則組中只有一個通道,每次轉換結束將數據存入DR后,同時將轉換結束標志位EOC置位。轉換模式7.2ADC及其應用掃描(ScanConversion)模式在這種模式下,每個通道轉換結束后,會立即自動轉換規則組或注入組中的下一個通道。每個通道轉換結束,都將當前通道的轉換結果存放到DR或對應的JDR中。在掃描模式下,可以配置規則組中所有通道轉換結束還是在每個規則通道轉換結束時將EOC置位。但是注入通道組只有在最后一個通道轉換結束時才將JEOC置位。非連續轉換(DisontinuousConversion)模式將規則組或注入組通道分成多個子序列,每個子序列相當于合起來相當于一個通道。每次觸發,對一個子序列進行轉換。對子序列內的多個通道可以進一步配置為連續轉換或掃描轉換模式。7.2ADC及其應用應用及配置要點——如果規則組中只有一個通道,并且配置禁用掃描模式、啟用連續模式,則實現連續轉換。單次觸發后持續轉換同一通道,結果不斷更新。這種模式適用于高頻信號監測(如音頻采樣、振動傳感器數據采集)、閉環控制系統的實時反饋等。

如果配置禁用掃描和連續模式,則實現單次轉換。在這種模式下,每次觸發僅轉換一個通道,轉換完成后停止,適用于低功耗設備的偶發采樣(如按鍵檢測、電池電壓監測)和單次高精度測量(如實驗室儀器的單點數據采集)等場合。7.2ADC及其應用如果規則組中有多個通道,并且配置啟用掃描模式、禁用連續模式,則實現掃描轉換。在這種模式下,對多個通道按指定順序轉換,完成后停止,適用于多路傳感器的周期性采樣、設備啟動時各傳感器狀態的自檢等。

如果配置啟用掃描模式和連續模式,則實現連續掃描轉換。每次觸發后循環掃描所有通道,各通道轉換完后立即從頭開始重新掃描轉換。這種模式適用于實時多通道周期測量和數據記錄。此時需要配合DMA傳輸,以避免數據覆蓋。7.2ADC及其應用對多個規則組通道,配置啟用掃描模式和不連續模式,并配置子序列中的通道數,則實現不連續掃描轉換。在這種模式下,將規則序列分成多個子序列,每個子序列單獨觸發(如軟件觸發SWSTART),適用于按需采樣和長序列分段處理(避免單次轉換時間過長導致的系統阻塞)等。7.2.2ADC的初始化及相關HAL庫驅動7.2ADC及其應用設置通道8為規則組中的第一個通道規則組中的通道數7.2ADC及其應用軟件觸發7.2ADC及其應用在CubeMX生成的MDK工程中,實現ADC及規則組初始化的操作通過調用MX_ADCx_Init()函數實現,其中x=1~3。該函數定義在ADC.c文件中,依次實現如下3項操作:調用HAL_ADC_Init()函數,配置ADC的全局特性,例如ADC時鐘、轉換變量、數據對齊格式、啟用的通道數等。調用HAL_ADC_ConfigChannel()函數配置規則組通道的轉換順序、采樣時間等。調用HAL_ADCEx_InjectedConfigChannel()函數配置注入組通道的轉換順序、采樣時間等,該函數定義在stm32f4xx_hal_adc_ex.c文件中。ADC的初始化7.2ADC及其應用ADC的操作訪問庫函數程序的基本流程如下:調用HAL_ADC_Start()或HAL_ADCEx_InjectedStart()函數,以啟動規則組或注入組通道的轉換;調用HAL_ADC_PollForConversion()或HAL_ADCEx_InjectedPollForConversion()函數以查詢轉換是否結束;當查詢返回結果為HAL_OK時,調用HAL_ADC_GetValue()或HAL_ADCEx_InjectedGetValue()函數讀取轉換結果。

查詢方式7.2ADC及其應用__IOuint16_tbuf[1];HAL_ADCEx_InjectedStart(&hadc1); /*啟動ADC*/while(HAL_ADC_PollForConversion(&hadc1,10)!=HAL_OK);/*等待轉換結束*/buf=HAL_ADCEx_InjectedGetValue(&hadc1,ADC_INJECTED_RANK_2); /*讀取轉換結果*/例如,要求以查詢方式控制ADC1注入組中通道2的轉換并讀取轉換結果,相應的語句如下:7.2ADC及其應用中斷方式如果要求采用中斷方式進行A/D轉換,程序的基本流程如下:調用HAL_ADC_Start_IT()或HAL_ADCEx_InjectedStart_IT()函數,以啟動規則組或注入組通道的轉換;當轉換結束時,執行ADC_IRQHandler()通用中斷服務函數,最后執行相應的中斷回調函數HAL_ADC_ConvCpltCallback()或HAL_ADCEx_InjectedConvCpltCallback(),在該函數中讀取轉換結果。7.2ADC及其應用【實踐案例7-2】單通道模擬電壓采集——中斷方式開發板板載一個貼片滑動變阻器,電路連接如圖7-10所示。當旋轉滑動變阻器調節旋鈕時,其動觸點電壓也會隨之改變,電壓變化范圍為0~3.3V,亦是開發板默認的ADC電壓采集范圍。本案例采用軟件觸發和中斷方式實現對滑動變阻器輸出單個模擬電壓的采集。7.2ADC及其應用CubeMX中的配置及初始化7.2ADC及其應用首先在CubeMX中配置RCC系統時鐘,并啟用USART1串口。此外,配置啟用ADC1的通道8(IN8),并按照圖7-11配置其相關參數。在NVICSettings中勾選使能ADC1中斷。應用程序的編寫7.2ADC及其應用7.2ADC及其應用配置ADC1的轉換位數為12位,因此分辨率為1LSB≈0.806mV。7.2ADC及其應用由于程序中將模擬電壓用浮點數格式顯示,因此注意在工程選項中的C/C++Build/Setting/ToolsSettings/MCU/MPUSettins中勾選Usefloatwithprintffromnewlib-nano選項?!菊肇埉嫽?-2】單通道模擬電壓采集修改上述案例,要求用查詢方式讀取ADC的轉換結果,每隔5s用TIM2觸發一次A/D轉換。7.2ADC及其應用7.3ADC的DMA傳輸7.3.1DMA控制器7.3.2DMA初始化配置7.3.3DMA的啟動和數據傳輸【實踐案例7-3】多通道模擬電壓采集【照貓畫虎7-3】內部溫度監測STM32F407的規則通道可以有16個,但是規則數據寄存器只有一個,如果采用掃描轉換模式,則前一個通道的轉換結果就會被后一個通道的轉換結果覆蓋。如果需要用利用同一個ADC外設的多個通道實現多個外部模擬電壓的采集,通常需要采用DMA傳輸技術,以便將轉換結果及時轉存到存儲器中。7.3ADC的DMA傳輸7.3.1DMA控制器DMA(DirectMemoryAccess,直接存儲器訪問)傳輸方式是利用DMA控制器直接控制總線,在外設與存儲器之間建立一條直接通道??梢詫崿F外設(例如ADC)到存儲器、存儲器到外設(例如DAC)或存儲器到存儲器的數據傳輸。STM32F4有2個DMA控制器DMA1和DMA2,每個DMA控制器有8個數據流,每個數據流都與一個外設DMA請求(如ADC、DAC和定時器等)相關聯,如圖7-13和表7-4所示。7.3ADC的DMA傳輸7.3ADC的DMA傳輸7.3ADC的DMA傳輸7.3ADC的DMA傳輸當達到FIFO的閾值級別時,FIFO的內容移出并存儲到目標中。在直接模式下,每完成一次從外設到FIFO的數據傳輸后,相應的數據立即就會移出并存儲到目標器件中。DMA數據傳輸過程中,可以配置外設和存儲器指針在每次傳輸后自動向后遞增或保持不變。當通過單個寄存器訪問外設源或目標數據時,一般采用禁止遞增模式,即地址保持不變。如果使能了遞增模式,則根據配置的數據寬度是字節Byte、半字(HalfWord)或字(Word),每次數據傳輸后地址遞增1、2或4。對于ADC的掃描轉換模式,可以配置DMA工作在循環(Circular)模式,以便處理循環緩沖區和連續數據流。當激活循環模式時,要傳輸的數據個數在數據流配置階段自動用設置的初始值進行加載,并繼續響應DMA請求。7.3.2DMA初始化配置7.3ADC的DMA傳輸圖7-15

DMA參數配置界面7.3.3DMA的啟動和數據傳輸根據上述設置,在生成的工程中即可調用HAL_ADC_Start_DMA()函數實現ADC轉換結果的DMA傳輸。該函數啟動ADC外設,并在ADC數據傳輸結束時允許發出DMA請求。函數的原型聲明如下:HAL_StatusTypeDefHAL_ADC_Start_DMA(ADC_HandleTypeDef*hadc,uint32_t*pData,uint32_tLength)其中,第一個參數指定所啟用的ADC,第二個參數指定數據傳送到存儲器的地址指針,第3個參數指定傳送數據的個數。7.3ADC的DMA傳輸例如,如下語句HAL_StatusTypeDefHAL_ADC_Start_DMA(&hadc1,(uint32_t*)&ADC_data,3);將啟用ADC1外設及其DMA請求。其中ADC_data

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論