新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM8S學習筆記之四(STM8 time1)

        STM8S學習筆記之四(STM8 time1)

        作者: 時間:2016-11-24 來源:網絡 收藏
        這幾天一直糾結于使用STM8庫還是用底層寄存器寫程序,用了用IAR和庫的搭配,方便時肯定的,但是呢,鑒于我現在工作使用的就是STM32單片機+STM32庫,考慮再三,我還是用底層吧,這樣兩個就可以互補了,既不會太依賴于庫,又對寄存器的操作有更深的了解。。只是都是相通的,是的,相通的。。

        以下是從技術手冊上粘貼的:

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

        TIM1由一個16位的自動裝載計數器組成,它由一個可編程的預分頻器驅動。
        本章中使用i來代表1、2、3、4,分別對應于四個不同的捕獲/比較通道。
        高級控制定時器適用于許多不同的用途:
        ●基本的定時
        ●測量輸入信號的脈沖寬度(輸入捕獲)
        ●產生輸出波形(輸出比較,PWM和單脈沖模式)
        ●對應與不同事件(捕獲,比較,溢出,剎車,觸發)的中斷
        ●與TIM5/TIM6或者外部信號(外部時鐘,復位信號,觸發和使能信號)同步
        高級控制定時器廣泛的適用于各種控制應用中,包括那些需要中間對齊模式PWM的應用,該模式支持互補輸出和死區時間控制。
        高級控制定時器的時鐘源可以是內部時鐘,也可以是外部的信號,可以通過配置寄存器來進行選擇。

        這個定時器對我的第一印象就是想到STM32的定時器1,也是高級定時器,記得當初用32的某個單片機做的項目,要出各種互補對稱的脈沖,而且還必須多少多少的死區時間。。雖然很頭疼,但是還是用定時器1輕松實現。看似這個定時器和STM32的高級定時器差不多,那就肯定很強大。。

        //Time1定時器
        void Timer1Init(void)
        {
        asm("sim"); // 關全局中斷
        TIM1_PSCRH=0;
        TIM1_PSCRL=15; //(fCK_CNT)等于fCK_PSC/( PSCR[15:0]+1)。
        TIM1_CNTRH=0xc3;
        TIM1_CNTRL=0x50;//自動裝載寄存器的值
        TIM1_IER=0x01;//允許更新中斷
        TIM1_RCR=20;//重復計數寄存器值
        TIM1_CR1=0x01;//打開自動裝載,打開計數器
        asm("rim"); // 開全局中斷
        }

        以上是定時器的初始化,第一句不解釋。TIM1_PSCRH TIM1_PSCRL為單片機的預分頻器。和STM32差不多。取值貌似都是u16. 然后是TIM1_ARRH TIM1_ARRL,自動裝在寄存器的值,也就是說,一旦計數到65535,寄存器溢出并觸發中斷,然后定時器的計數器自動裝載為此值。。原來是這樣,呵呵,所有單片機都一樣。。允許更新中斷,定時時間到進中斷,地球人都知道。。重復計數器很好,他需要溢出N次才可以進中斷。。呵呵。。開自動裝載,開定時器。差不多就OK了。。但是哥那個晚上調了N長時間都沒調通,郁悶的要死,最后的最后的最后,終于找到了,asm("sim"); // 關全局中斷 asm("rim"); // 開全局中斷。。哥突然想起當初的51.。不解釋。。

        中斷函數也粘過來吧、、、

        #pragma vector=TIM1_OVR_UIF_vector
        __interrupt void TIM1_OVF_IRQHandler(void)
        {
        static unsigned char i;
        if(TIM1_SR1&0x01)
        {
        TIM1_SR1&=~0x01;//清除中斷標志
        i++;
        if(i%2) PD_ODR=0x00;
        else PD_ODR=0xff;
        }
        }

        看到這個日志的同志們就偷笑吧,這個代碼復制粘貼,肯定能用。。



        關鍵詞: STM8S學習筆記time

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 平阴县| 子洲县| 上高县| 惠安县| 商城县| 石门县| 宁海县| 连云港市| 修武县| 镶黄旗| 深泽县| 廉江市| 上饶县| 柯坪县| 汕尾市| 旬邑县| 阜阳市| 大竹县| 永和县| 平度市| 阳西县| 南丹县| 台南市| 海城市| 隆昌县| 合川市| 澄江县| 榆林市| 包头市| 海城市| 抚松县| 昌江| 巴彦淖尔市| 龙山县| 卢氏县| 密云县| 上林县| 高阳县| 台山市| 二手房| 桑植县|