女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當前位置:首頁 > 單片機 > 單片機
[導讀] 一、Adc特性1.1 Adc概述Stm32的Adc具有12位的精度,共有16個外部通道和2個內部通道。不同通道的 A/D 轉換可以在單一、連續(xù)、掃描或者間斷模式下進行。它的其他特性還包括支持模擬看門狗和DMA。1.2 Adc初

一、Adc特性1.1 Adc概述

Stm32的Adc具有12位的精度,共有16個外部通道和2個內部通道。不同通道的 A/D 轉換可以在單一、連續(xù)、掃描或者間斷模式下進行。它的其他特性還包括支持模擬看門狗和DMA。

1.2 Adc初始化

和大多數外設一樣,Adc在使用前必須初始化時鐘源,并從掉電模式喚醒該設備。建議在初始化Adc后立即運行一次校準,以減少準確性錯誤。

1.3 通道的選擇

對于16個可復用的通道,可以將通道分成兩種類型的組。常規(guī)組和注入組,組序列保存在寄存器ADC_SQRx和ADC_JSQR中。常規(guī)組可以包含最多16個通道,注入組最多包含4個通道。

注入組可以理解為常規(guī)組的一種中斷,當注入組的采集被觸發(fā)時,常規(guī)組的采集會被中斷。直到注入組采集完之后,常規(guī)組才開始繼續(xù)采集。

如果只想采集一個通道的數值,只將一個通道寫入組里。想采集多個通道的數值,就將多個通道寫入組里。當一個組包含多個通道時,要開啟掃描模式, adc對組中的每一個通道根據寄存器里的序列進行一次轉換。

1.4 觸發(fā)方式

要觸發(fā)一次ad轉換,可以由內部軟件觸發(fā),或者外部觸發(fā)。要不要使用外部觸發(fā)由控制寄存器里的EXTTRIG位來指定。

內部觸發(fā)自然是通過寫控制寄存器里的相應位來觸發(fā)。而外部觸發(fā)則可以有八種觸發(fā)源可供選擇,所以常規(guī)組和注入組在控制寄存器里各有3個位來指定哪個外部事件可觸ad轉換。外部觸發(fā)源一般是定時器或者是外部中斷線事件。

1.5 單一和連續(xù)

一次采集被由內部或者外部觸發(fā)后,可以只采集一次,也可以一直連續(xù)采集。如果是一組通道,采集完最后一個通道時,會回到序列中的第一個通道繼續(xù)采集。

每次采集完成后都會將轉換后的數據存在一個寄存器里,并置位采集完成位,根據設定產生中斷。

1.6 間斷模式

間斷模式是將常規(guī)和注入組里的序列再切割成更小的組。

比如一個常規(guī)組含有9個頻道,利用間斷模式并設置控制寄存器的位,可以將9個頻道分成3組。這樣一次觸發(fā)只會采集3個通道,而不是采集9個通道,連續(xù)觸發(fā)3次才能采集完9個通道。

1.7 采樣頻率

Adc模塊允許對采樣頻率進行修改,以滿足對采樣速率的不同需求??紤]到Adc時序里需要一個穩(wěn)定期,實際使用時還要面臨各種DMA請求和中斷嵌套,建議不要使用過高的采樣頻率,并考慮系統(tǒng)運行時負載的臨界值。

可以通過修改ADC_SMPR1 和 ADC_SMPR2 寄存器中的 SMP[2:0]來設置采樣頻率。

1.8 模擬看門狗

設置相應的寄存器可以為Adc指定上下閥值,當采集到電壓值超過閥值時,系統(tǒng)會產生中斷。

1.9 DMA

當在掃描模式和連續(xù)模式下,顯然每次都將保存采集值的寄存器數據讀出來處理是來不及的。設置Adc的DMA使能,可以讓每次轉換過的數值都經DMA傳到指定的內存空間里。

1.10 字節(jié)序

對于轉換后的數據,可以設置左對齊或是右對齊,以支持不同的處理和傳輸的需要。

1.11 雙adc模式

