娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年12月04日(星期三)

正在發(fā)生

2019年12月04日 | 基于STM8的ADC讀取---STM8-第四章

發(fā)布者:糖三角 來(lái)源: eefocus關(guān)鍵字:STM8  ADC讀取  數(shù)字量 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

1. 綜訴


  想學(xué)會(huì)如何在STM8上使用ADC這個(gè)功能,我們先得了解單片機(jī)中ADC究竟是什么。


  ADC是模擬信號(hào)轉(zhuǎn)成數(shù)值信號(hào),單片機(jī)只能識(shí)別TTL電平,其實(shí)就是 1 或者 0 ,但是如果我們給它一個(gè)3.3V電壓,單片機(jī)就無(wú)法識(shí)別,,若想使用單片機(jī)讀取出來(lái)得時(shí)候,它必須將模擬量變成數(shù)字量。


2. 關(guān)于STM8S103手冊(cè)的ADC簡(jiǎn)介

由官方的全英手冊(cè)可知。


----------------------------------------------------------------------------------------------------------------------------------


STM8中ADC1和ADC2主要功能如下:


10位分辨率

單詞和連續(xù)的轉(zhuǎn)換模式

可編程的(轉(zhuǎn)換頻率的)預(yù)分頻,fMASTER 可以被分頻 2到18

可選擇ADC專(zhuān)用外部中斷(ADC_ETR)或者定時(shí)器觸發(fā)信號(hào)(TRGO)來(lái)作為外部觸發(fā)信號(hào)

模擬放大(對(duì)于具有VREF引角的型號(hào))

轉(zhuǎn)換結(jié)束時(shí)可產(chǎn)生中斷

靈活的數(shù)據(jù)對(duì)齊方式

ADC輸入電壓范圍:VSSA≤VIN≤VDDA

----------------------------------------------------------------------------------------------------------------------------------


ADC1具有以下拓展功能:


帶緩沖的連續(xù)轉(zhuǎn)換模式

單次和連續(xù)轉(zhuǎn)換的掃描模式

具有上限和下限門(mén)檻的模擬看門(mén)狗

模擬看門(mén)狗時(shí)間發(fā)生可產(chǎn)生中斷

----------------------------------------------------------------------------------------------------------------------------------


3. 例程


3.1 編譯環(huán)境


  我的編譯環(huán)境是IAR,這款軟件是現(xiàn)在STM8的主流平臺(tái),比較推薦。不過(guò)我打算等到STCubeMX更新出比較方便的版本后再去使用Keil5,因?yàn)槲以谟肧TM32的時(shí)候就是利用Keil5,的確很方便,你們也可以學(xué)著用一下。


3.2 主芯片


  我的主芯片是STM8S系列中的103,其中STM8S的003、005、和103、105,配置一樣(外設(shè)和CPU頻率,F(xiàn)LASH),在代碼相同的情況下均可進(jìn)行燒寫(xiě)。


3.3 庫(kù)文件的添加


  我們的工程可以在IAR的例程中復(fù)制,操作過(guò)程:打開(kāi)STM8S_StdPeriph_Lib(這是一個(gè)官方的庫(kù)文件,下載IAR STM8包的時(shí)候就攜帶,里面有庫(kù)文件和相對(duì)應(yīng)的例程),將Libraries文件復(fù)制到你工程所在的文件下,并將有關(guān)于ADC的庫(kù)文件添加到你的工程列表當(dāng)中。添加完成后,有可能你會(huì)看到一些C文件會(huì)有紅色的小點(diǎn)報(bào)錯(cuò),這是因?yàn)槟氵x的芯片上沒(méi)有該功能,你需要將其刪掉才能不報(bào)錯(cuò)。如圖。

添加成功后,我們需要將頭文件添加進(jìn)來(lái),頭文件的路徑存放在 Libraries->STM8S_StdPeriph_Driver->inc中,如圖。 

3.4 代碼編寫(xiě)


  STM8SF003這款芯片能用的是5個(gè)AD采樣通道,分別為為AIN2~AIN6。其一個(gè)通道AIN7,但在官方手冊(cè)中我沒(méi)找到有對(duì)其描述的,感興趣的朋友可以去察看芯片的英文手冊(cè)進(jìn)行研究,也許會(huì)找到和我不一樣的結(jié)果。


