亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

何謂ADC?STM32中的ADC有什么功能?

STM32嵌入式開(kāi)發(fā) ? 來(lái)源:STM32嵌入式開(kāi)發(fā) ? 作者:STM32嵌入式開(kāi)發(fā) ? 2021-06-11 17:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

ADC簡(jiǎn)介

STM32F103系列有3個(gè)ADC,精度為12位,每個(gè)ADC最多有16個(gè)外部通道。其中ADC1和ADC2都有16個(gè)外部通道,ADC3一般有8個(gè)外部通道,各通道的A/D轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷執(zhí)行,ADC轉(zhuǎn)換的結(jié)果可以左對(duì)齊或右對(duì)齊儲(chǔ)存在16位數(shù)據(jù)寄存器中。ADC的輸入時(shí)鐘不得超過(guò)14MHz,其時(shí)鐘頻率由PCLK2分頻產(chǎn)生。

ADC功能框圖講解

學(xué)習(xí)STM32開(kāi)發(fā)板上的外設(shè)時(shí)首先要了解其外設(shè)的功能框圖,如下:

poYBAGDDMuiAS-GNAACb_caVkgY459.jpg

功能框圖可以大體分為7部分,下面一一講解:

電壓輸入范圍

ADC所能測(cè)量的電壓范圍就是VREF- ≤ VIN ≤ VREF+,把 VSSA 和 VREF-接地,把 VREF+和 VDDA 接 3V3,得到ADC 的輸入電壓范圍為:0~3.3V。

輸入通道

ADC的信號(hào)輸入就是通過(guò)通道來(lái)實(shí)現(xiàn)的,信號(hào)通過(guò)通道輸入到單片機(jī)中,單片機(jī)經(jīng)過(guò)轉(zhuǎn)換后,將模擬信號(hào)輸出為數(shù)字信號(hào)。STM32中的ADC有著18個(gè)通道,其中外部的16個(gè)通道已經(jīng)在框圖中標(biāo)出,如下:

pYYBAGDDMvSAX3AIAAAvSpqtak8454.jpg

這16個(gè)通道對(duì)應(yīng)著不同的IO口,此外ADC1/2/3 還有內(nèi)部通道:ADC1 的通道 16 連接到了芯片內(nèi)部的溫度傳感器, Vrefint 連接到了通道 17。ADC2 的模擬通道 16 和 17 連接到了內(nèi)部的 VSS。

ADC的全部通道如下圖所示:

poYBAGDDMvuAEoFaAAGmLvYI1Ls733.jpg

外部的16個(gè)通道在轉(zhuǎn)換時(shí)又分為規(guī)則通道和注入通道,其中規(guī)則通道最多有16路,注入通道最多有4路(注入通道貌似使用不多),下面簡(jiǎn)單介紹一下兩種通道:

規(guī)則通道顧名思義就是,最平常的通道、也是最常用的通道,平時(shí)的ADC轉(zhuǎn)換都是用規(guī)則通道實(shí)現(xiàn)的。

注入通道是相對(duì)于規(guī)則通道的,注入通道可以在規(guī)則通道轉(zhuǎn)換時(shí),強(qiáng)行插入轉(zhuǎn)換,相當(dāng)于一個(gè)“中斷通道”吧。當(dāng)有注入通道需要轉(zhuǎn)換時(shí),規(guī)則通道的轉(zhuǎn)換會(huì)停止,優(yōu)先執(zhí)行注入通道的轉(zhuǎn)換,當(dāng)注入通道的轉(zhuǎn)換執(zhí)行完畢后,再回到之前規(guī)則通道進(jìn)行轉(zhuǎn)換。

轉(zhuǎn)換順序

知道了ADC的轉(zhuǎn)換通道后,如果ADC只使用一個(gè)通道來(lái)轉(zhuǎn)換,那就很簡(jiǎn)單,但如果是使用多個(gè)通道進(jìn)行轉(zhuǎn)換就涉及到一個(gè)先后順序了,畢竟規(guī)則轉(zhuǎn)換通道只有一個(gè)數(shù)據(jù)寄存器。多個(gè)通道的使用順序分為倆種情況:規(guī)則通道的轉(zhuǎn)換順序和注入通道的轉(zhuǎn)換順序。

