新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 如何使用STM8S單片機的多通道AD轉換

        如何使用STM8S單片機的多通道AD轉換

        作者: 時間:2016-11-24 來源:網絡 收藏
        STM8S單片機的A/D結構簡介:

        具有ADC1 ADC2(部分型號沒有ADC2)最多提供16個轉換通道,A/D轉換的各個通道可以執行單次和連續的轉換模式。

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

        1.電壓0到Vdda;

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

        3.續轉換形式;

        4.時間14個時鐘周期;

        5.10位轉換精度;

        6.產生轉換結束中斷;



        ADC1結構圖

        編程中注意的知識點:

        過置位ADC_CR1寄存器的 ADON位來開啟ADC。當首次置位ADON位時,ADC從低功耗模式喚醒。為了啟動轉換必須第二次使用寫指令來置ADC_CR1寄存器的ADON 位。在轉換結束時ADC會保持在上電狀態,用戶只需要置位ADON位一次來啟動下一次的轉換。

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

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

        一旦轉換完成,轉換后的數據存儲在ADC_DR寄存器中,EOC(轉換結束)標志被置EOCIE 被置位將產生一個中斷。

        代碼如下:

        #include "adc.h"

        u16 TempADC;

        void ADC_Config(void)

        {

        ADC_CR1 |= 0x01; //開始啟動初始化必須啟動一次

        //第一次寫1,ADC從低功耗喚醒,第二次寫1,啟動ADC轉換

        //ADC_CR1 |= 0x20; //使能轉換結束中斷,本例中采用的查詢方式。

        }

        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);

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

        #if 0

        ADC_CR2 = 0x00; // A/D結果數據左對齊

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

        ADC_CR1 = 0x00;// ADC時鐘=主時鐘/2=8MHz,單次轉換模式

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

        ADC_TDRL = 0x01; // 禁止施密特觸發功能

        ADC_TDRH = 0x01;

        ADC_CR1 = 0x03; //2分頻,連續轉換,啟動ADC

        ADC_CR2 = 0x31; //外部事件保留,數據右對齊,禁止掃描模式,

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

        #endif

        ADC1_ConversionConfig(ADC1_CONVERSIONMODE_CONTINUOUS, ADC_Channel,ADC1_ALIGN_RIGHT);

        ADC_CR1 |= 0x01; //開始啟動轉換

        while(!(ADC_CSR & 0x80)); //等待轉換結束

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

        }

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

        在main函數中直接調用即可:

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

        WetADC=Get_ADCCH_Value(ADC1_CHANNEL_3; //獲取AD轉化值

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



        關鍵詞: STM8S單片機AD轉

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 卓尼县| 北海市| 石景山区| 永新县| 涿州市| 高陵县| 浠水县| 红安县| 简阳市| 朝阳区| 周至县| 武隆县| 石首市| 栾川县| 商河县| 阿拉善右旗| 托里县| 会泽县| 永川市| 新乡市| 河间市| 岳阳县| 原平市| 会理县| 应城市| 阿合奇县| 南丹县| 临朐县| 泾阳县| 龙海市| 镇康县| 景东| 长岛县| 遂宁市| 酉阳| 阿瓦提县| 靖宇县| 昌平区| 克什克腾旗| 宝山区| 通州市|