新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > stm8s開發(五) TIMER的使用:定時!

        stm8s開發(五) TIMER的使用:定時!

        作者: 時間:2017-09-18 來源:網絡 收藏

          STM8S提供三種類型的TIM 定時器:高級控制型(TIM1)、通用型(TIM2/TIM3/TIM5)和基本型定時器(TIM4/TIM6)。它們雖有不同功能但都基于共同的架構。此共同的架構使得采用各個定時器來設計應用變得非常容易與方便(相同的寄存器映射,相同的基本功能)。

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

            

         

          使用定時可以確定一個時間片,方便控制發送速率,采樣速率,等等一些對時間要求比較高的任務,而這些操作可以放入定時器中斷里面執行。這次的例子,定時1s,讓LED燈翻轉一次,達到2s閃爍一次的效果。由于定時操作簡單,我們使用基本定時器:4

          void Init_Timer4(void)

          {

          //128分頻 256計數,在16MHz下是2.048ms一次中斷!

          //128分頻 256計數,在128KHz下是256ms一次中斷!

          TIM4_CR1=0x00;//關閉計數器

          //TIM4_IER=0x00;

          TIM4_IER=0x01;//更新中斷使能

          TIM4_EGR=0x01;

          TIM4_CNTR=255;//計數器值

          TIM4_ARR=255;//自動重裝的值

          TIM4_PSCR=0x07;//分頻值

          TIM4_CR1=0x01;//使能計數器

          }

          值得注意的是,如果我們使用16M為主時鐘的話,通過最大分頻和最大計數,我們也最多能達到2.048ms的定時時間。同理,使用128K為主時鐘的話,最多能達到256ms的定時時間。

          接下來是定時終端函數,在函數中我們可以其他操作:

          u16 i=0;

          #pragma vector = TIM4_OVR_UIF_vector //0x19

          __interrupt void TIM4_OVR_UIF_IRQHandler(void)

          {

          i++;

          TIM4_SR=0x00;

          if(i==488) //2.048*488=1000ms

          {

          LED_Reverse();

          i=0;

          }

          }

          這里變量 i 用于計算進入中斷的次數,如果我們需要1s翻轉LED一次的話,則需要進入中斷488次。

          當中斷返回后, 定時器會自動重載:(TIM4_ARR=255;//自動重裝的值)

          定時器定時時間與計數器的值有關:(TIM4_CNTR=255;//計數器值)

          同時也和分頻值有關:(TIM4_PSCR=0x07;//分頻值)

          開啟個關閉寄存器只需要修改TIM4_CR1寄存器:(TIM4_CR1=0x00;//關閉計數器 TIM4_CR1=0x01;//使能計數器 )

          附上在IAR環境下的項目工程,包括了SPI、IIC、PWM、AWU、USART、EEPROM等片上硬件的初始化代碼。

          http://download.csdn.net/detail/devintt/9454188



        關鍵詞: stm8s TIMER

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 美姑县| 阳春市| 禄丰县| 榆中县| 琼海市| 乐东| 淳化县| 长岛县| 泰安市| 扎囊县| 蓝田县| 建平县| 苏州市| 长兴县| 长岭县| 古交市| 象山县| 察哈| 安塞县| 鹤峰县| 海门市| 化隆| 长垣县| 南投市| 宁乡县| 司法| 鹤壁市| 新宾| 南昌市| 黑水县| 满洲里市| 荥经县| 达日县| 镇沅| 兰西县| 广丰县| 濮阳市| 万年县| 郯城县| 丰县| 通化市|