規(guī)則通道中的轉(zhuǎn)換順序由三個(gè)寄存器控制:SQR1、SQR2、SQR3,它們都是32位寄存器。SQR寄存器控制著轉(zhuǎn)換通道的數(shù)目和轉(zhuǎn)換順序,只要在對(duì)應(yīng)的寄存器位SQx中寫(xiě)入相應(yīng)的通道,這個(gè)通道就是第x個(gè)轉(zhuǎn)換。具體的對(duì)應(yīng)關(guān)系如下:

pYYBAGDDMwGAOoBgAAGPfk5r8PI555.jpg

通過(guò)SQR1寄存器就能了解其轉(zhuǎn)換順序在寄存器上的實(shí)現(xiàn)了:

pYYBAGDDMwmADyywAAEd9scfMG4849.jpg

和規(guī)則通道轉(zhuǎn)換順序的控制一樣,注入通道的轉(zhuǎn)換也是通過(guò)注入寄存器來(lái)控制,只不過(guò)只有一個(gè)JSQR寄存器來(lái)控制,控制關(guān)系如下:

pYYBAGDDMxGAVK2cAAEXAMt3Uu4445.jpg

需要注意的是,只有當(dāng)JL=4的時(shí)候,注入通道的轉(zhuǎn)換順序才會(huì)按照J(rèn)SQ1、JSQ2、JSQ3、JSQ4的順序執(zhí)行。當(dāng)JL《4時(shí),注入通道的轉(zhuǎn)換順序恰恰相反,也就是執(zhí)行順序?yàn)椋篔SQ4、JSQ3、JSQ2、JSQ1。

配置轉(zhuǎn)換順序的函數(shù)如下代碼所示:

/** * @brief Configures for the selected ADC regular channel its corresponding * rank in the sequencer and its sample time. * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. * @param ADC_Channel: the ADC channel to configure. * This parameter can be one of the following values: * @arg ADC_Channel_0: ADC Channel0 selected * @arg ADC_Channel_1: ADC Channel1 selected * @arg ADC_Channel_2: ADC Channel2 selected * @arg ADC_Channel_3: ADC Channel3 selected * @arg ADC_Channel_4: ADC Channel4 selected * @arg ADC_Channel_5: ADC Channel5 selected * @arg ADC_Channel_6: ADC Channel6 selected * @arg ADC_Channel_7: ADC Channel7 selected * @arg ADC_Channel_8: ADC Channel8 selected * @arg ADC_Channel_9: ADC Channel9 selected * @arg ADC_Channel_10: ADC Channel10 selected * @arg ADC_Channel_11: ADC Channel11 selected * @arg ADC_Channel_12: ADC Channel12 selected * @arg ADC_Channel_13: ADC Channel13 selected * @arg ADC_Channel_14: ADC Channel14 selected * @arg ADC_Channel_15: ADC Channel15 selected * @arg ADC_Channel_16: ADC Channel16 selected * @arg ADC_Channel_17: ADC Channel17 selected * @param Rank: The rank in the regular group sequencer. This parameter must be between 1 to 16. * @param ADC_SampleTime: The sample time value to be set for the selected channel. * This parameter can be one of the following values: * @arg ADC_SampleTime_1Cycles5: Sample time equal to 1.5 cycles * @arg ADC_SampleTime_7Cycles5: Sample time equal to 7.5 cycles * @arg ADC_SampleTime_13Cycles5: Sample time equal to 13.5 cycles * @arg ADC_SampleTime_28Cycles5: Sample time equal to 28.5 cycles * @arg ADC_SampleTime_41Cycles5: Sample time equal to 41.5 cycles * @arg ADC_SampleTime_55Cycles5: Sample time equal to 55.5 cycles * @arg ADC_SampleTime_71Cycles5: Sample time equal to 71.5 cycles * @arg ADC_SampleTime_239Cycles5: Sample time equal to 239.5 cycles * @retval None */void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime){ 函數(shù)內(nèi)容略;}

觸發(fā)源

ADC轉(zhuǎn)換的輸入、通道、轉(zhuǎn)換順序都已經(jīng)說(shuō)明了,但ADC轉(zhuǎn)換是怎么觸發(fā)的呢?就像通信協(xié)議一樣,都要規(guī)定一個(gè)起始信號(hào)才能傳輸信息,ADC也需要一個(gè)觸發(fā)信號(hào)來(lái)實(shí)行模/數(shù)轉(zhuǎn)換。