在ADC頭文件中,將ADC1所有的ADC1_CHANNEL(ADC通道)都進(jìn)行枚舉,以方便調(diào)用。


 1 /* Enum ----------------------------------------------------------------------*/

 2 

 3 enum ADC1_CHANNEL

 4 {                                        //bit  8  7  6  5  4  3  2  1

 5   

 6     ADC1_CHANNEL2 = 0x01,                //     0  0  0  0  0  0  0  1

 7     ADC1_CHANNEL3 = 0x02,                //     0  0  0  0  0  0  1  0

 8     ADC1_CHANNEL4 = 0x04,                //     0  0  0  0  0  1  0  0

 9     ADC1_CHANNEL5 = 0x08,                //     0  0  0  0  1  0  0  0

10     ADC1_CHANNEL6 = 0x10                 //     0  0  0  1  0  0  0  0

11         

12 };  

 

在ADC.C文件中,分為了多個(gè)函數(shù),降低他們的耦合性,也方便理解。


首先是ADC中引角的初始化,將你所選通道的引角進(jìn)行初始化,沒(méi)有選到的就不進(jìn)行初始化。


 1 /*******************************************************************************

 2 * Function Name  : MX_ADC_GPIO_Init

 3 * Description    : ADC GPIO Init

 4 * Input          : ADC1_CHANNEL

 5 * Output         : None

 6 * Return         : None

 7 ********************************************************************************/

 8 

 9 void MX_ADC_GPIO_Init(uint8_t ADC1_CHANNEL)

10 {

11   switch(ADC1_CHANNEL)

12   {

13     case ADC1_CHANNEL2:  GPIO_Init(ADC_Opt_GPIOC_Port,ADC_channe2_Pin,GPIO_MODE_IN_PU_NO_IT);break;

14     case ADC1_CHANNEL3:  GPIO_Init(ADC_Opt_GPIOD_Port,ADC_channe3_Pin,GPIO_MODE_IN_PU_NO_IT);break;

15     case ADC1_CHANNEL4:  GPIO_Init(ADC_Opt_GPIOD_Port,ADC_channe4_Pin,GPIO_MODE_IN_PU_NO_IT);break; 

16     case ADC1_CHANNEL5:  GPIO_Init(ADC_Opt_GPIOD_Port,ADC_channe5_Pin,GPIO_MODE_IN_PU_NO_IT);break;

17     case ADC1_CHANNEL6:  GPIO_Init(ADC_Opt_GPIOD_Port,ADC_channe6_Pin,GPIO_MODE_IN_PU_NO_IT);break;

18   } 

19   

20 }

 

  然后是ADC1的選擇通道初始化:ADC連續(xù)讀取,所選的通道,二分頻,外部轉(zhuǎn)換觸發(fā),外部觸發(fā)器不開(kāi)啟,數(shù)據(jù)右對(duì)齊,施密特觸發(fā),不開(kāi)啟。(注意:STMS8003中的串口使用了PD5和PD6,與ADC1中通道5、通道6發(fā)生沖突,故不可使用。如需使用,請(qǐng)將串口的TXRX引角更改換為其它的引角。)


 1 /*******************************************************************************

 2 * Function Name  : MX_ADC1_CHANNEL_Init

 3 * Description    : ADC CHANNEL Init

 4 * Input          : ADC1_CHANNEL

 5 * Output         : None

 6 * Return         : None

 7 ********************************************************************************/

 8 

 9 void MX_ADC1_CHANNEL_Init(uint8_t ADC1_CHANNEL)

10 {

11   switch(ADC1_CHANNEL)

12   {

13     case ADC1_CHANNEL2: 

14     {

15        ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_2, 

16        ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, 

17        ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL2, DISABLE);break;

18     }

19     case ADC1_CHANNEL3:

20     {

21        ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_3, 

22        ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, 

23        ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL3, DISABLE);break;

24     }

25     case ADC1_CHANNEL4:

26     {

27        ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_4, 

28        ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, 

29        ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL4, DISABLE);break;

30     } 

31     case ADC1_CHANNEL5:

32     {

33        ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_5, 

34        ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, 

35        ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL5, DISABLE);break;

