ADC
12位ADC是一種逐次逼近型模擬數(shù)字轉(zhuǎn)換器。它有多達(dá)19個通道,可測量16個外部和2個內(nèi)部信號源和Vbat通道。各通道的A/D轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。ADC的結(jié)果可以左對齊或右對齊方式存儲在16位數(shù)據(jù)寄存器中。
模擬看門狗特性允許應(yīng)用程序檢測輸入電壓是否超出用戶定義的高/低閥值。
有16個多路通道。
通道選擇:
可以把轉(zhuǎn)換組織成兩組:規(guī)則組和注入組。在任意多個通道上以任意順序進(jìn)行的一系列轉(zhuǎn)換構(gòu)成成組轉(zhuǎn)換。例如,可以如下順序完成轉(zhuǎn)換:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。
規(guī)則組由多達(dá)16個轉(zhuǎn)換組成。規(guī)則通道和它們的轉(zhuǎn)換順序在ADC_SQRx寄存器中選擇。規(guī)則組中轉(zhuǎn)換的總數(shù)應(yīng)寫入ADC_SQR1寄存器的L[3:0]位中。
注入組由多達(dá)4個轉(zhuǎn)換組成。注入通道和它們的轉(zhuǎn)換順序在ADC_JSQR寄存器中選擇。注入組里的轉(zhuǎn)換總數(shù)目應(yīng)寫入ADC_JSQR寄存器的L[1:0]位中。如果ADC_SQRx或ADC_JSQR寄存器在轉(zhuǎn)換期間被更改,當(dāng)前的轉(zhuǎn)換被清除,一個新的啟動脈沖將發(fā)送到ADC以轉(zhuǎn)換新選擇的組。
單次轉(zhuǎn)換模式:
單次轉(zhuǎn)換模式下,ADC只執(zhí)行一次轉(zhuǎn)換。該模式既可通過設(shè)置ADC_CR2寄存器的ADON位(只適用于規(guī)則通道)啟動也可通過外部觸發(fā)啟動(適用于規(guī)則通道或注入通道),這時CONT位為0。
一旦選擇通道的轉(zhuǎn)換完成:
如果一個規(guī)則通道被轉(zhuǎn)換:
─ 轉(zhuǎn)換數(shù)據(jù)被儲存在16位ADC_DR寄存器中
─ EOC(轉(zhuǎn)換結(jié)束)標(biāo)志被設(shè)置 ─ 如果設(shè)置了EOCIE,則產(chǎn)生中斷。
如果一個注入通道被轉(zhuǎn)換:
─ 轉(zhuǎn)換數(shù)據(jù)被儲存在16位的ADC_DRJ1寄存器中
─ JEOC(注入轉(zhuǎn)換結(jié)束)標(biāo)志被設(shè)置 ─ 如果設(shè)置了JEOCIE位,則產(chǎn)生中斷。
然后ADC停止
連續(xù)轉(zhuǎn)換模式:
在連續(xù)轉(zhuǎn)換模式中,當(dāng)前面ADC轉(zhuǎn)換一結(jié)束馬上就啟動另一次轉(zhuǎn)換。此模式可通過外部觸發(fā)啟動或通過設(shè)置ADC_CR2寄存器上的ADON位啟動,此時CONT位是1。
每個轉(zhuǎn)換后:
如果一個規(guī)則通道被轉(zhuǎn)換:
─ 轉(zhuǎn)換數(shù)據(jù)被儲存在16位的ADC_DR寄存器中
─ EOC(轉(zhuǎn)換結(jié)束)標(biāo)志被設(shè)置
─ 如果設(shè)置了EOCIE,則產(chǎn)生中斷。
注入通道不能被用于連續(xù)轉(zhuǎn)換模式,唯一的例外是當(dāng)規(guī)則通道配置為連續(xù)轉(zhuǎn)換后,注入通道配置為自動轉(zhuǎn)換。
掃描模式:
此模式用來掃描一組模擬通道。
掃描模式可通過設(shè)置ADC_CR1寄存器的SCAN位來選擇。一旦這個位被設(shè)置,ADC掃描所有被ADC_SQRX寄存器(對規(guī)則通道)或ADC_JSQR(對注入通道)選中的所有通道。在每個組的每個通道上執(zhí)行單次轉(zhuǎn)換。在每個轉(zhuǎn)換結(jié)束時,同一組的下一個通道被自動轉(zhuǎn)換。如果設(shè)置了CONT位,轉(zhuǎn)換不會在選擇組的最后一個通道上停止,而是再次從選擇組的第一個通道繼續(xù)轉(zhuǎn)換。
如果設(shè)置了DMA位,在每次EOC后,DMA控制器把規(guī)則組通道的轉(zhuǎn)換數(shù)據(jù)傳輸?shù)絊RAM中。而注入通道轉(zhuǎn)換的數(shù)據(jù)總是存儲在ADC_JDRx寄存器中。
在以下情況中,ADC_SR寄存器的EOC位將被設(shè)置:
在每個規(guī)則組序列結(jié)束后,如果EOCS位被清0
在每個規(guī)則通道轉(zhuǎn)換結(jié)束,如果EOCS位設(shè)置為1
注入通道轉(zhuǎn)換結(jié)束數(shù)據(jù)總是存放在ADC_JDRx寄存器中
注入通道管理:
觸發(fā)注入
清除ADC_CR1寄存器的JAUTO位,并且設(shè)置SCAN位,即可使用觸發(fā)注入功能。
1. 利用外部觸發(fā)或通過設(shè)置ADC_CR2寄存器的ADON位,啟動一組規(guī)則通道的轉(zhuǎn)換。
2. 如果在規(guī)則通道轉(zhuǎn)換期間產(chǎn)生一外部注入觸發(fā)或者JSWSTART位被設(shè)置,當(dāng)前轉(zhuǎn)換被復(fù)位,注入通道序列被以單次掃描方式進(jìn)行轉(zhuǎn)換。
3. 然后,恢復(fù)上次被中斷的規(guī)則組通道轉(zhuǎn)換。如果在注入轉(zhuǎn)換期間產(chǎn)生一規(guī)則事件,注入轉(zhuǎn)換不會被中斷,但是規(guī)則序列將在注入序列結(jié)束后被執(zhí)行。
注:當(dāng)使用觸發(fā)的注入轉(zhuǎn)換時,必須保證觸發(fā)事件的間隔長于注入序列。例如:序列長度為30個ADC時鐘周期(即2個具有3個時鐘間隔采樣時間的轉(zhuǎn)換),觸發(fā)之間最小的間隔必須是31個ADC時鐘周期。
自動注入
如果設(shè)置了JAUTO位,在規(guī)則組通道之后,注入組通道被自動轉(zhuǎn)換。這可以用來轉(zhuǎn)換在ADC_SQRx和ADC_JSQR寄存器中設(shè)置的多至20個轉(zhuǎn)換序列。
在此模式里,必須禁止注入通道的外部觸發(fā)。
如果除JAUTO位外還設(shè)置了CONT位,規(guī)則通道至注入通道的轉(zhuǎn)換序列被連續(xù)執(zhí)行。
間斷模式:
規(guī)則組
此模式通過設(shè)置ADC_CR1寄存器上的DISCEN位激活。它可以用來執(zhí)行一個短序列的n次轉(zhuǎn)換(n<=8),此轉(zhuǎn)換是ADC_SQRx寄存器所選擇的轉(zhuǎn)換序列的一部分。數(shù)值n由ADC_CR1寄存器的DISCNUM[2:0]位給出。
一個外部觸發(fā)信號可以啟動ADC_SQRx寄存器中描述的下一輪n次轉(zhuǎn)換,直到此序列所有的轉(zhuǎn)換完成為止。總的序列長度由ADC_SQR1寄存器的L[3:0]定義。
例如:
n=3,被轉(zhuǎn)換的通道 = 0、1、2、3、6、7、9、10
第一次觸發(fā):轉(zhuǎn)換的序列為 0、1、2
第二次觸發(fā):轉(zhuǎn)換的序列為 3、6、7
第三次觸發(fā):轉(zhuǎn)換的序列為 9、10,并產(chǎn)生EOC事件
第四次觸發(fā):轉(zhuǎn)換的序列 0、1、2
注: 當(dāng)以間斷模式轉(zhuǎn)換一個規(guī)則組時,轉(zhuǎn)換序列結(jié)束后不自動從頭開始。 當(dāng)所有子組被轉(zhuǎn)換完成,下一次觸發(fā)啟動第一個子組的轉(zhuǎn)換。在上面的例子中,第四次觸發(fā)重新轉(zhuǎn)換第一子組的通道0、1和2
注入組
此模式通過設(shè)置ADC_CR1寄存器的JDISCEN位激活。在一個外部觸發(fā)事件后,該模式按通道順序逐個轉(zhuǎn)換ADC_JSQR寄存器中選擇的序列。
一個外部觸發(fā)信號可以啟動ADC_JSQR寄存器選擇的下一個通道序列的轉(zhuǎn)換,直到序列中所有的轉(zhuǎn)換完成為止。總的序列長度由ADC_JSQR寄存器的JL[1:0]位定義。
例如: n=1,被轉(zhuǎn)換的通道 = 1、2、3
第一次觸發(fā):通道1被轉(zhuǎn)換
第二次觸發(fā):通道2被轉(zhuǎn)換
第三次觸發(fā):通道3被轉(zhuǎn)換,并且產(chǎn)生EOC和JEOC事件
第四次觸發(fā):通道1被轉(zhuǎn)換
設(shè)置步驟:
1. 配置相關(guān)輸入通道的IO口。
2. 設(shè)置DMA
3. 如果雙重ADC或三重采樣,設(shè)置ADC的公共寄存器
4. 配置要使用到的ADC
程序:
/************************************
標(biāo)題:一個ADC連續(xù)采樣
軟件平臺:IAR for ARM6.21
硬件平臺:stm32f4-discovery
主頻:168M
author:小船
data:2012-02-14
*************************************/
#include
#include "MyDebugger.h"
__IO uint16_t ADC3ConvertedVault[10000];
char TXbuffer[] = "PC1輸入電壓為:x.xxxV\n\r";
void ADC3_IN11_Config(void);
void main ()
{
SCB->AIRCR = 0x05FA0000 | 0x400; //中斷優(yōu)先級分組 搶占:響應(yīng)=3:1
ADC3_IN11_Config();
MyDebugger_Init();
while(1)
{
};
}
void ADC3_IN11_Config(void)
{
/***GPIO設(shè)置***/
RCC->AHB1ENR |= (1<<2); //打開GPIOC時鐘
GPIOC->MODER &= 0xfffffff3;//PC1模擬模式
GPIOC->MODER |= 0x0000000C;
GPIOC->PUPDR &= 0xfffffff3;//無上拉無下拉
/***DMA設(shè)置***/
RCC->AHB1ENR |= (1<<22); //使能DMA2時鐘
ADC3->CR2 &= ~(1<<8);//ADC3 dma發(fā)送模式除能
DMA2_Stream0->CR &= 0xFFFFFFFE; //除能DMA2_Stream0
while(DMA2_Stream0->CR & 0x00000001);//確保DMA可以被設(shè)置
DMA2->LIFCR |= 0x0000003D;//傳送前清空DMA1_Stream5所有中斷標(biāo)志
DMA2_Stream0->PAR = (uint32_t)&ADC3->DR;//設(shè)置外設(shè)地址
DMA2_Stream0->M0AR = (uint32_t)ADC3ConvertedVault; //設(shè)置內(nèi)存地址
DMA2_Stream0->CR |= 0x0002800;//16位數(shù)據(jù)
DMA2_Stream0->NDTR = 10000; //設(shè)置dma傳輸數(shù)據(jù)的數(shù)量
/*
設(shè)置dma2通道2,即ADC3
優(yōu)先級Medium
傳輸方向外設(shè)到內(nèi)存
內(nèi)存遞增模式
循環(huán)模式
傳輸完成中斷
*/
DMA2_Stream0->CR |= ( 0x04000000 | 0x00010000 | 0x0
| (1<<10) | (1<<8) | (1<<4) );
NVIC->IP[56] = 0xB0;
NVIC->ISER[1] |= (1<<(56-32));
DMA2_Stream0->CR |= 1; //DMA2數(shù)據(jù)流0使能
/***ADC3設(shè)置***/
RCC->APB2ENR |= (1<<10); //使能ADC3時鐘
ADC3->SQR1 = 0x00000000;//轉(zhuǎn)換一個通道
ADC3->SQR3 = 0x0000000B;//第一個通道為ADC3_in11
ADC3->CR1 &= 0x00000000;
ADC3->CR2 &= 0x00000000;
ADC3->CR2 |= (1<<1); //連續(xù)轉(zhuǎn)換
ADC3->CR2 |= (1<<9); //最后一次ADC轉(zhuǎn)換后發(fā)出dma請求
ADC3->CR2 |= (1<<0); //開啟AD轉(zhuǎn)換
ADC3->CR2 |= (1<<8);//ADC dma發(fā)送模式使能
ADC3->CR2 |= (1<<30); //規(guī)則通道轉(zhuǎn)換開始
}
void DMA2_Stream0_IRQHandler (void)
{
uint32_t i;
uint32_t Average;
if(DMA2->LISR & 0x00000010)
{
DMA2->LIFCR |= 0x00000010;
for(i = 0; i < 10000; i++) // 對一萬個數(shù)據(jù)取平均值
Average += ADC3ConvertedVault[i];
Average *= 3;
Average /= 40960;
TXbuffer[14] = ( Average / 1000 ) % 10 + 0x30;//轉(zhuǎn)換成ASCII碼
TXbuffer[16] = ( Average / 100 ) % 10 + 0x30;
TXbuffer[17] = ( Average / 10 ) % 10 + 0x30;
TXbuffer[18] = Average % 10 + 0x30;
MyDebugger_Message(TXbuffer, sizeof(TXbuffer)/sizeof(char));
}
}
運(yùn)行結(jié)果:
上一篇:stm32f407之GPIO(操作寄存器)
下一篇:Atmega8a的采樣(查詢法)
推薦閱讀
史海拾趣
ABL Heatsink公司在發(fā)展過程中,積極尋求與其他企業(yè)的合作。通過與芯片制造商、電子設(shè)備生產(chǎn)商等建立緊密的合作關(guān)系,ABL Heatsink成功將自己的散熱器產(chǎn)品集成到各種高端電子設(shè)備中。這種合作模式不僅提升了公司的知名度,也帶來了穩(wěn)定的訂單和收入。
隨著公司實力的不斷增強(qiáng),AB Connectors Ltd開始將目光投向國際市場。公司積極參加國際電子展會和商務(wù)洽談活動,與海外客戶建立了廣泛的合作關(guān)系。同時,公司還通過設(shè)立海外辦事處和建立分銷網(wǎng)絡(luò)等方式,進(jìn)一步拓展國際市場。這些舉措不僅提高了公司的知名度和影響力,還為公司的快速發(fā)展提供了有力支持。
隨著全球化進(jìn)程的加速,F(xiàn)lexiPanel意識到構(gòu)建穩(wěn)定的全球供應(yīng)鏈體系對于企業(yè)的長遠(yuǎn)發(fā)展至關(guān)重要。公司積極尋求與國內(nèi)外知名芯片制造商、天線供應(yīng)商等合作伙伴建立戰(zhàn)略合作關(guān)系,共同推動RF模塊技術(shù)的進(jìn)步和產(chǎn)業(yè)化應(yīng)用。通過整合全球資源,F(xiàn)lexiPanel不僅提升了自身的產(chǎn)品研發(fā)和生產(chǎn)能力,還確保了產(chǎn)品質(zhì)量的穩(wěn)定性和可靠性,贏得了客戶的廣泛信賴。
隨著公司規(guī)模的不斷擴(kuò)大和產(chǎn)品線的日益豐富,兵字公司開始注重品牌建設(shè)和市場拓展。公司注冊了“BingZi兵字”商標(biāo),并通過一系列的市場推廣活動,提升了品牌的知名度和美譽(yù)度。同時,兵字公司還積極開拓國內(nèi)外市場,與多家知名企業(yè)建立了長期穩(wěn)定的合作關(guān)系,實現(xiàn)了業(yè)務(wù)的快速增長。
為了進(jìn)一步提升市場競爭力,Concord Semiconductor Corp積極尋求與其他企業(yè)的戰(zhàn)略合作。通過與全球領(lǐng)先的電子設(shè)備制造商建立長期合作關(guān)系,公司成功將其產(chǎn)品打入國際市場,實現(xiàn)了業(yè)務(wù)的快速增長。同時,公司還與多家研究機(jī)構(gòu)展開技術(shù)合作,共同研發(fā)新型半導(dǎo)體材料和技術(shù),為公司的長遠(yuǎn)發(fā)展提供了有力支撐。
近年來,隨著電子行業(yè)技術(shù)的不斷革新和市場環(huán)境的變化,協(xié)順電子也面臨著前所未有的挑戰(zhàn)。為了應(yīng)對這些挑戰(zhàn),公司開始進(jìn)行轉(zhuǎn)型升級。一方面,公司加大研發(fā)投入,推動產(chǎn)品創(chuàng)新和技術(shù)升級;另一方面,公司也積極探索新的業(yè)務(wù)領(lǐng)域和市場機(jī)會。同時,協(xié)順電子還加強(qiáng)了與供應(yīng)商和客戶的合作關(guān)系,共同應(yīng)對市場變化和挑戰(zhàn)。這些努力使得公司在激烈的市場競爭中保持了良好的發(fā)展態(tài)勢。
【EEWORLD】救火車和你一起學(xué)ARM系列活動之五 ----定時器中斷 在實驗三和實驗四中,我們研究了ARM的PLL倍頻和中斷體系的基本知識。本次實驗,我們將深入研究定時器中斷。把實驗三、實驗四的東西貫穿起來,與定時器0一起,組成一個完整的實驗。學(xué)習(xí)中要注意的幾個問問:1、定時器時鐘源的倍頻 ...… 查看全部問答∨ |
|
IGBT死區(qū):保證IGBT可靠的開通與關(guān)斷。IGBT是功率半導(dǎo)體器件,在變頻調(diào)速,無功補(bǔ)償?shù)裙I(yè)領(lǐng)域應(yīng)用廣泛。歡迎大家就IGBT技術(shù)廣泛發(fā)表看法。… 查看全部問答∨ |
|
platform builder5.0 創(chuàng)建應(yīng)用程序的問題 新建一個工程,編譯通過的,建一個helloworld 的應(yīng)用程序,想改換icon,結(jié)果能添加icon,但是刪除不掉,用鍵盤上的delete也不行,沒反應(yīng),右鍵也沒有刪除的選項,有知道原因的嗎?… 查看全部問答∨ |
|
關(guān)于如何學(xué)習(xí)嵌入式 高手 們進(jìn)啊 大家好,我是一名大三的學(xué)生,學(xué)的是嵌入式方向的,但我們現(xiàn)在才學(xué)嵌入式操作系統(tǒng),都TMD還是理論,學(xué)了等于沒學(xué),就上學(xué)期還學(xué)了個匯編,現(xiàn)在一學(xué)期都快過完了,感覺什么關(guān)于嵌入式方面的都沒學(xué)到,如果靠下學(xué)期再來學(xué)點東西,以后出去就別想混了 ...… 查看全部問答∨ |
|
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- STM32一文通(6) 外部中斷
- ESP32玩轉(zhuǎn)MicroPython(一) 燒入固件, 初識
- ESP32玩轉(zhuǎn)MicroPython(二) 連接WIFI網(wǎng)絡(luò) webperl文件傳輸
- ESP32玩轉(zhuǎn)MicroPython(三) 延時、計時 和GPIO操作
- 玩轉(zhuǎn) ESP32 + Arduino (一) 開發(fā)環(huán)境搭建
- 玩轉(zhuǎn) ESP32 + Arduino (四) 電容按鍵 霍爾傳感器 外部中斷 延時 脈沖檢測
- 玩轉(zhuǎn) ESP32 + Arduino (五) platformIO引入類庫 自開發(fā)庫 串口打印字符串
- 玩轉(zhuǎn) ESP32 + Arduino (六) 硬件定時器, IIC, SPI
- 玩轉(zhuǎn) ESP32 + Arduino (八) U8G2驅(qū)動OLED
- 超快充技術(shù)平權(quán)時代,要來了
- 智元機(jī)器人與Physical Intelligence(Pi)達(dá)成戰(zhàn)略合作
- 不到10萬塊!特斯拉再次面臨生死狙擊?
- 高階智駕NOA功能解析:技術(shù)架構(gòu)與實現(xiàn)路徑
- 智能體爆發(fā)元年,誰在“無人區(qū)”繪制地形圖?
- 億緯鋰能大圓柱電池進(jìn)展:良率突破97%
- 500Wh/kg電池競速:鋰金屬電池挑戰(zhàn)全固態(tài)共識?(下)
- 500Wh/kg電池競速:鋰金屬電池挑戰(zhàn)全固態(tài)共識?(上)
- 密歇根大學(xué)突破:低溫充電速度提升500%
- 谷歌發(fā)布Android Auto 14.0更新,界面優(yōu)化并準(zhǔn)備車機(jī)版Gemini AI
- Dig八月 EEWORLD為你做專題!
- 用 TI 汽車電子方案充充電吧,看你止步不前還是勇往直前!
- 【最后1天】MPS 有獎傾訴|說出哪些年讓你頭大的電感應(yīng)用問題,贏【頸部按摩儀、智能音箱】
- 您的電路保護(hù)有足夠的空間嗎?Littelfuse的881系列保險絲迎接這一挑戰(zhàn)
- 借助 Microchip 生態(tài)系統(tǒng)中的 PIC® 和 AVR® 單片機(jī)開啟嵌入式到云端之旅 系列在線研討會
- 勞動五月 曬“現(xiàn)場”,誰是電子工作狂?
- 報名贏京東卡:安路FPGA研討會-成都站
- PSoC4 Cortex-M0開發(fā)板免費(fèi)申請,分享心得贏驚喜大禮!
- EEWORLD跨年芯幣競價——示波器、開發(fā)板、技術(shù)圖書等你拿
- 銳迪科COM RF收發(fā)器實現(xiàn)了射頻前端、VCO、環(huán)路濾波器等敏感器件的片內(nèi)集成
- 射頻放大器的抗干擾問題與降噪問題(1)射頻寬帶放大器的性能指標(biāo)要求及影響因素;
- 4層板設(shè)計求助,PCB天線部分布局問題?
- 關(guān)于ZVS高壓諧振電路的啟動問題
- 基于NUCLEO-767ZI的LIS25BA骨振動傳感器數(shù)據(jù)采集
- 如何充分利用MCU內(nèi)集成式ADC的靈活性,使你的設(shè)計從激烈的競爭中脫穎而出—第一部分
- 44b0的代碼復(fù)制部分?
- ZigBee網(wǎng)關(guān)
- WinXP中隱藏的幾個安全小工具
- 有沒有廣東南海屬近的電子高手???