其一就是通過(guò)直接配置寄存器觸發(fā),通過(guò)配置控制寄存器CR2的ADON位,寫(xiě)1時(shí)開(kāi)始轉(zhuǎn)換,寫(xiě)0時(shí)停止轉(zhuǎn)換。在程序運(yùn)行過(guò)程中只要調(diào)用庫(kù)函數(shù),將CR2寄存器的ADON位置1就可以進(jìn)行轉(zhuǎn)換,比較好理解。

另外,還可以通過(guò)內(nèi)部定時(shí)器或者外部IO觸發(fā)轉(zhuǎn)換,也就是說(shuō)可以利用內(nèi)部時(shí)鐘讓ADC進(jìn)行周期性的轉(zhuǎn)換,也可以利用外部IO使ADC在需要時(shí)轉(zhuǎn)換,具體的觸發(fā)由控制寄存器CR2決定。

在參考手冊(cè)中可以找到,ADC_CR2寄存器的詳情如下:

poYBAGDDMxmAbzaFAAC45Pa4PWQ154.jpg

pYYBAGDDMx-AUfLyAACEAMDBCvA024.jpg

pYYBAGDDMyeAUQQeAAB5PWs-404994.jpg

轉(zhuǎn)換時(shí)間

還有一點(diǎn),就是轉(zhuǎn)換時(shí)間的問(wèn)題,ADC的每一次信號(hào)轉(zhuǎn)換都要時(shí)間,這個(gè)時(shí)間就是轉(zhuǎn)換時(shí)間,轉(zhuǎn)換時(shí)間由輸入時(shí)鐘和采樣周期來(lái)決定。

由于ADC在STM32中是掛載在APB2總線上的,所以ADC得時(shí)鐘是由PCLK2(72MHz)經(jīng)過(guò)分頻得到的,分頻因子由 RCC 時(shí)鐘配置寄存器RCC_CFGR 的位 15:14 ADCPRE[1:0]設(shè)置,可以是 2/4/6/8 分頻,一般配置分頻因子為8,即8分頻得到ADC的輸入時(shí)鐘頻率為9MHz。

采樣周期是確立在輸入時(shí)鐘上的,配置采樣周期可以確定使用多少個(gè)ADC時(shí)鐘周期來(lái)對(duì)電壓進(jìn)行采樣,采樣的周期數(shù)可通過(guò) ADC采樣時(shí)間寄存器 ADC_SMPR1 和 ADC_SMPR2 中的 SMP[2:0]位設(shè)置,ADC_SMPR2 控制的是通道 0~9, ADC_SMPR1 控制的是通道 10~17。每個(gè)通道可以配置不同的采樣周期,但最小的采樣周期是1.5個(gè)周期,也就是說(shuō)如果想最快時(shí)間采樣就設(shè)置采樣周期為1.5.

轉(zhuǎn)換時(shí)間=采樣時(shí)間+12.5個(gè)周期

12.5個(gè)周期是固定的,一般我們?cè)O(shè)置 PCLK2=72M,經(jīng)過(guò) ADC 預(yù)分頻器能分頻到最大的時(shí)鐘只能是 12M,采樣周期設(shè)置為 1.5 個(gè)周期,算出最短的轉(zhuǎn)換時(shí)間為 1.17us。

數(shù)據(jù)寄存器

轉(zhuǎn)換完成后的數(shù)據(jù)就存放在數(shù)據(jù)寄存器中,但數(shù)據(jù)的存放也分為規(guī)則通道轉(zhuǎn)換數(shù)據(jù)和注入通道轉(zhuǎn)換數(shù)據(jù)的。

規(guī)則數(shù)據(jù)寄存器負(fù)責(zé)存放規(guī)則通道轉(zhuǎn)換的數(shù)據(jù),通過(guò)32位寄存器ADC_DR來(lái)存放:

poYBAGDDMy2APsMrAADWScQf8r0750.jpg

當(dāng)使用ADC獨(dú)立模式(也就是只使用一個(gè)ADC,可以使用多個(gè)通道)時(shí),數(shù)據(jù)存放在低16位中,當(dāng)使用ADC多模式時(shí)高16位存放ADC2的數(shù)據(jù)。需要注意的是ADC轉(zhuǎn)換的精度是12位,而寄存器中有16個(gè)位來(lái)存放數(shù)據(jù),所以要規(guī)定數(shù)據(jù)存放是左對(duì)齊還是右對(duì)齊。

