|
輝芒微單片機(jī)FT62F083-RB內(nèi)部可以做滑條滑輪調(diào)光,在調(diào)光的同時(shí),還需要用到內(nèi)部的PWM,所以配置起來較麻煩。研究了半天,故記錄下來。
內(nèi)部PWM使用注意事項(xiàng):
其實(shí)它就是3個(gè)寄存器+1個(gè)重映射寄存器
第1個(gè)寄存器TIM1CCMR1( TIM1CCMR2 TIM1CCMR3 TIM1CCMR4 表示4組PWM寄存器)使能它,并選擇對(duì)應(yīng)的PWM模式,通常我們是這樣設(shè)置的 TIM1CCMR1 =0B01101000;//通道1 選擇PWM模式1并使能。其它3組同理。
第2個(gè)寄存器TIM1CCER1:它前4位控制PWM2,后4位控制PWM1,我們發(fā)現(xiàn)有N的就選擇NE那一個(gè)選擇位,若沒有N就選擇E那個(gè)選擇位,不要選擇P那個(gè)位就行了。
第3個(gè)寄存器TIM1CCER2:它前2位控制PWM4,后4位控制PWM3,同樣我們發(fā)現(xiàn)有N的就選擇NE那一個(gè)選擇位,若沒有N就選擇E那個(gè)選擇位,不要選擇P那個(gè)位就行了。
第4個(gè)、重映射 AFP0=0B00001100; 將PWM2 PWM3重映射到對(duì)應(yīng)的位即可。
具體操縱如下:
一、TIM1CCMR1 :
bit7 保留位
bit 6-4:
該3位定義了輸出參考信號(hào)OC1REF的動(dòng)作,而OC1REF決定了OC1的值。OC1REF是高電平有效,而OC1的有效電平取決于CC1P位。
000:凍結(jié)。輸出實(shí)際比較值(CCRx_SHAD)與計(jì)數(shù)器TIM1_CNT間的比較對(duì)OC1REF不起作用;
001:匹配時(shí)設(shè)置通道1的輸出為有效電平。當(dāng)計(jì)數(shù)器TIM1_CNT的值與捕獲/比較寄存器1(TIM1_CCR1)相同時(shí),強(qiáng)制OC1REF為高。
010:匹配時(shí)設(shè)置通道1的輸出為無效電平。當(dāng)計(jì)數(shù)器TIM1_CNT的值與捕獲/比較寄存器1(TIM1_CCR1)相同時(shí),強(qiáng)制OC1REF為低。
011:翻轉(zhuǎn)。當(dāng)TIM1_CCR1=TIM1_CNT時(shí),翻轉(zhuǎn)OC1REF的電平。
100:強(qiáng)制為無效電平。強(qiáng)制OC1REF為低。
101:強(qiáng)制為有效電平。強(qiáng)制OC1REF為高。
110:PWM模式1- 在向上計(jì)數(shù)時(shí),一旦TIM1_CNT<實(shí)際比較值(CCRx_SHAD)時(shí)OC1REF為有效電平,否則為無效電平;在向下計(jì)數(shù)時(shí),一旦TIM1_CNT>實(shí)際比較值(CCRx_SHAD)時(shí),OC1REF為無效電平,否則為有效電平。
111:PWM模式2- 在向上計(jì)數(shù)時(shí),一旦TIM1_CNT<實(shí)際比較值(CCRx_SHAD)時(shí)OC1REF為無效電平,否則為有效電平;在向下計(jì)數(shù)時(shí),一旦TIM1_CNT>實(shí)際比較值(CCRx_SHAD)時(shí),OC1REF為有效電平,否則為無效電平。
注1:一旦LOCK級(jí)別設(shè)為3(TIM1_BKR寄存器中的LOCK位)并且T1CC1S=00(該通道配置成輸出) 則該位不能被修改。
注2:在PWM模式1或PWM模式2中,只有當(dāng)比較結(jié)果改變了或在輸出比較模式中從凍結(jié)模式切換到PWM模式時(shí),OC1REF電平才改變。(參考17.5.7PWM模式)
bit3:
T1OC1PE:輸出比較1預(yù)裝載使能
0:禁止TIM1CCR1H/L寄存器的預(yù)裝載功能,可隨時(shí)寫入T1CCR1預(yù)加載寄存器,并且新寫入的數(shù)值立即起作用。
1:開啟TIM1CCR1H/L寄存器的預(yù)裝載功能,讀寫操作僅對(duì)預(yù)裝載寄存器操作,TIM1CCR1H/L的預(yù)裝載值在更新事件到來時(shí)被加載至當(dāng)前寄存器中。
注1:一旦LOCK級(jí)別設(shè)為3(TIM1BKR寄存器中的T1LOCK位)并且T1CC1S=00(該通道配置成輸出) 則該位不能被修改。
注2:為了操作正確,在PWM模式下必須使能預(yù)裝載功能。但在單脈沖模式下(TIM1CR1寄存器的T1OPM=1),它不是必須的。
bit2:保留位
bit 1-2:
T1CC1S[1:0]:捕獲/比較1 選擇。
這2位定義通道的方向(輸入/輸出),及輸入腳的選擇:
00:通道1被配置為輸出;
01:通道1被配置為輸入,IC1映射在TI1FP1上;
10:通道1被配置為輸入,IC1映射在TI2FP1上;
11:通道1被配置為輸入,IC1映射在TRC上。此模式僅工作在內(nèi)部觸發(fā)器輸入被選中時(shí)(由
TIM1SMCR寄存器的T1TS位選擇)。
注:T1CC1S僅在通道關(guān)閉時(shí)(TIM1CCER1寄存器的T1CC1E=0,T1CC1NE=0且已被更新)才是可寫的。
TIM1CCMR2 :同上
TIM1CCMR3 :同上
TIM1CCMR4 :同上
實(shí)際程序中這樣寫得:
TIM1CCMR1 =0B01101000;//通道1 PWM模式1并使能
TIM1CCMR2 =0B01101000;//CC2通道2 PWM模式1并使能
TIM1CCMR3 =0B01101000;//CC3通道3 PWM模式1并使能
TIM1CCMR4 =0B01101000;//CC4通道4 PWM模式1并使能
二、TIM1CCER1:
bit7:T1CC2NP:輸入捕獲/比較2互補(bǔ)輸出極性。參考CC1NP的描述。
bit6
T1CC2NE:輸入捕獲/比較2互補(bǔ)輸出使能。參考CC1NE的描述。
bit5
T1CC2P:輸入捕獲/比較2輸出極性。參考CC1P的描述。
bit4
T1CC2E:輸入捕獲/比較2輸出使能。參考CC1E的描述。
//////////////////////////////////////////////// CC1NP這一路的配置情況
bit3
T1CC1NP:輸入捕獲/比較1互補(bǔ)輸出極性
0:OC1N高電平有效;
1:OC1N低電平有效。
bit2
T1CC1NE:輸入捕獲/比較1互補(bǔ)輸出使能
0:關(guān)閉- OC1N禁止輸出,因此OC1N的輸出電平依賴于MOE、OSSI、OSSR、OIS1、
OIS1N和CC1E位的值。
1:開啟- OC1N信號(hào)輸出到對(duì)應(yīng)的輸出引腳,其輸出電平依賴于MOE、OSSI、OSSR、
OIS1、OIS1N和CC1E位的值。
bit1
T1CC1P:輸入捕獲/比較1輸出極性CC1通道配置為輸出:
0:OC1高電平有效;
1:OC1低電平有效。
bit0
T1CC1E:輸入捕獲/比較1輸出使能
CC1通道配置為輸出:
0: 關(guān)閉- OC1禁止輸出,因此OC1的輸出電平依賴于MOE、OSSI、OSSR、OIS1、OIS1N和CC1NE位的值。
1: 開啟- OC1信號(hào)輸出到對(duì)應(yīng)的輸出引腳,其輸出電平依賴于MOE、OSSI、OSSR、OIS1 、 OIS1N 和 CC1NE 位 的 值 。
三、TIM1CCER2:
bit7:空位
bit6:空位
bit5
T1CC4P:輸入捕獲/比較4輸出極性。參考CC1P的描述。
bit4
T1CC4E:輸入捕獲/比較4輸出使能。參考CC1E的描述。
//////////////////////////////////////////////// CC1NP這一路的配置情況
bit3
T1CC3NP:輸入捕獲/比較3互補(bǔ)輸出極性
0:OC3N高電平有效;
1:OC3N低電平有效。
bit2
T1CC3NE:輸入捕獲/比較3互補(bǔ)輸出使能
0:關(guān)閉- OC3N禁止輸出,
1:開啟- OC3N信號(hào)輸出到對(duì)應(yīng)的輸出引腳,
bit1
T1CC3P:輸入捕獲/比較1輸出極性CC3通道配置為輸出:
0:OC3高電平有效;
1:OC3低電平有效。
bit0
T1CC3E:輸入捕獲/比較1輸出極性CC3通道配置為輸出:
0:OC3高電平有效;
1:OC3低電平有效。
四、重映射 AFP0=0B00001100; //管腳重映射寄存器 0 比如:AFP0=0B00001100;表示time1的CH2 CH3重映射到PC6和PC5管腳 具體查FT62F083-RB規(guī)格書五、重映射 AFP1=0B00000000; //管腳重映射寄存器 1



