在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 如何使用STM8S單片機(jī)的多通道AD轉(zhuǎn)換

            如何使用STM8S單片機(jī)的多通道AD轉(zhuǎn)換

            作者: 時(shí)間:2016-11-24 來源:網(wǎng)絡(luò) 收藏
            STM8S單片機(jī)的A/D結(jié)構(gòu)簡(jiǎn)介:

            具有ADC1 ADC2(部分型號(hào)沒有ADC2)最多提供16個(gè)轉(zhuǎn)換通道,A/D轉(zhuǎn)換的各個(gè)通道可以執(zhí)行單次和連續(xù)的轉(zhuǎn)換模式。

            本文引用地址:http://www.biyoush.com/article/201611/320926.htm

            1.電壓0到Vdda;

            2.在64和80引腳封裝的有獨(dú)立的Vref,其他的封裝形式Vref連接在Vdda

            3.續(xù)轉(zhuǎn)換形式;

            4.時(shí)間14個(gè)時(shí)鐘周期;

            5.10位轉(zhuǎn)換精度;

            6.產(chǎn)生轉(zhuǎn)換結(jié)束中斷;



            ADC1結(jié)構(gòu)圖

            編程中注意的知識(shí)點(diǎn):

            過置位ADC_CR1寄存器的 ADON位來開啟ADC。當(dāng)首次置位ADON位時(shí),ADC從低功耗模式喚醒。為了啟動(dòng)轉(zhuǎn)換必須第二次使用寫指令來置ADC_CR1寄存器的ADON 位。在轉(zhuǎn)換結(jié)束時(shí)ADC會(huì)保持在上電狀態(tài),用戶只需要置位ADON位一次來啟動(dòng)下一次的轉(zhuǎn)換。

            如果長時(shí)間沒有使用ADC,推薦將ADC模塊切換到低功耗模式來降低功耗,這可以通過清零 ADON 位來實(shí)現(xiàn)。ADC模塊上電后,所選通道對(duì)應(yīng)的I/O口輸出模塊是被禁用的。因此推薦在ADC上電之前要選擇合適的ADC轉(zhuǎn)換通道。

            如果單次模式在單次轉(zhuǎn)換模式中,ADC僅在由ADC_CSR寄存器的CH[3:0]選定的通道上完成一次轉(zhuǎn)換。該模式是在當(dāng)CONT位為0時(shí)通過置位ADC_CR1寄存器的ADON位來啟動(dòng)的。

            一旦轉(zhuǎn)換完成,轉(zhuǎn)換后的數(shù)據(jù)存儲(chǔ)在ADC_DR寄存器中,EOC(轉(zhuǎn)換結(jié)束)標(biāo)志被置EOCIE 被置位將產(chǎn)生一個(gè)中斷。

            代碼如下:

            #include "adc.h"

            u16 TempADC;

            void ADC_Config(void)

            {

            ADC_CR1 |= 0x01; //開始啟動(dòng)初始化必須啟動(dòng)一次

            //第一次寫1,ADC從低功耗喚醒,第二次寫1,啟動(dòng)ADC轉(zhuǎn)換

            //ADC_CR1 |= 0x20; //使能轉(zhuǎn)換結(jié)束中斷,本例中采用的查詢方式。

            }

            uint16_t Get_ADCCH_Value(ADC1_Channel_TypeDef ADC_Channel)

            {

            ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS,ADC_Channel, ADC1_PRESSEL_FCPU_D2,

            ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_ALL, DISABLE);

            //你也可以用操作寄存器的方式代碼如下,但未驗(yàn)證。

            #if 0

            ADC_CR2 = 0x00; // A/D結(jié)果數(shù)據(jù)左對(duì)齊

            CLK_PCKENR2 |= 0x08; // 使能fMASTER與ADC的連接

            ADC_CR1 = 0x00;// ADC時(shí)鐘=主時(shí)鐘/2=8MHz,單次轉(zhuǎn)換模式

            ADC_CSR = 0x01; // 選擇通道2

            ADC_TDRL = 0x01; // 禁止施密特觸發(fā)功能

            ADC_TDRH = 0x01;

            ADC_CR1 = 0x03; //2分頻,連續(xù)轉(zhuǎn)換,啟動(dòng)ADC

            ADC_CR2 = 0x31; //外部事件保留,數(shù)據(jù)右對(duì)齊,禁止掃描模式,

            ADC_CSR|= 0x01; //選擇通道1

            #endif

            ADC1_ConversionConfig(ADC1_CONVERSIONMODE_CONTINUOUS, ADC_Channel,ADC1_ALIGN_RIGHT);

            ADC_CR1 |= 0x01; //開始啟動(dòng)轉(zhuǎn)換

            while(!(ADC_CSR & 0x80)); //等待轉(zhuǎn)換結(jié)束

            return ADC1_GetConversionValue(); //返回ADC結(jié)果

            }

            //這個(gè)初始化代碼很重要,不能省,每次切換通道都要初始化一次!

            在main函數(shù)中直接調(diào)用即可:

            TempADC=Get_ADCCH_Value(ADC1_CHANNEL_1); //獲取AD轉(zhuǎn)化值

            WetADC=Get_ADCCH_Value(ADC1_CHANNEL_3; //獲取AD轉(zhuǎn)化值

            到此結(jié)束!開始你的代碼快樂之旅吧~~~~



            評(píng)論


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

            關(guān)閉