36     }

37     case ADC1_CHANNEL6:

38     {

39        ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_6, 

40        ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, 

41        ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL6, DISABLE);break;

42     }

43   } 

44 }


這里就是將所有的ADC初始化進(jìn)行一個(gè)統(tǒng)一的一個(gè)歸類(lèi)。


 1 /*******************************************************************************

 2 * Function Name  : MX_ADC1_Init

 3 * Description    : ADC Init

 4 * Input          : ADC1_CHANNEL

 5 * Output         : None

 6 * Return         : None

 7 ********************************************************************************/

 8 void MX_ADC1_Init(uint8_t ADC1_CHANNEL)

 9 {  

10   //初始化GPIO

11   MX_ADC_GPIO_Init(ADC1_CHANNEL);

12   

13   //初始化ADC1所有寄存器

14   ADC1_DeInit();

15   

16   //配置ADC1寄存器中的參數(shù)

17   MX_ADC1_CHANNEL_Init(ADC1_CHANNEL);

18   

19   //使能ADC1

20   ADC1_Cmd(ENABLE);

21   

22   //ADC1轉(zhuǎn)換開(kāi)始

23   ADC1_StartConversion();

24 }

 最后就是數(shù)據(jù)獲取,可以選擇直接獲取數(shù)據(jù),也可以獲取十次數(shù)據(jù)后取平均數(shù)。


注意:


ADC獲取的值是AD值,需要將其進(jìn)行代入公式中才能得到電壓值。


Vin = (ADC * Vref) / 1024


VCC很明顯可以使用萬(wàn)用表先測(cè)出來(lái),1024是因?yàn)镾TM8S這款的AD是10位精度。


這里測(cè)試的VCC是3.35V,VCC另外一個(gè)意思就是單片機(jī)的供給電源。


 1 /*******************************************************************************

 2 * Function Name  : MX_ADC1_Get_Data

 3 * Description    : get VCC data

 4 * Input          : None

 5 * Output         : None

 6 * Return         : fVCC

 7 ********************************************************************************/

 8 float MX_ADC1_Get_Data(void)

 9 {

10   int iADC1_Value;

11   float fVCC;

12   

13   //讀取轉(zhuǎn)換結(jié)果

14   iADC1_Value = ADC1_GetConversionValue();

15   fVCC = (iADC1_Value * 3.350)/1024;

16   return fVCC;

17   

18 }

19 

20 

21 /*******************************************************************************

22 * Function Name  : MX_ADC1_Get_Average_Data

23 * Description    : Get VCC ten times average data. 

24 * Input          : None

25 * Output         : None

26 * Return         : fAverage_VCC

27 ********************************************************************************/

28 float MX_ADC1_Get_Average_Data(void)

29 {

30   int i;

31   float fAverage_VCC = 0.0;

32   

33   for(i=0;i<10;i++)

34   {

35    fAverage_VCC += MX_ADC1_Get_Data();

36   }

37   fAverage_VCC /= 10;

38   

39   return fAverage_VCC;

40   

41 }

將上面需要用到的函數(shù)在主函數(shù)中調(diào)用打印即可。


4. 實(shí)驗(yàn)結(jié)果


 調(diào)試儀器:可調(diào)式電源,可通過(guò)旋鈕控制電壓的輸出大小。


 當(dāng)沒(méi)有輸出電壓時(shí),打印的值為0V.

 當(dāng)可調(diào)式電源輸出的電壓值為3.3V,串口助手上打印的也是3.3V。

當(dāng)可調(diào)式電源輸出的電壓值為24V,串口助手上打印的也是24V。


注意:請(qǐng)不要將24V電源直接通入單片機(jī)中,我是自己設(shè)置了一條電路進(jìn)行測(cè)試的。ADC的最大輸入電壓是3.3V,為了安全起見(jiàn),請(qǐng)不要超過(guò)該值。


注意:請(qǐng)不要將24V電源直接通入單片機(jī)中,我是自己設(shè)置了一條電路進(jìn)行測(cè)試的。ADC的最大輸入電壓是3.3V,為了安全起見(jiàn),請(qǐng)不要超過(guò)該值。