具有兩個adc的設備可以使用的模式。在這種模式下,通常adc1做主設備,adc2做從設備。從設備的觸發(fā)有主設備來發(fā)起。

主設備的常規(guī)組/注入組的觸發(fā)成為從設備觸發(fā)的條件,而主設備可以被設置為等待從設備采集一段時間后才開始采集,雙adc模式下有許多種方式可以支持不同的主從同步。

二、Adc的庫函數

HAL里的Adc函數相較stmlib里的結構更加簡單,它的私有成員就不做敘述了,因為如何實現HAL的結構性代碼并不是我們關心的問題。這里只描述一下Adc的輸出函數。

2.1 初始化函數

同GPIO的初始化一樣,Adc的初始化使用幾個結構體來進行。不同的是由于Adc較之GPIO更加復雜,所以對Adc屬性的描述分成了幾個不同的結構體。

ADC_InitTypeDef結構體原型

typedef struct

{

uint32_t DataAlign;

uint32_t ScanConvMode;

uint32_t ContinuousConvMode;

uint32_t NbrOfConversion;

uint32_t DiscontinuousConvMode;

uint32_t NbrOfDiscConversion;

uint32_t ExternalTrigConv;

}ADC_InitTypeDef;

從上到下依次描述:

字節(jié)序、是否使用掃描模式、單一/連續(xù)模式、常規(guī)組序列、是否使用間斷模式、間斷模式中一個組的通道數量、外部觸發(fā)的方式。

HAL_ADC_init函數的參數是一個指向ADC_HandleTypeDef結構體的指針,這個結構體的第一個元素,就是一個指向ADC_InitTypeDef結構體的指針。所以初始化ADC前,要先定義一個ADC_InitTypeDef結構體,賦值給每個成員變量。然后把它的地址寫入一個ADC_HandleTypeDef結構體的成員。

ADC_InitTypeDef結構體原型

/**

* @brief ADC handle Structure definition

*/

typedef struct

{

ADC_TypeDef *Instance; /*!< Register base address */


ADC_InitTypeDef Init; /*!< ADC required parameters */


__IO uint32_t NbrOfConversionRank ; /*!< ADC conversion rank counter */


DMA_HandleTypeDef *DMA_Handle; /*!< Pointer DMA Handler */


HAL_LockTypeDef Lock; /*!< ADC locking object */


__IO HAL_ADC_StateTypeDef State; /*!< ADC communication state */


__IO uint32_t ErrorCode; /*!< ADC Error code */

}ADC_HandleTypeDef;


可以看到它除了包含一個指向ADC_InitTypeDef的指針之外,還包含指向寄存器的指針、互斥鎖、一個描述狀態(tài)的變量、一個保存錯誤代碼的變量、一個指向DMA結構體的指針。所有與對Adc進行操作的函數都使用這個結構體的指針作為參數。

HAL有一個自己的鎖,這樣即使程序員在多個線程里沒有使用信號量來對外設進行讀寫控制,HAL層也會獨立保證對外設進行特殊操作時的原子性。

ADC_InitTypeDef結構體只描述了一部分Adc的屬性。所以有ADC_ChannelConfTypeDef結構體來描述單個通道在組序列里的排序位置及它的工作速率,ADC_AnalogWDFConfTypeDef結構體來描述一個模擬看門狗的閥值和中斷模式。而HAL_ADC_ConfigChannel和HAL_ADC_AnalogWDGconfig()函數用來處理這兩個結構體。

在初始化Adc時鐘和使能設備后,至少需要設置四個結構體,調用三個函數,才能將Adc初始化完畢。

2.2 Adc的操作

開始與結束

HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc);

HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc);


HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc);

HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc);


HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length);

HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc);


HAL_ADC_START()、HAL_ADC_START_DMA()、HAL_ADC_START_IT()三個函數分別表示開始一次采集(直接軟觸發(fā)或者等待外部觸發(fā)),后兩個函數表示數據用DMA傳輸和使能中斷。中斷處理函數是HAL_ADC_IRQHander()。


callback函數


void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc);

void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc);

void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef* hadc);