當(dāng)使用多個(gè)通道轉(zhuǎn)換數(shù)據(jù)時(shí),會(huì)產(chǎn)生多個(gè)轉(zhuǎn)換數(shù)據(jù),然鵝數(shù)據(jù)寄存器只有一個(gè),多個(gè)數(shù)據(jù)存放在一個(gè)寄存器中會(huì)覆蓋數(shù)據(jù)導(dǎo)致ADC轉(zhuǎn)換錯(cuò)誤,所以我們經(jīng)常在一個(gè)通道轉(zhuǎn)換完成之后就立刻將數(shù)據(jù)取出來(lái),方便下一個(gè)數(shù)據(jù)存放。一般開(kāi)啟DMA模式將轉(zhuǎn)換的數(shù)據(jù),傳輸在一個(gè)數(shù)組中,程序?qū)?shù)組讀操作就可以得到轉(zhuǎn)換的結(jié)果。

DMA的使用之前介紹過(guò):DMA介紹。

注入通道轉(zhuǎn)換的數(shù)據(jù)寄存器有4個(gè),由于注入通道最多有4個(gè),所以注入通道轉(zhuǎn)換的數(shù)據(jù)都有固定的存放位置,不會(huì)跟規(guī)則寄存器那樣產(chǎn)生數(shù)據(jù)覆蓋的問(wèn)題。ADC_JDRx 是 32 位的,低 16 位有效,高 16 位保留,數(shù)據(jù)同樣分為左對(duì)齊和右對(duì)齊,具體是以哪一種方式存放,由ADC_CR2 的 11 位 ALIGN 設(shè)置。

pYYBAGDDMzOAUBJFAADKUNGFdPM297.jpg

中斷

pYYBAGDDMzqAJ2mjAAB8uYXKWNg783.jpg

從框圖中可以知道數(shù)據(jù)轉(zhuǎn)換完成之后可以產(chǎn)生中斷,有三種情況:

規(guī)則通道數(shù)據(jù)轉(zhuǎn)換完成之后,可以產(chǎn)生一個(gè)中斷,可以在中斷函數(shù)中讀取規(guī)則數(shù)據(jù)寄存器的值。這也是單通道時(shí)讀取數(shù)據(jù)的一種方法。

注入通道數(shù)據(jù)轉(zhuǎn)換完成之后,可以產(chǎn)生一個(gè)中斷,并且也可以在中斷中讀取注入數(shù)據(jù)寄存器的值,達(dá)到讀取數(shù)據(jù)的作用。

當(dāng)輸入的模擬量(電壓)不再閾值范圍內(nèi)就會(huì)產(chǎn)生看門(mén)狗事件,就是用來(lái)監(jiān)視輸入的模擬量是否正常。

以上中斷的配置都由ADC_SR寄存器決定:

poYBAGDDM0KAeuXTAAC3ZksmZyA691.jpg

當(dāng)然,在轉(zhuǎn)換完成之后也可以產(chǎn)生DMA請(qǐng)求,從而將轉(zhuǎn)換好的數(shù)據(jù)從數(shù)據(jù)寄存器中讀取到內(nèi)存中。

電壓轉(zhuǎn)換

要知道,轉(zhuǎn)換后的數(shù)據(jù)是一個(gè)12位的二進(jìn)制數(shù),我們需要把這個(gè)二進(jìn)制數(shù)代表的模擬量(電壓)用數(shù)字表示出來(lái)。比如測(cè)量的電壓范圍是0~3.3V,轉(zhuǎn)換后的二進(jìn)制數(shù)是x,因?yàn)?2位ADC在轉(zhuǎn)換時(shí)將電壓的范圍大?。ㄒ簿褪?.3)分為4096(2^12)份,所以轉(zhuǎn)換后的二進(jìn)制數(shù)x代表的真實(shí)電壓的計(jì)算方法就是:

y=3.3* x / 4096

初始化結(jié)構(gòu)體

每個(gè)外設(shè)的核心就是其對(duì)應(yīng)的初始化結(jié)構(gòu)體了,ADC的初始化結(jié)構(gòu)體代碼如下:

typedef struct { uint32_t ADC_Mode; // ADC 工作模式選擇 FunctionalState ADC_ScanConvMode; // ADC 掃描(多通道)或者單次(單通道)模式選擇 FunctionalState ADC_ContinuousConvMode; // ADC 單次轉(zhuǎn)換或者連續(xù)轉(zhuǎn)換選擇 uint32_t ADC_ExternalTrigConv; // ADC 轉(zhuǎn)換觸發(fā)信號(hào)選擇 uint32_t ADC_DataAlign; // ADC 數(shù)據(jù)寄存器對(duì)齊格式 uint8_t ADC_NbrOfChannel; // ADC 采集通道數(shù) } ADC_InitTypeDef;

通過(guò)配置初始化結(jié)構(gòu)體來(lái)設(shè)置ADC的相關(guān)信息。

單通道電壓采集

用這個(gè)程序來(lái)簡(jiǎn)單熟練一下ADC的單通道電壓采集吧,程序使用了ADC1的通道11,對(duì)應(yīng)的IO口是PC^1,因?yàn)椴┲鞯拈_(kāi)發(fā)板上PC ^1引腳沒(méi)有任何復(fù)用,使用中斷,在中斷中讀取轉(zhuǎn)換的電壓。

頭文件

為了提高文件的可移植性,頭文件中定義了一些與ADC和中斷相關(guān)的量,在移植程序的時(shí)候只需要修改頭文件中的定義即可。

#ifndef __ADC_H#define __ADC_H#include “stm32f10x.h”/* 采用ADC1的通道11 引腳為PC^1 模式必須是模擬輸入*/#define ADC_GPIO_RCC RCC_APB2Periph_GPIOC#define ADC_GPIO_PORT GPIOC#define ADC_GPIO_PIN GPIO_Pin_1#define ADC_GPIO_MODE GPIO_Mode_AIN /* 配置與中斷有關(guān)的信息 */#define ADC_IRQn ADC1_2_IRQn#define ADC_RCC RCC_APB2Periph_ADC1/* 配置ADC初始化結(jié)構(gòu)體的宏定義 */#define ADCx ADC1#define ADCx_ContinuousConvMode ENABLE //連續(xù)轉(zhuǎn)換模式#define ADCx_DataAlign ADC_DataAlign_Right //轉(zhuǎn)換結(jié)果右對(duì)齊#define ADCx_ExternalTrigConv ADC_ExternalTrigConv_None //不使用外部觸發(fā)轉(zhuǎn)換,采用軟件觸發(fā)#define ADCx_Mode ADC_Mode_Independent //只使用一個(gè)ADC,獨(dú)立模式#define ADCx_NbrOfChannel 1 //一個(gè)轉(zhuǎn)換通道#define ADCx_ScanConvMode DISABLE //禁止掃描模式,多通道時(shí)使用/* 通道信息和采樣周期 */#define ADC_Channel ADC_Channel_11#define ADC_SampleTime ADC_SampleTime_55Cycles5/* 函數(shù)聲明 */void ADC_COnfig(void);void ADC_NVIC_Config(void);void ADC_GPIO_Config(void);void ADCx_Init(void);#endif /* __ADC_H */

引腳配置函數(shù)

首先配置相應(yīng)的GPIO引腳,畢竟模擬信號(hào)是通過(guò)GPIO引腳傳輸?shù)介_(kāi)發(fā)板的,注意的是,引腳的模式一定要是模擬輸入!

void ADC_GPIO_Config(void){GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(ADC_GPIO_RCC, ENABLE);GPIO_InitStruct.GPIO_Pin = ADC_GPIO_PIN ;GPIO_InitStruct.GPIO_Mode = ADC_GPIO_MODE ;GPIO_Init(ADC_GPIO_PORT , &GPIO_InitStruct);}

配置引腳就是老套路:聲明結(jié)構(gòu)體變量、開(kāi)啟時(shí)鐘、寫(xiě)入結(jié)構(gòu)體、初始化GPIO。

NVIC配置函數(shù)

因?yàn)槲覀兪窃谵D(zhuǎn)換完成后利用中斷,在中斷函數(shù)中讀取數(shù)據(jù),所以要首先配置中斷函數(shù)的優(yōu)先級(jí),因?yàn)槌绦蛑兄挥羞@一個(gè)中斷,所以優(yōu)先級(jí)的配置就比較隨意。

void ADC_NVIC_Config(void){NVIC_InitTypeDef NVIC_InitStruct ;/* 配置中斷優(yōu)先級(jí)分組(設(shè)置搶占優(yōu)先級(jí)和子優(yōu)先級(jí)的分配),在函數(shù)在misc.c */NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1) ;/* 配置初始化結(jié)構(gòu)體 在misc.h中 *//* 配置中斷源 在stm32f10x.h中 */NVIC_InitStruct.NVIC_IRQChannel = ADC_IRQn ;/* 配置搶占優(yōu)先級(jí) */NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1 ;/* 配置子優(yōu)先級(jí) */NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1 ;/* 使能中斷通道 */NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE ;/* 調(diào)用初始化函數(shù) */NVIC_Init(&NVIC_InitStruct) ;}