FT62F083單片機(jī)內(nèi)部PWM--5路源程序如下:
- #include "common.h"
- #include "syscfg.h"
- #include "touch.h"
- /**************觸摸變量?****************/
- volatile uint GKeyValue; //返回的鍵值 bit0~bit14對(duì)應(yīng)key1~key15 0沒有按下,1按下
- extern uchar fmd_channels;
- uint TouchTimeCount;
- /********************************/
- #define LED1 RC3 //IO輸出
- #define LED2 RB4 //IO輸出
- bit flag;
- uint dii,dii1,pwm;
- uchar dii2,dii3;
- //-----------------------------------------------------
- void SysInit(void)
- {
- OSCCON = 0B01100001; //WDT 32KHZ IRCF=110=8M Hz
- //Bit0=1,系統(tǒng)時(shí)鐘為內(nèi)部振蕩器
- //Bit0=0,時(shí)鐘源由FOSC<2:0>決定即編譯選項(xiàng)時(shí)選擇
- INTCON = 0; //暫禁止所有中斷
- PORTA = 0B00000000;
- TRISA = 0B00000000; //PA輸入輸出 0-輸出 1-輸入
- WPUA = 0B00000000; //PA端口上拉控制 1-開上拉 0-關(guān)上拉
- PORTB = 0B00000000;
- TRISB = 0B00000000; //PB輸入輸出 0-輸出 1-輸入 PB3-輸出
- WPUB = 0B00000000; //PB端口上拉控制 1-開上拉 0-關(guān)上拉
- PORTC = 0B00000000;
- TRISC = 0B00000000; //PC輸入輸出 0-輸出 1-輸入 PC3-輸入
- WPUC = 0B00000000; //PC端口上拉控制 1-開上拉 0-關(guān)上拉
-
- PSRC0 = 0B11111111; //PORTA,PORTB源電流設(shè)置最大
- PSRC1 = 0B11111111; //PORTC,PORTD源電流設(shè)置最大
- PSINK0 = 0B11111111; //PORTA灌電流設(shè)置最大 0:最小,1:最大
- PSINK1 = 0B11111111; //PORTB灌電流設(shè)置最大 0:最小,1:最大
- PSINK2 = 0B11111111; //PORTC灌電流設(shè)置最大 0:最小,1:最大
- PSINK3 = 0B11111111; //PORTD灌電流設(shè)置最大 0:最小,1:最大
- ANSELA = 0B00000000; //全為數(shù)字管腳
- }
- //===========================================================
- //Funtion name keydeal
- //parameters: 無
- //returned value:無
- //===========================================================
- /*-------------------------------------------------
- * 函數(shù)名稱:Time4Initial
- * 功能:
- * 輸入?yún)?shù):
- * 返回參數(shù):無
- -------------------------------------------------*/
- void Time4Initial(void)
- {
- PCKEN |=0B00001000; //TIME4模塊時(shí)鐘使能
- //CKOCON=0B00110000;
- //TCKSRC=0B00000011;
- TIM4CR1 =0B00000101;
- //BIT7: 0:TIM1_ARR寄存器沒有緩沖,它可以被直接寫入; 1:TIM1_ARR寄存器由預(yù)裝載緩沖器緩沖。
- //BIT6:保留
- //BIT5~BIT4:timer4時(shí)鐘選擇位。
- //00:系統(tǒng)時(shí)鐘/主時(shí)鐘
- //01:內(nèi)部快時(shí)鐘HIRC
- //10:LP時(shí)鐘,只有當(dāng)FOSC選擇LP模式時(shí)才有意義
- //11:XT時(shí)鐘,只有當(dāng)FOSC選擇XT模式時(shí)才有意義
- //BIT3:
- // 0:在發(fā)生更新事件時(shí),計(jì)數(shù)器不停止;
- // 1:在發(fā)生下一次更新事件(清除CEN位)時(shí),計(jì)數(shù)器停止。
- //BIT2:
- // 0:如果UDIS允許產(chǎn)生更新事件,則下述任一事件產(chǎn)生一個(gè)更新中斷:
- //寄存器被更新(計(jì)數(shù)器上溢/下溢)
- //軟件設(shè)置UG位
- //時(shí)鐘/觸發(fā)控制器產(chǎn)生的更新
- // 1:如果UDIS允許產(chǎn)生更新事件,則只有當(dāng)下列事件發(fā)生時(shí)才產(chǎn)生更新中斷,并UIF置1:
- //寄存器被更新(計(jì)數(shù)器上溢/下溢)
- //BIT1:
- // 0:一旦下列事件發(fā)生,產(chǎn)生更新(UEV)事件:
- //計(jì)數(shù)器溢出/下溢
- //產(chǎn)生軟件更新事件
- //時(shí)鐘/觸發(fā)模式控制器產(chǎn)生的硬件復(fù)位被緩存的寄存器被裝入它們的預(yù)裝載值。
- // 1:不產(chǎn)生更新事件,影子寄存器(ARR、PSC、CCRx)保持它們的值。如果設(shè)置了UG位或時(shí)鐘/觸發(fā)控制器發(fā)出了一個(gè)硬件復(fù)位,則計(jì)數(shù)器和預(yù)分頻器被重新初始化。
- // BIT0: 0:禁止計(jì)數(shù)器;1:使能計(jì)數(shù)器。
- TIM4IER =0B00000001;
- //BIT0: 0:禁止更新中斷;1:允許更新中斷。
- TIM4SR =0B00000000;
- //BIT0:當(dāng)產(chǎn)生更新事件時(shí)該位由硬件置1。它由軟件寫1清0
- //0:無更新事件產(chǎn)生;
- //1:更新事件等待響應(yīng)。當(dāng)寄存器被更新時(shí)該位由硬件置1:
- //若TIM4_CR1寄存器的UDIS=0,當(dāng)計(jì)數(shù)器上溢或下溢時(shí);
- //若TIM4_CR1寄存器的UDIS=0、URS=0,當(dāng)設(shè)置TIM4_EGR寄存器的UG位軟件對(duì)計(jì)數(shù)器
- //CNT重新初始化時(shí);
- //若TIM4_CR1寄存器的UDIS=0、URS=0,當(dāng)計(jì)數(shù)器CNT被觸發(fā)事件重新初始化時(shí)。
- TIM4EGR =0B00000000;
- //BIT0:該位由軟件置1,由硬件自動(dòng)清0。
- //0:無動(dòng)作;
- //1:重新初始化計(jì)數(shù)器,并產(chǎn)生一個(gè)更新事件。注意預(yù)分頻器的計(jì)數(shù)器也被清0(但是預(yù)分頻系數(shù)不變)。若在中心對(duì)稱模式下或DIR=0(向上計(jì)數(shù))則計(jì)數(shù)器被清0;若DIR=1(向下計(jì)數(shù))則計(jì)數(shù)器取TIM1_ARR的值。
- TIM4CNTR=0; //TIM4 8位計(jì)數(shù)器
- TIM4PSCR=0B00000110;
- //預(yù)分頻器對(duì)輸入的CK_PSC時(shí)鐘進(jìn)行分頻。
- //計(jì)數(shù)器的時(shí)鐘頻率fCK_CNT等于fCK_PSC/2(PSC[2:0])。PSC[7:3]由硬件清0。
- //PSCR包含了當(dāng)更新事件產(chǎn)生時(shí)裝入當(dāng)前預(yù)分頻器寄存器的值(包括由于清除TIMx_EGR寄存器的UG位產(chǎn)生的計(jì)數(shù)器清除事件)。這意味著如要新的預(yù)分頻值生效,必須產(chǎn)生更新事件或者CEN=0。
- TIM4ARR =124;
- //ARR包含了將要裝載入實(shí)際的自動(dòng)重裝載寄存器的值。
- //當(dāng)自動(dòng)重裝載的值為空時(shí),計(jì)數(shù)器不工作。
- INTCON |= 0B11000000; //開總中斷和外設(shè)中斷
- }
- /*-------------------------------------------------
- * 函數(shù)名稱:Time2Initial
- * 功能: 初始化計(jì)時(shí)器2
- * 輸入?yún)?shù):無
- * 返回參數(shù):無
- -------------------------------------------------*/
- void Time2Initial(void)
- {
- PCKEN |= 0B00000100; //使能timer2時(shí)鐘模塊
- CKOCON = 0B00100000;
- //TCKSRC = 0B00000000; //TIM2時(shí)鐘為HIRC的2倍頻
- TCKSRC = 0B00000000; //TIM2時(shí)鐘為HIRC的2倍頻
- //Bit7低頻內(nèi)振模式:1=256K 振蕩頻率模式,0 = 32K 振蕩頻率模式
- //Bit[6:4]:TIM2時(shí)鐘源選擇位
- //值 時(shí)鐘源
- //0 系統(tǒng)時(shí)鐘/主時(shí)鐘
- //1 HIRC
- //2 XT時(shí)鐘/外部時(shí)鐘
- //3 HIRC的2倍頻
- //4 XT時(shí)鐘/外部時(shí)鐘的2倍頻
- //5 LIRC
- //6 LP時(shí)鐘/外部時(shí)鐘
- //7 LP時(shí)鐘/外部時(shí)鐘的2位頻
-
- //Bit3:保留位
-
- //Bit[2:1]:TIM1時(shí)鐘源選擇位
- //值 時(shí)鐘源
- //0 系統(tǒng)時(shí)鐘/主時(shí)鐘
- //1 HIRC
- //2 XT時(shí)鐘/外部時(shí)鐘
- //3 HIRC的2倍頻
- //4 XT時(shí)鐘/外部時(shí)鐘的2倍頻
- //5 LIRC
- //6 LP時(shí)鐘/外部時(shí)鐘
- //7 LP時(shí)鐘/外部時(shí)鐘的2位頻
- TIM2CR1 =0B10000101; //預(yù)載允許,邊沿對(duì)齊向上計(jì)數(shù)器,計(jì)數(shù)器使能
- //Bit7:自動(dòng)預(yù)裝載允許位
- //0:TIM2_ARR寄存器沒有緩沖,它可以被直接寫入;
- //1:TIM2_ARR寄存器由預(yù)裝載緩沖器緩沖。
-
- //Bit[6:4]:保留位
-
- //Bit3:單脈沖模式
- //0:在發(fā)生更新事件時(shí),計(jì)數(shù)器不停止;
- //1:在發(fā)生下一次更新事件(清除CEN位)時(shí),計(jì)數(shù)器停止。
-
- //Bit2:更新請(qǐng)求源
- //0:如果UDIS允許產(chǎn)生更新事件,則下述任一事件產(chǎn)生一個(gè)更新中斷:
- //寄存器被更新(計(jì)數(shù)器上溢/下溢)
- //軟件設(shè)置UG位
- //時(shí)鐘/觸發(fā)控制器產(chǎn)生的更新
- //1:如果UDIS允許產(chǎn)生更新事件,則只有當(dāng)下列事件發(fā)生時(shí)才產(chǎn)生更新中斷,并UIF置1:
- //寄存器被更新(計(jì)數(shù)器上溢/下溢)
-
- //Bit1:禁止更新
- //0:一旦下列事件發(fā)生,產(chǎn)生更新(UEV)事件:
- //計(jì)數(shù)器溢出/下溢
- //產(chǎn)生軟件更新事件
- //時(shí)鐘/觸發(fā)模式控制器產(chǎn)生的硬件復(fù)位被緩存的寄存器被裝入它們的預(yù)裝載值。
- //1:不產(chǎn)生更新事件,影子寄存器(ARR_SHAD、PSC_SHAD、CCRx_SHAD)保持它們的值。
-
- //Bit0:允許計(jì)數(shù)器
- //0:禁止計(jì)數(shù)器;
- //1:使能計(jì)數(shù)器。
-
- TIM2IER = 0B00000001;
- //Bit[7:4]:保留位
- //Bit3:允許捕獲/比較3中斷
- //0:禁止捕獲/比較3中斷;
- //1:允許捕獲/比較3中斷。
- //Bit2:允許捕獲/比較2中斷
- //0:禁止捕獲/比較2中斷;
- //1:允許捕獲/比較2中斷。
- //Bit1:允許捕獲/比較1中斷
- //0:禁止捕獲/比較1中斷;
- //1:允許捕獲/比較1中斷。
- //Bit0:允許更新中斷
- //0:禁止更新中斷;
- //1:允許更新中斷。
-
- //TIM2ARRH =(65536-64896)*4/256; //自動(dòng)重載,周期 速度更快了,所以要乘以 X 速度慢就要除以 ÷
- //TIM2ARRL =(65536-64896)*4%256;
- TIM2ARRH =0;
- TIM2ARRL =213;
-
- GIE =1; //開總中斷
- }
- /*-------------------------------------------------
- * 函數(shù)名:Time1Initial
- * 功能: 上電系統(tǒng)初始化
- * 輸入: 無
- * 輸出: 無
- --------------------------------------------------*/
- void Time1Initial(void)
- {
- PCKEN |= 0B00000010; //使能timer1時(shí)鐘模塊
- CKOCON=0B00100000;
- //TCKSRC = 0B00110011; //TIM1時(shí)鐘為HIRC的2倍頻
- TCKSRC = 0B00000000;
- //Bit7低頻內(nèi)振模式:1=256K 振蕩頻率模式,0 = 32K 振蕩頻率模式
- //Bit[6:4]:TIM2時(shí)鐘源選擇位
- //值 時(shí)鐘源
- //0 系統(tǒng)時(shí)鐘/主時(shí)鐘
- //1 HIRC
- //2 XT時(shí)鐘/外部時(shí)鐘
- //3 HIRC的2倍頻
- //4 XT時(shí)鐘/外部時(shí)鐘的2倍頻
- //5 LIRC
- //6 LP時(shí)鐘/外部時(shí)鐘
- //7 LP時(shí)鐘/外部時(shí)鐘的2位頻
- //Bit3:保留位
- //Bit[2:1]:TIM1時(shí)鐘源選擇位
- //值 時(shí)鐘源
- //0 系統(tǒng)時(shí)鐘/主時(shí)鐘
- //1 HIRC
- //2 XT時(shí)鐘/外部時(shí)鐘
- //3 HIRC的2倍頻
- //4 XT時(shí)鐘/外部時(shí)鐘的2倍頻
- //5 LIRC
- //6 LP時(shí)鐘/外部時(shí)鐘
- //7 LP時(shí)鐘/外部時(shí)鐘的2位頻
- TIM1CR1 =0B10000101; //預(yù)載允許,邊沿對(duì)齊向上計(jì)數(shù)器,計(jì)數(shù)器使能
- //Bit7:自動(dòng)預(yù)裝載允許位
- //0:TIM1_ARR寄存器沒有緩沖,它可以被直接寫入;
- //1:TIM1_ARR寄存器由預(yù)裝載緩沖器緩沖。
- //Bit[6:5]:選擇對(duì)齊模式
- //00:邊沿對(duì)齊模式。計(jì)數(shù)器依據(jù)方向位(DIR)向上或向下計(jì)數(shù)。
- //01:中央對(duì)齊模式1。計(jì)數(shù)器交替地向上和向下計(jì)數(shù)。配置為輸出的通道(TIM1_CCMRx寄存器中CciS=00)的輸出比較中斷標(biāo)志位,只在計(jì)數(shù)器向下計(jì)數(shù)時(shí)被置1。
- //10: 中央對(duì)齊模式2。計(jì)數(shù)器交替地向上和向下計(jì)數(shù)。配置為輸出的通道(TIM1_CCMRx寄存器中CciS=00)的輸出比較中斷標(biāo)志位,只在計(jì)數(shù)器向上計(jì)數(shù)時(shí)被置1。
- //11:中央對(duì)齊模式3。計(jì)數(shù)器交替地向上和向下計(jì)數(shù)。配置為輸出的通道(TIM1_CCMRx寄存器中CciS=00)的輸出比較中斷標(biāo)志位,在計(jì)數(shù)器向上和向下計(jì)數(shù)時(shí)均被置1。
- //Bit4:方向
- //0:計(jì)數(shù)器向上計(jì)數(shù);
- //1:計(jì)數(shù)器向下計(jì)數(shù)。
- //Bit3:單脈沖模式
- //0:在發(fā)生更新事件時(shí),計(jì)數(shù)器不停止;
- //1:在發(fā)生下一次更新事件(清除CEN位)時(shí),計(jì)數(shù)器停止。
- //Bit2:更新請(qǐng)求源
- //0:如果UDIS允許產(chǎn)生更新事件,則下述任一事件產(chǎn)生一個(gè)更新中斷:
- //寄存器被更新(計(jì)數(shù)器上溢/下溢)
- //軟件設(shè)置UG位
- //時(shí)鐘/觸發(fā)控制器產(chǎn)生的更新
- //1:如果UDIS允許產(chǎn)生更新事件,則只有當(dāng)下列事件發(fā)生時(shí)才產(chǎn)生更新中斷,并UIF置1:
- //寄存器被更新(計(jì)數(shù)器上溢/下溢)
- //Bit1: 禁止更新
- //0:一旦下列事件發(fā)生,產(chǎn)生更新(UEV)事件:
- //計(jì)數(shù)器溢出/下溢
- //產(chǎn)生軟件更新事件
- //時(shí)鐘/觸發(fā)模式控制器產(chǎn)生的硬件復(fù)位被緩存的寄存器被裝入它們的預(yù)裝載值。
- //1:不產(chǎn)生更新事件,影子寄存器(ARR、PSC、CCRx)保持它們的值。如果設(shè)置了UG位或時(shí)鐘/觸發(fā)控制器發(fā)出了一個(gè)硬件復(fù)位,則計(jì)數(shù)器和預(yù)分頻器被重新初始化。
- //Bit0: 允許計(jì)數(shù)器
- //0:禁止計(jì)數(shù)器;
- //1:使能計(jì)數(shù)器。
- TIM1SMCR=0B00000000;
- //Bit7:保留位
- //Bit[6:4]:觸發(fā)選擇,這3位選擇用于選擇同步計(jì)數(shù)器的觸發(fā)輸入。
- //000:內(nèi)部觸發(fā)ITR0連接到TIM6 TRGO (此設(shè)計(jì)沒有TIM6,所以固定接0)
- //001:保留
- //010:內(nèi)部觸發(fā)ITR2連接到TIM5 TRGO(此設(shè)計(jì)沒有TIM5,所以固定接0)
- //011:保留
- //100:TI1的邊沿檢測(cè)器(TI1F_ED)
- //101:濾波后的定時(shí)器輸入1(TI1FP1)
- //110:濾波后的定時(shí)器輸入2(TI2FP2)
- //111:外部觸發(fā)輸入(ETRF)
- //注:這些位只能在未用到(如SMS=000)時(shí)被改變,以避免在改變時(shí)產(chǎn)生錯(cuò)誤的邊沿檢測(cè)。
- //Bit3:保留
- //Bit[2:0]:時(shí)鐘/觸發(fā)/從模式選擇,當(dāng)選擇了外部信號(hào),觸發(fā)信號(hào)(TRGI)的有效邊沿與選中的外部輸入極性相關(guān)(見輸入控制寄存器和控制寄存器的說明)
- //000:時(shí)鐘/觸發(fā)控制器禁止 – 如果CEN=1,則預(yù)分頻器直接由內(nèi)部時(shí)鐘驅(qū)動(dòng)。
- //001:編碼器模式1 – 根據(jù)TI1FP1的電平,計(jì)數(shù)器在TI2FP2的邊沿向上/下計(jì)數(shù)。
- //010:編碼器模式2 – 根據(jù)TI2FP2的電平,計(jì)數(shù)器在TI1FP1的邊沿向上/下計(jì)數(shù)。
- //011:編碼器模式3 – 根據(jù)另一個(gè)輸入的電平,計(jì)數(shù)器在TI1FP1和TI2FP2的邊沿向上/下計(jì)數(shù)。
- //100:復(fù)位模式 – 在選中的觸發(fā)輸入(TRGI)的上升沿時(shí)重新初始化計(jì)數(shù)器,并且產(chǎn)生一個(gè)更新寄存器的信號(hào)。
- //101:門控模式 – 當(dāng)觸發(fā)輸入(TRGI)為高時(shí),計(jì)數(shù)器的時(shí)鐘開啟。一旦觸發(fā)輸入變?yōu)榈,則計(jì)數(shù)器停止(但不復(fù)位)。計(jì)數(shù)器的啟動(dòng)和停止都是受控的。
- //110:觸發(fā)模式 – 計(jì)數(shù)器在觸發(fā)輸入TRGI的上升沿啟動(dòng)(但不復(fù)位),只有計(jì)數(shù)器的啟動(dòng)是受控的。
- //111:外部時(shí)鐘模式1 – 選中的觸發(fā)輸入(TRGI)的上升沿驅(qū)動(dòng)計(jì)數(shù)器。
- //注:如果TI1F_ED被選為觸發(fā)輸入(TS=100)時(shí),不要使用門控模式。這是因?yàn)門I1F_ED在每次
- //TI1F變化時(shí)只是輸出一個(gè)脈沖,然而門控模式是要檢查觸發(fā)輸入的電平。
- //TIM1IER = 0B00000001;
- TIM1IER = 0B00000000;
- //Bit7:允許剎車中斷
- //0:禁止剎車中斷;
- //1:允許剎車中斷。
- //Bit6:觸發(fā)中斷使能
- //0:禁止觸發(fā)中斷;
- //1:使能觸發(fā)中斷。
- //Bit5:允許COM中斷
- //0:禁止COM中斷;
- //1:允許COM中斷。
- //Bit4:允許捕獲/比較4中斷
- //0:禁止捕獲/比較4中斷;
- //1:允許捕獲/比較4中斷。
- //Bit3:允許捕獲/比較3中斷
- //0:禁止捕獲/比較3中斷;
- //1:允許捕獲/比較3中斷。
- //Bit2:允許捕獲/比較2中斷
- //0:禁止捕獲/比較2中斷;
- //1:允許捕獲/比較2中斷。
- //Bit1:允許捕獲/比較1中斷
- //0:禁止捕獲/比較1中斷;
- //1:允許捕獲/比較1中斷。
- //Bit0:允許更新中斷
- //0:禁止更新中斷;
- //1:允許更新中斷。
- TIM1SR1 =0B00000000;
- //Bit7:剎車中斷標(biāo)記(寫1清0,寫0無效)
- //0:無剎車事件產(chǎn)生;
- //1:剎車輸入上檢測(cè)到有效電平。
- //Bit6:觸發(fā)器中斷標(biāo)記(寫1清0,寫0無效)
- //0:無觸發(fā)器事件產(chǎn)生;
- //1:觸發(fā)中斷等待響應(yīng)。
- //Bit5:保留位
- //Bit4:捕獲/比較4中斷標(biāo)記
- //參考CC1IF描述。
- //Bit3:捕獲/比較3中斷標(biāo)記
- //參考CC1IF描述。
- //Bit2:捕獲/比較2中斷標(biāo)記
- //參考CC1IF描述。
- //Bit1:捕獲/比較1中斷標(biāo)記 如果通道CC1配置為輸出模式:(寫1清0,寫0無效)
- //0:無匹配發(fā)生;
- //1:TIMx_CNT的值與TIMx_CCR1的值匹配。
- //注:在中心對(duì)稱模式下,當(dāng)計(jì)數(shù)器值為0時(shí),向上計(jì)數(shù),當(dāng)計(jì)數(shù)器值為ARR時(shí),向下計(jì)數(shù)(它從0向上計(jì)數(shù)到ARR-1,再由ARR向下計(jì)數(shù)到1)。因此,對(duì)所有的SMS位值,這兩個(gè)值都不置標(biāo)記。但是,如果CCR1>ARR,則當(dāng)CNT達(dá)到ARR值時(shí),CC1IF置1。
- //如果通道CC1配置為輸入模式:當(dāng)捕獲事件發(fā)生時(shí)該位由硬件置1,它由軟件清0或通過讀TIM1_CCR1L清0。
- //0:無輸入捕獲產(chǎn)生;
- //1:計(jì)數(shù)器值已被捕獲(拷貝)至TIM1_CCR1(在IC1上檢測(cè)到與所選極性相同的邊沿)。
- //Bit0:更新中斷標(biāo)記,當(dāng)產(chǎn)生更新事件時(shí)該位由硬件置1。它由軟件清0。
- //0:無更新事件產(chǎn)生;
- //1:更新事件等待響應(yīng)。當(dāng)寄存器被更新時(shí)該位由硬件置1:
- //若TIM1_CR1寄存器的UDIS=0,當(dāng)計(jì)數(shù)器上溢或下溢時(shí);
- //若TIM1_CR1寄存器的UDIS=0、URS=0,當(dāng)設(shè)置TIM1_EGR寄存器的UG位軟件對(duì)計(jì)數(shù)器
- //CNT重新初始化時(shí);
- //若TIM1_CR1寄存器的UDIS=0、URS=0,當(dāng)計(jì)數(shù)器CNT被觸發(fā)事件重新初始化時(shí) (參考0
- //從模式控制寄存器TIM1_SMCR)。
- TIM1SR2 =0B00000000;
- TIM1EGR =0B00000000;
- //Bit7:產(chǎn)生剎車事件,該位由軟件置1,用于產(chǎn)生一個(gè)剎車事件,由硬件自動(dòng)清0。
- //0:無動(dòng)作;
- //1:產(chǎn)生一個(gè)剎車事件。此時(shí)MOE=0、BIF=1,若開啟對(duì)應(yīng)的中斷(BIE=1),則產(chǎn)生相應(yīng)的中斷。
- //Bit[6:5]:保留位
- //Bit4:產(chǎn)生捕獲/比較4事件
- //參考CC1G描述。
- //Bit3:產(chǎn)生捕獲/比較3事件
- //參考CC1G描述。
- //Bit2:產(chǎn)生捕獲/比較2事件
- //參考CC1G描述。
- //Bit1:產(chǎn)生捕獲/比較1事件
- //該位由軟件置1,用于產(chǎn)生一個(gè)捕獲/比較事件,由硬件自動(dòng)清0。
- //0:無動(dòng)作;
- //1:在通道CC1上產(chǎn)生一個(gè)捕獲/比較事件: 若通道CC1配置為輸出:
- //設(shè)置CC1IF=1,若開啟對(duì)應(yīng)的中斷,則產(chǎn)生相應(yīng)的中斷。若通道CC1配置為輸入:
- //當(dāng)前的計(jì)數(shù)器值被捕獲至TIM1_CCR1寄存器,設(shè)置CC1IF=1,若開啟對(duì)應(yīng)的中斷,則產(chǎn)生相應(yīng)的中斷。若CC1IF已經(jīng)為1,則設(shè)置CC1OF=1。
- //Bit0: 保留位
- TIM1CCMR1 =0B01101000;//CC1通道被配置為輸出
- //Bit7:保留位
- //Bit[6:4]:輸出比較1模式,該3位定義了輸出參考信號(hào)OC1REF的動(dòng)作,而OC1REF決定了OC1的值。OC1REF是高電平有效,而OC1的有效電平取決于CC1P位。
- //000:凍結(jié)。輸出比較寄存器TIM1_CCR1與計(jì)數(shù)器TIM1_CNT間的比較對(duì)OC1REF不起作用;
- //001:匹配時(shí)設(shè)置通道1的輸出為有效電平。當(dāng)計(jì)數(shù)器TIM1_CNT的值與捕獲/比較寄存器1(TIM1_CCR1)相同時(shí),強(qiáng)制OC1REF為高。
- //010:匹配時(shí)設(shè)置通道1的輸出為無效電平。當(dāng)計(jì)數(shù)器TIM1_CNT的值與捕獲/比較寄存器1(TIM1_CCR1)相同時(shí),強(qiáng)制OC1REF為低。
- //011:翻轉(zhuǎn)。當(dāng)TIM1_CCR1=TIM1_CNT時(shí),翻轉(zhuǎn)OC1REF的電平。
- //100:強(qiáng)制為無效電平。強(qiáng)制OC1REF為低。
- //101:強(qiáng)制為有效電平。強(qiáng)制OC1REF為高。
- //110:PWM模式1- 在向上計(jì)數(shù)時(shí),一旦TIM1_CNT<TIM1_CCR1時(shí)通道1為有效電平,否則為無效電平;在向下計(jì)數(shù)時(shí),一旦TIM1_CNT>TIM1_CCR1時(shí)通道1為無效電平(OC1REF=0), 否則為有效電平(OC1REF=1)。
- //111:PWM模式2- 在向上計(jì)數(shù)時(shí),一旦TIM1_CNT<TIM1_CCR1時(shí)通道1為無效電平,否則為有效電平;在向下計(jì)數(shù)時(shí),一旦TIM1_CNT>TIM1_CCR1時(shí)通道1為有效電平,否則為無效電平。
- //注1:一旦LOCK級(jí)別設(shè)為3(TIM1_BKR寄存器中的LOCK位)并且CC1S=00(該通道配置成輸出) 則該位不能被修改。
- //注2:在PWM模式1或PWM模式2中,只有當(dāng)比較結(jié)果改變了或在輸出比較模式中從凍結(jié)模式切換到PWM模式時(shí),OC1REF電平才改變。(參考17.5.7PWM模式)
- //注3:在有互補(bǔ)輸出的通道上,這些位是預(yù)裝載的。如果TIM1_CR2寄存器的CCPC=1,OCM 位只有在COM事件發(fā)生時(shí),才從預(yù)裝載位取新值。
- //Bit3:輸出比較1預(yù)裝載使能
- //0:禁止TIM1_CCR1寄存器的預(yù)裝載功能,可隨時(shí)寫入TIM1_CCR1寄存器,并且新寫入的數(shù)值立即起作用。
- //1:開啟TIM1_CCR1寄存器的預(yù)裝載功能,讀寫操作僅對(duì)預(yù)裝載寄存器操作,TIM1_CCR1的預(yù)裝載值在更新事件到來時(shí)被加載至當(dāng)前寄存器中。
- //注1:一旦LOCK級(jí)別設(shè)為3(TIM1_BKR寄存器中的LOCK位)并且CC1S=00(該通道配置成輸出) 則該位不能被修改。
- //注2:為了操作正確,在PWM模式下必須使能預(yù)裝載功能。但在單脈沖模式下(TIM1_CR1寄存器的OPM=1),它不是必須的?
- //Bit2:保留位
- //Bit[1:0]:捕獲/比較1 選擇。這2位定義通道的方向(輸入/輸出),及輸入腳的選擇:
- //00:CC1通道被配置為輸出;
- //01:CC1通道被配置為輸入,IC1映射在TI1FP1上;
- //10:CC1通道被配置為輸入,IC1映射在TI2FP1上;
- //11:CC1通道被配置為輸入,IC1映射在TRC上。此模式僅工作在內(nèi)部觸發(fā)器輸入被選中時(shí)(由
- //TIM1_SMCR寄存器的TS位選擇)。
- //注:CC1S僅在通道關(guān)閉時(shí)(TIM1_CCER1寄存器的CC1E=0)才是可寫的。
- TIM1CCMR2 =0B01101000;//CC2通道被配置為輸出
- TIM1CCMR3 =0B01101000;//CC3通道被配置為輸出
- TIM1CCMR4 =0B01101000;//CC4通道被配置為輸出
- TIM1CCER1 =0B01000100; //--bit3 互補(bǔ)電平0為高1為低 bit2 互補(bǔ)輸出 1為輸出 bit1 非互補(bǔ)極性 0為高 bit0非互補(bǔ)輸出 1為開啟 管理 1 1N 2 2N
- //Bit7:輸入捕獲/比較2互補(bǔ)輸出極性。參考CC1NP的描述。
- //Bit6:輸入捕獲/比較2互補(bǔ)輸出使能。參考CC1NE的描述。
- //Bit5:輸入捕獲/比較2輸出極性。參考CC1P的描述。
- //Bit4:輸入捕獲/比較2輸出使能。參考CC1E的描述。
- //Bit3:輸入捕獲/比較1互補(bǔ)輸出極性
- //0:OC1N高電平有效;
- //1:OC1N低電平有效。
- //注1:一旦LOCK級(jí)別(TIM1_BKR寄存器中的LCCK位)設(shè)為3或2且CC1S=00(通道配置為輸出) 則該位不能被修改。
- //Bit2:輸入捕獲/比較1互補(bǔ)輸出使能
- //0:關(guān)閉- OC1N禁止輸出,因此OC1N的輸出電平依賴于MOE、OSSI、OSSR、OIS1、
- //OIS1N和CC1E位的值。
- //1:開啟- OC1N信號(hào)輸出到對(duì)應(yīng)的輸出引腳,其輸出電平依賴于MOE、OSSI、OSSR、
- //OIS1、OIS1N和CC1E位的值。
- //Bit1:輸入捕獲/比較1輸出極性CC1通道配置為輸出:
- //0:OC1高電平有效;
- //1:OC1低電平有效。
- //CC1通道配置為觸發(fā)(參考圖61):
- //0:觸發(fā)發(fā)生在TI1F的高電平或上升沿;
- //1:觸發(fā)發(fā)生在TI1F的低電平或下降沿。
- //CC1通道配置為輸入(參考圖61):
- //0:捕捉發(fā)生在TI1F的高電平或上升沿;
- //1:捕捉發(fā)生在TI1F的低電平或下降沿。
- //注1:一旦LOCK級(jí)別(TIM1_BKR寄存器中的LCCK位)設(shè)為3或2,則該位不能被修改。
- //COM事件發(fā)生時(shí),CC1P位才從預(yù)裝載位中取新值。
-
- //Bit0:輸入捕獲/比較1輸出使能
- //CC1通道配置為輸出:
- //0: 關(guān)閉- OC1禁止輸出,因此OC1的輸出電平依賴于MOE、OSSI、OSSR、OIS1、OIS1N和CC1NE位的值。
- //1: 開啟- OC1信號(hào)輸出到對(duì)應(yīng)的輸出引腳,其輸出電平依賴于MOE、OSSI、OSSR、OIS1、OIS1N和CC1NE位的值。CC1通道配置為輸入
- //該位決定了計(jì)數(shù)器的值是否能捕獲入TIM1_CCR1寄存器。
- //0:捕獲禁止;
- //0:捕獲使能。
- TIM1CCER2 =0B00010100; //--管理 3 3N 4通道
- AFP0=0B00001100; //使用了重映射
- AFP1=0B00000000; //使用了重映射
- TIM1CNTRH = 0B00000000; //TIM1計(jì)數(shù)器
- TIM1CNTRL = 0B00000000;
- TIM1PSCRH = 0B00000000;
- TIM1PSCRL = 0B00000000;
- TIM1ARRH = 0; //自動(dòng)重載,周期
- TIM1ARRL = 213;//縮小了3倍
- TIM1RCR = 0B00001111; //重復(fù)計(jì)數(shù)器的值
- TIM1CCR1H =0; //PWM脈寬
- TIM1CCR1L = 0;
- TIM1CCR2H =0; //PWM脈寬
- TIM1CCR2L = 0;
- TIM1CCR3H = 0; //PWM脈寬
- TIM1CCR3L = 0;
- TIM1CCR4H =0; //PWM脈寬
- TIM1CCR4L = 0;
- TIM1BKR = 0B11000000; //輸出使能,禁止剎車
- TIM1DTR = 0B00000111; //死區(qū)發(fā)生器
- //Bit[7:0]: 死區(qū)發(fā)生器設(shè)置,這些位定義了插入互補(bǔ)輸出之間的死區(qū)持續(xù)時(shí)間。假設(shè)DT表示其持續(xù)時(shí)間,tCK_PSC為TIM1的時(shí)鐘脈沖:
- //DTG[7:5]=0xx => DT=DTG[7:0]x tdtg,其中: tdtg=tCK_PSC. (f1)
- //DTG[7:5]=10x => DT=(64+DTG[5:0])x tdtg,其中:tdtg= tCK_PSC. (f2)
- //DTG[7:5]=110 => DT=(32+DTG[4:0])x tdtg,其中:tdtg=8x tCK_PSC. (f3)
- //DTG[7:5]=111 => DT=(32+DTG[4:0])x tdtg,其中:tdtg=16x tCK_PSC. (f4)
- TIM1OISR =0B00000000; //空閑輸出狀態(tài)設(shè)置
- //Bit1:輸出空閑狀態(tài)1(OC1N輸出)。
- //0:當(dāng)MOE=0時(shí),則在一個(gè)死區(qū)時(shí)間后,OC1N=0;
- //1:當(dāng)MOE=0時(shí),則在一個(gè)死區(qū)時(shí)間后,OC1N=1。
- //注:已經(jīng)設(shè)置了LOCK(TIM1_BKR寄存器)級(jí)別1、2或3后,該位不能被修改。
- //Bit0:輸出空閑狀態(tài)1(OC1輸出)。
- //0:當(dāng)MOE=0時(shí),如果OC1N使能,則在一個(gè)死區(qū)后,OC1=0;
- //1:當(dāng)MOE=0時(shí),如果OC1N使能,則在一個(gè)死區(qū)后,OC1=1。
- //注:已經(jīng)設(shè)置了LOCK(TIM1_BKR寄存器)級(jí)別1、2或3后,該位不能被修改。
- LEBCON =0B00000000; //前沿消隱禁止
- //Bit7:前沿消隱使能位(僅當(dāng)ADGO=0時(shí)可進(jìn)行切換,否則ADC工作異常)
- //1 = 使能
- //0 = 禁止
- //Bit[6:5]:前沿消隱通道選擇
- //00 = TIM1_CH1
- //01 = TIM1_CH2
- //10 = TIM1_CH3
- //11 = TIM1_CH4
- //Bit4:N/A 保留位,讀0
- //Bit3: PWM消隱沿選擇
- //0 = PWM上升沿
- //1 = PWM下降沿
- //Bit[2:0]:TIM1的故障源使能,高有效
- //BKS2:選擇ADC閾值比較
- //BKS1:選擇LVD檢測(cè)
- //BKS0:選擇BKIN管腳
-
- //GIE=1;
- }
- void Delay(uint ii)
- {
- uint x,y;
- for(x=0;x<250;x++)
- for(y=ii;y>0;y--);
- }
- //===========================================================
- //Funtion name:main
- //parameters: 無
- //returned value:無
- //===========================================================
- void main(void)
- {
- SysInit();
- Time4Initial();
- Time1Initial();//TCKSRC=0B00000011; //TIM1時(shí)鐘為HIRC的2倍?
- Time2Initial();//TCKSRC=0B00110000; //TIM2時(shí)鐘為HIRC的2倍?
- TouchInital();
- while(1)
- {
- TIM1CCR1L+=21;Delay(1500);
- if(TIM1CCR1L>210)
- TIM1CCR1L=0;
-
- TIM1CCR2L+=21;Delay(1500);
- if(TIM1CCR2L>210)
- TIM1CCR2L=0;
-
- TIM1CCR3L+=21;Delay(1500);
- if(TIM1CCR3L>210)
- TIM1CCR3L=0;
- TIM1CCR4L+=21;Delay(1500);
- if(TIM1CCR4L>210)
- TIM1CCR4L=0;
- if(dii2>=10)//定時(shí)器2 10秒
- {
- dii2=0;
- LED1=~LED1;
- }
- if(TouchTimeCount>=(1000/SCANNINGTIME/(fmd_channels+1))) //按鍵掃描頻率
- {
- TouchTimeCount=0;
- GKeyValue = TouchKeyScan(); //按鍵掃描并獲取按鍵值
- }
- switch(GKeyValue)//開關(guān)機(jī)鍵
- {
- case 0x1000:
- if(flag==0)
- {
- flag=1;
- LED1=~LED1;
- }
- break;
- case 0x0800:
- if(flag==0)
- {
- flag=1;
- LED1=~LED1;
- }
- break;
- case 0x0400:
- if(flag==0)
- {
- flag=1;
- LED1=~LED1;
- }
- break;
- case 0x0000:
- flag=0;
- break;
- }
- }
- }
- //-----------------------------------------------------
- void interrupt ISR(void)
- {
- if(T4UIE && T4UIF)
- {
- T4UIF = 1;
-
- TouchTimeCount++;
- }
- if(T2UIE && T2UIF)
- {
- T2UIF = 1; //寫1清零標(biāo)志位
- dii++;
- if(dii>=12500*3)
- {
- dii=0;
- dii2++;
- }
- }
- }
復(fù)制代碼 程序:在上面
原理圖: 無
仿真: 無
PCB:
PCB文件.7z
(185.63 KB, 下載次數(shù): 24)
2023-8-31 17:59 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|