久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 19850|回復: 0
打印 上一主題 下一主題
收起左側

STM8L的TIM2捕獲功能詳解 含例程

[復制鏈接]
跳轉到指定樓層
樓主
ID:140343 發表于 2016-10-10 00:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
TIM2是STM8的通用定時器,除了具有TIM4基本定時器具有的定時功能外,還具有PWM輸出和捕獲功能.


從上圖可以看到,當TIM2作為捕獲或這PWM輸出時,共有兩個通道,CH1和CH2.
本例程使用TIM2的捕獲功能,來測量CCO的輸出頻率,根據程序測量到的頻率和實際頻率對比,來學習TIM2的捕獲功能.
程序的編寫,主要參考STM8S的中文參考手冊.STM8L的這一部分和STM8S相同,所以參考了下這個中文手冊,畢竟英文的不是太容易看懂.


測量PWM信號時,實際上只用到了一個引腳,本例程的捕獲輸入引腳為PB0.但用到了兩個測量通道,本例程中通道1檢測到PB0為高電平時,將此時計數器的數據寫入TIM2_CCR1寄存器.通道2檢測到PB0為低電平時,將此時的計數器的數據寫入TIM2_CCR2寄存器.
由于捕獲模式為復位觸發模式,即檢測到高電平(本例程設置是高電平)時,數據寫入寄存器后,計數器復位,重新從0開始計數,所以通道2檢測到低電平時,存入到TIM2_CCR2寄存器中的數據為高電平脈沖時間.