ADC配置函數(shù)

ADC的配置函數(shù)是ADC的精髓,在這個(gè)函數(shù)中包含的內(nèi)容有:ADC的初始化結(jié)構(gòu)體配置、配置了時(shí)鐘分頻、配置了通道轉(zhuǎn)換順序、打開(kāi)轉(zhuǎn)換中斷、進(jìn)行校準(zhǔn)、軟件觸發(fā)ADC采集等。

函數(shù)中都有詳細(xì)的注釋?zhuān)?/p>

void ADC_COnfig(void){ ADC_InitTypeDef ADC_InitStruct; RCC_APB2PeriphClockCmd(ADC_RCC, ENABLE); /* 配置初始化結(jié)構(gòu)體,詳情見(jiàn)頭文件 */ ADC_InitStruct.ADC_ContinuousConvMode = ADCx_ContinuousConvMode ; ADC_InitStruct.ADC_DataAlign = ADCx_DataAlign ; ADC_InitStruct.ADC_ExternalTrigConv = ADCx_ExternalTrigConv ; ADC_InitStruct.ADC_Mode = ADCx_Mode ; ADC_InitStruct.ADC_NbrOfChannel = ADCx_NbrOfChannel ; ADC_InitStruct.ADC_ScanConvMode = ADCx_ScanConvMode ; ADC_Init(ADCx, &ADC_InitStruct); /* 配置ADC時(shí)鐘為8分頻,即9M */ RCC_ADCCLKConfig(RCC_PCLK2_Div8); /* 配置ADC通道轉(zhuǎn)換順序和時(shí)間 */ ADC_RegularChannelConfig(ADCx, ADC_Channel, 1, ADC_SampleTime ); /* 配置為轉(zhuǎn)換結(jié)束后產(chǎn)生中斷 在中斷中讀取信息 */ ADC_ITConfig(ADCx, ADC_IT_EOC,ENABLE); /* 開(kāi)啟ADC,進(jìn)行轉(zhuǎn)換 */ ADC_Cmd(ADCx, ENABLE ); /* 重置ADC校準(zhǔn) */ ADC_ResetCalibration(ADCx); /* 等待初始化完成 */ while(ADC_GetResetCalibrationStatus( ADCx)) /* 開(kāi)始校準(zhǔn) */ ADC_StartCalibration(ADCx); /* 等待校準(zhǔn)完成 */ while (ADC_GetCalibrationStatus(ADCx)); /* 軟件觸發(fā)ADC轉(zhuǎn)換 */ ADC_SoftwareStartConvCmd(ADCx, ENABLE);}

中斷函數(shù)

在中斷函數(shù)中進(jìn)行讀取數(shù)據(jù),將數(shù)據(jù)存放在變量result中,此處使用關(guān)鍵字extern聲明,代表變量result已經(jīng)在其他文件中定義,關(guān)于extern的介紹在之前發(fā)的文章中有extern關(guān)鍵字的介紹。

extern uint16_t resurt;void ADC1_2_IRQHandler(void){ /* 判斷產(chǎn)生中斷請(qǐng)求 */ while(ADC_GetITStatus(ADCx, ADC_IT_EOC) == SET) resurt=ADC_GetConversionValue(ADCx); /* 清除中斷標(biāo)志 */ ADC_ClearITPendingBit(ADCx, ADC_IT_EOC);}

主函數(shù)

主函數(shù)負(fù)責(zé)接收轉(zhuǎn)換的值,并將其轉(zhuǎn)換為電壓值,然后通過(guò)串口打印在計(jì)算機(jī)上,便于調(diào)試。

變量result是主函數(shù)中的全局變量,注意最后的結(jié)果應(yīng)該轉(zhuǎn)換為浮點(diǎn)型。

#include “stm32f10x.h”#include “usart.h”#include “adc.h”uint16_t result;void delay(void){ uint16_t k=0xffff; while(k--);}int main(void){ float voltage; /* 串口調(diào)試函數(shù) */ DEBUG_USART_Config(); /* 與ADC相關(guān)的函數(shù)打包在此函數(shù)中 */ ADCx_Init(); while(1) { /* 強(qiáng)制轉(zhuǎn)換為浮點(diǎn)型 */ voltage = (float) result/4096*3.3; printf(“ 電壓值為:%f ”,voltage); delay(); }}