注意:請(qǐng)不要將24V電源直接通入單片機(jī)中,我是自己設(shè)置了一條電路進(jìn)行測(cè)試的。ADC的最大輸入電壓是3.3V,為了安全起見(jiàn),請(qǐng)不要超過(guò)該值。

5. 結(jié)尾


對(duì)STM8的ADC的說(shuō)明和引用到這里結(jié)束,感謝各位看官的點(diǎn)擊。

關(guān)鍵字:STM8  ADC讀取  數(shù)字量 引用地址:基于STM8的ADC讀取---STM8-第四章

上一篇:基于STM8的TIM定時(shí)器操作---STM8-第三章
下一篇:基于STM8的IIC協(xié)議--協(xié)議篇

推薦閱讀

Imagination Technologies宣布推出其第九代(Series9)圖形處理器(GPU)系列新品PowerVR 9XEP、 9XMP和9XTP。這三款全新的Series9 GPU代表了PowerVR有史以來(lái)最佳的GPU產(chǎn)品組合,它們覆蓋了從入門(mén)級(jí)到高端市場(chǎng),并結(jié)合了效率的改進(jìn)和新功能,從而提供了卓越的性能。PowerVR Series9圖形處理器將支持智能手機(jī)、汽車(chē)信息娛樂(lè)產(chǎn)品、機(jī)頂盒和電視等產(chǎn)品具...
水中的氧含量可充分顯示水自?xún)舻某潭取?duì)于使用活化污泥的生物處理廠來(lái)說(shuō),了解曝氣池的氧含量非常重要,污水中溶氧增加,會(huì)促進(jìn)除厭氧微生物以外的生物活動(dòng),因而能去除揮發(fā)性物質(zhì)和易于自然氧化的離子,使污水得到凈化。測(cè)定氧含量主要有三種方法:自動(dòng)比色分析和化學(xué)分析測(cè)量,順磁法測(cè)量,電化學(xué)法測(cè)量,熒光法。水中溶氧量一般采用電化學(xué)法測(cè)量。氧能...
在疫情和中印邊境摩擦事件的沖擊下,今年印度的經(jīng)濟(jì)、市場(chǎng)以及產(chǎn)業(yè)環(huán)境都發(fā)生了巨大的變化。不久前筆者曾在報(bào)道中提到,在種種負(fù)面因素趨勢(shì)下,產(chǎn)業(yè)鏈有不少中小廠商被迫撤離印度,大廠則堅(jiān)守在原地。臨近2021,這批黯然退場(chǎng)的中小企業(yè)該何去何從?依舊深耕印度市場(chǎng)的一線廠商,又能否看到柳暗花明的景象?中小企業(yè)轉(zhuǎn)移陣地根據(jù)印度中央統(tǒng)計(jì)局11月27日公布...
廣告摘要聲明廣告撰文 | 潘敏瑤隨著協(xié)作機(jī)器人技術(shù)的愈加成熟,其相對(duì)傳統(tǒng)工業(yè)機(jī)器人的優(yōu)勢(shì)也將更加凸顯,尤其是智能技術(shù)的加持將推動(dòng)傳統(tǒng)協(xié)作機(jī)器人向智能協(xié)作機(jī)器人演變。大族機(jī)器人總經(jīng)理王光能判斷,智能協(xié)作機(jī)器人將更加重視機(jī)器人與人之間的深度互動(dòng)、實(shí)時(shí)交互,在未來(lái)的工作場(chǎng)景中,機(jī)器人可迅速對(duì)工作人員的指令做出應(yīng)變,并能與人以及其他機(jī)器...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車(chē)開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 台江县| 青川县| 长沙县| 峨边| 吴川市| 镇沅| 全椒县| 宁海县| 江永县| 三台县| 内黄县| 元阳县| 上思县| 西乌珠穆沁旗| 铜梁县| 常宁市| 师宗县| 南丰县| 巴林右旗| 清丰县| 沁水县| 荣成市| 台东县| 昌邑市| 恭城| 梨树县| 轮台县| 连南| 德惠市| 宜良县| 伊吾县| 天门市| 叙永县| 罗甸县| 寿阳县| 北票市| 盐源县| 通渭县| 什邡市| 分宜县| 土默特右旗|