新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32筆記(三)ADC、DMA、USART的綜合練習(xí)

STM32筆記(三)ADC、DMA、USART的綜合練習(xí)

作者: 時(shí)間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
  我們在這里設(shè)置ADC為連續(xù)轉(zhuǎn)換模式,常規(guī)轉(zhuǎn)換序列中有兩路轉(zhuǎn)換通道,分別是ADC_CH10(PC0)和ADC_CH16(片內(nèi)溫度傳感器)。因?yàn)槭褂昧俗詣佣嗤ǖ擂D(zhuǎn)換,數(shù)據(jù)的取出工作最適合使用DMA方式取出,so,我們在內(nèi)存里開辟了一個(gè)u16 AD_Value[2]數(shù)組,并設(shè)置了相應(yīng)的DMA模塊,使ADC在每個(gè)通道轉(zhuǎn)換結(jié)束后啟動DMA傳輸,其緩沖區(qū)數(shù)據(jù)量為2個(gè)HalfWord,使兩路通道的轉(zhuǎn)換結(jié)果自動的分別落到AD_Value[0]和AD_Value[1]中。
  然后,在主函數(shù)里,就無需手動啟動AD轉(zhuǎn)換,等待轉(zhuǎn)換結(jié)束,再取結(jié)果了。我們可以在主函數(shù)里隨時(shí)取AD_Value中的數(shù)值,那里永遠(yuǎn)都是最新的AD轉(zhuǎn)換結(jié)果。
  如果我們定義一個(gè)更大的AD_Value數(shù)組,并調(diào)整DMA的傳輸數(shù)據(jù)量(BufferSize)可以實(shí)現(xiàn)AD結(jié)果的循環(huán)隊(duì)列存儲,從而可以進(jìn)行各種數(shù)字濾波算法。
  接著,取到轉(zhuǎn)換結(jié)果后,根據(jù)V=(AD_Value/4096)*Vref+的公式可以算出相應(yīng)通道的電壓值,也可以根據(jù)T(℃) =(1.43 - Vad)/34*10^(-6) + 25的算法,得到片內(nèi)溫度傳感器的測量溫度值了。
  通過重新定義putchar函數(shù),及包含"stdio.h"頭文件,我們可以方便的使用標(biāo)準(zhǔn)C的庫函數(shù)printf(),實(shí)現(xiàn)串口通信。
  相關(guān)的官方例程,可以參考FWLib V2.0的ADCADC1_DMA和USARTprintf兩個(gè)目錄下的代碼。

本代碼例子是基于萬利199的開發(fā)板EK-STM32F實(shí)現(xiàn),CPU=STM32F103VBT6


關(guān)鍵詞: STM32ADCDMAUSAR

評論


技術(shù)專區(qū)

關(guān)閉