責(zé)任編輯:lq6

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • adc
    adc
    +關(guān)注

    關(guān)注

    100

    文章

    7011

    瀏覽量

    553093
  • STM32
    +關(guān)注

    關(guān)注

    2302

    文章

    11111

    瀏覽量

    370389

原文標(biāo)題:詳解STM32中的ADC

文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    ADC3648/ADC3649 ADC 產(chǎn)品文檔總結(jié)

    ADC3648和ADC3649 (ADC364x) 是一款 14 位、250MSPS 和 500MSPS、雙通道模數(shù)轉(zhuǎn)換器 (ADC)。這些器件專(zhuān)為高信噪比 (SNR) 而設(shè)計(jì),并提
    的頭像 發(fā)表于 10-23 10:29 ?277次閱讀
    <b class='flag-5'>ADC</b>3648/<b class='flag-5'>ADC</b>3649 <b class='flag-5'>ADC</b> 產(chǎn)品文檔總結(jié)

    ADC3568/ADC3569 ADC 產(chǎn)品文檔總結(jié)

    ADC3568和ADC3569 (ADC356x) 是 16 位、250MSPS 和 500MSPS、單通道模數(shù)轉(zhuǎn)換器 (ADC)。這些器件專(zhuān)為高信噪比 (SNR) 而設(shè)計(jì),可提供 -
    的頭像 發(fā)表于 10-23 10:19 ?277次閱讀
    <b class='flag-5'>ADC</b>3568/<b class='flag-5'>ADC</b>3569 <b class='flag-5'>ADC</b> 產(chǎn)品文檔總結(jié)

    ADC3548/ADC3549 ADC 產(chǎn)品文檔總結(jié)

    ADC3548和ADC3549 (ADC354x) 是一款 14 位、250 和 500MSPS、單通道模數(shù)轉(zhuǎn)換器 (ADC)。該器件專(zhuān)為高信噪比 (SNR) 而設(shè)計(jì),噪聲頻譜密度低至
    的頭像 發(fā)表于 10-23 10:06 ?318次閱讀
    <b class='flag-5'>ADC</b>3548/<b class='flag-5'>ADC</b>3549 <b class='flag-5'>ADC</b> 產(chǎn)品文檔總結(jié)

    Texas Instruments ADC3908Dx/ADC3908Sx 8位高速ADC數(shù)據(jù)手冊(cè)

    Texas Instruments ADC3908Dx/ADC3908Sx 8位高速模數(shù)轉(zhuǎn)換器(ADC)是一系列超低功耗8位125MSPS高速雙通道和單通道ADC。僅一個(gè)時(shí)鐘周期的短延
    的頭像 發(fā)表于 07-17 11:50 ?489次閱讀
    Texas Instruments <b class='flag-5'>ADC</b>3908Dx/<b class='flag-5'>ADC</b>3908Sx 8位高速<b class='flag-5'>ADC</b>數(shù)據(jù)手冊(cè)

    Texas Instruments ADC3669EVM ADC評(píng)估模塊 (EVM)數(shù)據(jù)手冊(cè)

    雙通道ADC,具有LVDS接口,可在高達(dá)500MSPS的采樣率下工作。Texas Instruments ADC3669EVM可對(duì)器件系列可用的所有分辨率、采樣率和通道進(jìn)行評(píng)估。
    的頭像 發(fā)表于 07-04 14:39 ?534次閱讀
    Texas Instruments <b class='flag-5'>ADC</b>3669EVM <b class='flag-5'>ADC</b>評(píng)估模塊 (EVM)數(shù)據(jù)手冊(cè)

    單片機(jī)內(nèi)置ADC和外部ADC的對(duì)比

    ADC 江湖風(fēng)云變幻,局勢(shì)不斷升級(jí),緊張刺激!究竟是內(nèi)置 ADC 更勝一籌還是外置 ADC 棋高一著?
    的頭像 發(fā)表于 05-14 15:24 ?1027次閱讀

    ADC的五大架構(gòu)及其工作原理

    ADC 是什么?我們?yōu)槭裁葱枰?ADC?ADC 哪些架構(gòu)?他們的工作原理和特點(diǎn)是什么,分別適用于哪些場(chǎng)景?今天,就讓 MPS 的 ADC
    的頭像 發(fā)表于 04-03 17:00 ?3257次閱讀
    <b class='flag-5'>ADC</b>的五大架構(gòu)及其工作原理

    ADC參考電壓多重要(可下載)

    工程中大家經(jīng)常會(huì)用到 ADC 來(lái)采集模擬電壓,把模擬量變?yōu)閿?shù)字量進(jìn)行系統(tǒng)處理,有時(shí)候 看到采集結(jié)果,什么?這個(gè)結(jié)果跟實(shí)際采集的信號(hào)怎么還有點(diǎn)小差距?那么就有可能是參考 電壓的問(wèn)題參考電壓多重
    發(fā)表于 04-03 11:20 ?0次下載

    ADC PAL,當(dāng)ADC讀數(shù)超過(guò)閾值時(shí)、是否辦法生成中斷?

    ADC PAL ,當(dāng) ADC 讀數(shù)超過(guò)閾值時(shí)、是否辦法生成中斷?例如,我想在 ADC 輸入通道接收到超過(guò)3V 時(shí)觸發(fā)中斷。如果可能的
    發(fā)表于 04-02 08:30

    ADC技術(shù)在信號(hào)處理的應(yīng)用

    ADC(模擬/數(shù)字轉(zhuǎn)換器,Analog-to-Digital Converter)技術(shù)在信號(hào)處理的應(yīng)用非常廣泛,它作為模擬世界與數(shù)字領(lǐng)域之間的橋梁,發(fā)揮著至關(guān)重要的作用。以下是對(duì)ADC技術(shù)在信號(hào)
    的頭像 發(fā)表于 02-18 17:27 ?1421次閱讀

    ADC3xxxEVM和ADC3xJxxEVM用戶指南

    電子發(fā)燒友網(wǎng)站提供《ADC3xxxEVM和ADC3xJxxEVM用戶指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-10 15:18 ?0次下載
    <b class='flag-5'>ADC</b>3xxxEVM和<b class='flag-5'>ADC</b>3xJxxEVM用戶指南

    高速adc與低功耗adc的區(qū)別

    在現(xiàn)代電子系統(tǒng),模數(shù)轉(zhuǎn)換器(ADC)是將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)的關(guān)鍵組件。隨著技術(shù)的發(fā)展,對(duì)ADC的需求也在不斷變化。一方面,高速ADC能夠快速處理信號(hào),適用于需要快速響應(yīng)的應(yīng)用;另
    的頭像 發(fā)表于 11-19 16:10 ?1702次閱讀

    adc在嵌入式系統(tǒng)的應(yīng)用 常見(jiàn)的adc接口類(lèi)型比較

    ADC(模數(shù)轉(zhuǎn)換器)在嵌入式系統(tǒng)的應(yīng)用非常廣泛,它負(fù)責(zé)將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),以供微處理器或其他數(shù)字設(shè)備處理。以下是對(duì)ADC在嵌入式系統(tǒng)應(yīng)用的詳細(xì)分析以及常見(jiàn)的
    的頭像 發(fā)表于 11-19 16:03 ?2600次閱讀

    Air724UG軟件:ADC功能的創(chuàng)意展示

    今天我將對(duì)Air724UG軟件的ADC功能做出詳細(xì)示例,大家可以先收藏,再慢慢細(xì)讀,絕對(duì)收獲。
    的頭像 發(fā)表于 11-17 09:53 ?1127次閱讀
    Air724UG軟件:<b class='flag-5'>ADC</b><b class='flag-5'>功能</b>的創(chuàng)意展示

    高速ADC設(shè)計(jì)采樣時(shí)鐘影響的考量

    ? 在使用高速模數(shù)轉(zhuǎn)換器 (ADC) 進(jìn)行設(shè)計(jì)時(shí),需要考慮很多因素,其中 ADC 采樣時(shí)鐘的影響對(duì)于滿足特定設(shè)計(jì)要求至關(guān)重要。關(guān)于 ADC 采樣時(shí)鐘,幾個(gè)指標(biāo)需要了解,因?yàn)樗鼈儗⒅苯?/div>
    的頭像 發(fā)表于 11-13 09:49 ?2292次閱讀
    高速<b class='flag-5'>ADC</b>設(shè)計(jì)<b class='flag-5'>中</b>采樣時(shí)鐘影響的考量