void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc);


Adc中斷、DMA傳輸、看門狗超過閥值、發(fā)生Adc錯誤,這些函數返回前都調用了Callback函數,用來在非中斷模式下處理Adc數據,如果想進行一些操作可以直接修改Callback函數。


取轉換后的數值


/* ADC retrieve conversion value intended to be used with polling or interruption */

uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc);


HAL_ADC_GetValue()用來區(qū)寄存器值。


等待函數


HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout);

HAL_StatusTypeDef HAL_ADC_PollForEvent(ADC_HandleTypeDef* hadc, uint32_t EventType, uint32_t Timeout);

1

2

在非中斷和DMA模式下,采集數據需要等待一次采集的完成,或者某些事件的發(fā)生。HAL_ADC_PollForConversion函數和HAL_ADC_PollForEvent函數用來等待這兩者。


三、例子


只用一個通道采集的初始化例子

static void ADC_Config(void)

{

ADC_ChannelConfTypeDef sConfig;

ADC_AnalogWDGConfTypeDef AnalogWDGConfig;


/* Configuration of ADCx init structure: ADC parameters and regular group */

AdcHandle.Instance = ADCx;


AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT;

AdcHandle.Init.ScanConvMode = ADC_SCAN_DISABLE;

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

系統(tǒng)設計師通常側重于為應用選擇最合適的數據轉換器,在向數據轉換器提供輸入的時鐘發(fā)生器件的選擇上往往少有考慮。然而,如果不慎重考慮時鐘發(fā)生器、相位噪聲和抖動性能,數據轉換器、動態(tài)范圍和線性度性能可能受到嚴重的影響。

關鍵字: 時鐘發(fā)生器 adc

專注于引入新品并提供海量庫存的電子元器件分銷商貿澤電子 (Mouser Electronics) 即日起開始備貨TI TLV915x運算放大器和ADS7128 12位模數轉換器 (ADC)。

關鍵字: 貿澤 adc 模數轉換器

自然界產生的信號,都是模擬信號,比如我們說話的聲音,看到的景色,感受到的溫度、濕度、壓力、流速、光、電、風及個人的呼吸、血壓、體溫、心跳、體重、血糖,體脂等等。這些模擬信號都得最終放在電腦,手機等數字領域進行處理,存儲或...

關鍵字: adc 模擬信號

為增進大家對ADC的認識和了解,本文將基于兩方面對ADC予以介紹:1.什么是并行ADC,并行ADC的基本原理是什么?2.流水線ADC與其它ADC有何區(qū)別。

關鍵字: adc 指數 流水線adc

ADC是電子電路中常用器件,大家對于ADC也較為熟悉。為增進大家對ADC的了解,本文將對高速ADC以及流水線ADC結構予以介紹。

關鍵字: adc 指數 流水線adc

ADC也即數模轉換器,在現實中,ADC具備重要作用。對于ADC,電子相關專業(yè)的朋友想必相當熟悉。為增進大家對ADC的認識,本文將對管道ADC以及其原理予以介紹。

關鍵字: adc 指數 管道adc

設計人員有各種模數轉換器(ADC)可以選擇,數字數據輸出類型是選擇過程中需要考慮的一項重要參數。

關鍵字: 高速轉換器 數字數據 adc

ADC包括三個基本功能:抽樣、量化和編碼。如何實現這三個功能,就決定了ADC的形式和性能。

關鍵字: 模數轉換 adc

自然界產生的信號,都是模擬信號,比如我們說話的聲音,看到的景色,感受到的溫度、濕度、壓力、流速、光、電、風及個人的呼吸、血壓、體溫、心跳、體重、血糖,體脂等。這些模擬信號都得最終放在電腦,手機等數字領域進行處理,存儲或者...

關鍵字: adc 電源設計

在設計ADC電路時,一個常見的問題是“如何在過壓條件下保護ADC輸入”。那么,在過壓情形中,可能出現哪些問題?發(fā)生的頻率又是怎樣的?有木有潛在的補救措施?

關鍵字: adc 電源設計
關閉