PB0為輸入捕獲引腳,PC4為CCO輸出引腳,所以需要用杜邦線,將PC4連到PB0.同時用邏輯分析儀測量PC4輸出的波形,和程序計算值進行對比,從下圖可以看到IAR中tmp的值為3.38983039E+1,即程序測量到的頻率為3.38983KHz,與邏輯分析測量到的32.7869KHz相似,但誤差還是很大,主要原因為是HSI不精確,如果使用HSE,會精確一些,同時提供給定時器的頻率不高,增大定時器的頻率,結果會接近邏輯分析儀測量值.


  1. /*硬件連接*/

  2. // PB0<----PC4

  3. /****************************************************************************************

  4. *開發環境:IAR for stm8 v6.5.3

  5. *硬件平臺:STM8L-DISCOVERY

  6. *功能說明:本例程,通過CC0輸出32.768KHz的方波,提供給TIM2的捕獲輸入引腳PB0測量

  7. *作    者:茗風

  8. ****************************************************************************************/

  9. #include"iostm8l152c6.h"

  10. #include"stdint.h"

  11. uint16_t tim2_ccr1=0,tim2_ccr2=0;

  12. uint8_t  f_finish=0;

  13. /******************************************************************************************************

  14. *  名    稱:void CLOCK_Init(void)

  15. *  功    能:通過PC4輸出選擇的時鐘

  16. *  入口參數:無

  17. *  出口參數:無

  18. *  說    明:PC4輸出32.768KHz的方波,提供給TIM2的捕獲引腳PB0測量

  19. *  范    例:無

  20. ******************************************************************************************************/

  21. void CLOCK_Init(void)

  22. {

  23.    PC_CR1_C14  =1;//推挽輸出

  24.    PC_CR2_C24  =1;//高速輸出

  25.    PC_DDR_DDR4 =1;//PC4輸出

  26.    

  27.    CLK_CCOR_CCODIV=0x00;//選擇分頻值

  28.    

  29.    /*

  30.   *0x00 CCO divided by 1

  31.   *0x01 CCO divided by 2

  32.   *0x02 CCO divided by 4

  33.   *0x03 CCO divided by 8

  34.   *0x04 CCO divided by 16

  35.   *0x05 CCO divided by 32

  36.   *0x06 CCO divided by 64

  37.   *0x07 CCO divided by 64

  38.   */     

  39.    CLK_CCOR_CCOSEL =0x08;//選擇輸出時鐘,這里選擇外部32.768KHz的時鐘做測試

  40.    /*

  41.   *0x01 HSI clock output clock source

  42.   *0x02 LSI clock output clock source

  43.   *0x04 HSE clock output clock source

  44.   *0x08 LSE clock output clock source

  45.   */   

  46. }

  47. /******************************************************************************************************

  48. *  名    稱:void TIMER2_Init(void)

  49. *  功    能:STM8定時器2捕獲功能初始化

  50. *  入口參數:無

  51. *  出口參數:無

  52. *  說    明:PB0為捕獲輸入引腳,使用通道0

  53. *  范    例:無

  54. ******************************************************************************************************/

  55. void TIMER2_Init(void)

  56. {

  57.   PB_DDR_DDR0 =0;//輸入

  58.   PB_CR1_C10  =0;//浮空輸入

  59. //  PB_CR1_C10  =1;//上拉輸入

  60.   PB_CR2_C20  =0;//禁止外部中斷功能

  61.   

  62.   CLK_PCKENR1_PCKEN10=1;//打開定時器2時鐘

  63.   

  64. //------設置TIM2時鐘分頻值------

  65.   TIM2_PSCR_PSC=0;//分頻值  2M/2^0=2M/1=2000000Hz

  66.   

  67. //-重裝值,TIM2從0計數到此值,發生溢出-

  68. //  TIM2_ARRH=0;

  69. //  TIM2_ARRL=100;

  70.   

  71.   //----AUTO_RELOAD 預裝載使能----

  72.   TIM2_CR1_ARPE =0;//不通過預裝載寄存器

  73.   

  74.   TIM2_CR1_URS=1;//僅當計數器溢出時才發生中斷請求

  75.   

  76.   TIM2_CR1_UDIS=1;//禁止更新事件//計數器溢出屬于更新事件

  77.   

  78.   TIM2_CR1_DIR=0;//向上計數

  79.   

  80. //  TIM2_CCER1_CC1E=0;//清零使能位,為了配置寄存器

  81. //  TIM2_CCER1_CC2E=0;//清零使能位,為了配置寄存器

  82.   

  83.   TIM2_CCMR1=0;

  84. //  TIM2_CCMR1=0x00; //IC1F=0000  輸入信號不分頻

  85.   TIM2_CCMR1 |=0x01;//CC1S=01 IC1 is mapped on TI1FP1

  86.   /*00: CC1 channel is configured as output

  87.     01: CC1 channel is configured as input, IC1 is mapped on TI1FP1

  88.     10: CC1 channel is configured as input, IC1 is mapped on TI2FP1

  89.     11: Reserved                                                    */

  90.   

  91.   TIM2_CCMR2=0;

  92. //  TIM2_CCMR2=0x00;//IC1PSC=0 輸入信號不分頻   

  93.   TIM2_CCMR2 |=0x02;//  TIM2_CCMR2_CC2S=0x2

  94. /*  00: CC2 channel is configured as output

  95.     01: CC2 channel is configured as input, IC2 is mapped on TI2FP2

  96.     10: CC2 channel is configured as input, IC2 is mapped on TI1FP2

  97.     11:CC2 channel is configured as input, IC2 is mapped on TRC    */


  98.   

  99.   TIM2_CCER1_CC1P=0;//上升沿時發生捕獲

  100.   TIM2_CCER1_CC2P=1;//下降沿時發生捕獲

  101.   

  102.   TIM2_SMCR=0x54;//

  103. //  TIM2_SMCR_TS=0x05;//101 iput 1(TI1FP1) 頭文件有錯誤

  104. //  TIM2_SMCR_SMS=0x04;//復位觸發模式

  105.   

  106.   TIM2_CCER1_CC1E=1;//使能捕獲功能

  107.   TIM2_CCER1_CC2E=1;//使能捕獲功能

  108.   

  109.   TIM2_IER_CC1IE=1;//開啟捕獲中斷

  110.   TIM2_IER_CC2IE=1;//開啟捕獲中斷

  111.   TIM2_CR1_CEN=1;//開啟計數

  112. }

  113. void main(void)

  114. {

  115.   static  float  tmp=0;

  116.   CLOCK_Init();

  117.   TIMER2_Init();

  118.   asm("rim");               //enable interrupts

  119.   while(1)

  120.   {

  121.     if(f_finish==0x01)

  122.     {

  123.       //1000000us/2000000=0.5us

  124.       //測量到的周期為 0.5us*59=29.5us

  125.       //測量到的周期為 1000000us/29.5us=33.898KHz

  126.       //實際CCO輸出的頻率為32.768KHz

  127.       tmp=1000/((float)tim2_ccr1*0.5);//tmp的值為測量到的頻率

  128.       f_finish=0;

  129.       asm("nop");

  130.     }

  131. //    asm("wfi");

  132.   }

  133. }

  134. #pragma vector=TIM2_CAPCOM_CC1IF_vector

  135. __interrupt void TIM2_CAPCOM_CC1IF_ISR (void)

  136. {

  137.    if(TIM2_SR1_CC1IF)

  138.    {

  139.      tim2_ccr1=TIM2_CCR1H;

  140.      tim2_ccr1<<=8;

  141.      tim2_ccr1+=TIM2_CCR1L;

  142.      TIM2_SR1_CC1IF=0;//清除中斷標志位

  143.      f_finish=1;

  144.      //tim2_ccr1得到的時間為整個周期的時間

  145.    }

  146.    else if(TIM2_SR1_CC2IF)

  147.    {

  148.      tim2_ccr2=TIM2_CCR2H;

  149.      tim2_ccr2<<=8;

  150.      tim2_ccr2+=TIM2_CCR2L;

  151.      TIM2_SR1_CC2IF=0;//清除中斷標志位

  152.      //tim2_ccr2得到的時間為高電平持續時間

  153.    }

  154. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人在线中文字幕 | 91视视频在线观看入口直接观看 | 久久大| 欧美极品在线播放 | 精品一区二区久久久久久久网站 | 日韩精品一区二区三区四区视频 | 亚洲第一福利网 | 一区二区三区视频在线观看 | 国产精品久久久久久久久久 | 99re热精品视频国产免费 | 国产美女一区 | 日韩成人在线看 | 亚洲一二三区不卡 | av中文在线播放 | 亚洲 中文 欧美 日韩 在线观看 | 男女污网站 | 粉嫩av在线 | 国产精品美女久久久久久久久久久 | 日韩成人在线播放 | 亚洲精品乱码8久久久久久日本 | 香蕉一区二区 | 91精品国产综合久久福利软件 | 欧美一区免费 | 91网站在线看 | 成人高清在线视频 | 免费一级淫片aaa片毛片a级 | 91精品国产综合久久久久久丝袜 | 欧美一区二区在线播放 | 日日综合| 天堂在线免费视频 | 久久久久国产精品午夜一区 | 99精品国产一区二区三区 | 国产ts人妖系列高潮 | 日韩精品在线看 | 成人乱人乱一区二区三区软件 | 日韩免费 | 成人在线视频一区 | 天天干夜夜操视频 | 精品永久 | 一级大片 | 欧美精品第一页 |