久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
關于輝芒微單片機FT62F083-RB內部PWM使用 附源程序和PCB文件
[打印本頁]
作者:
yinqing452
時間:
2023-8-31 14:53
標題:
關于輝芒微單片機FT62F083-RB內部PWM使用 附源程序和PCB文件
輝芒微單片機FT62F083-RB內部可以做滑條滑輪調光,在調光的同時,還需要用到內部的PWM,所以配置起來較麻煩。研究了半天,故記錄下來。
內部PWM使用注意事項:
其實它就是3個寄存器+1個重映射寄存器
第1個寄存器TIM1CCMR1
( TIM1CCMR2 TIM1CCMR3 TIM1CCMR4 表示4組PWM寄存器)使能它,并選擇對應的PWM模式,通常我們是這樣設置的 TIM1CCMR1 =0B01101000;//通道1 選擇PWM模式1并使能。其它3組同理。
第2個寄存器
TIM1CCER1:
它前4位控制PWM2,后4位控制PWM1,我們發現有N的就選擇NE那一個選擇位,若沒有N就選擇E那個選擇位,不要選擇P那個位就行了。
第3個寄存器
TIM1CCER2:
它前2位控制PWM4,后4位控制PWM3,同樣我們發現有N的就選擇NE那一個選擇位,若沒有N就選擇E那個選擇位,不要選擇P那個位就行了。
第
4個、重映射 AFP0=0B00001100; 將PWM2 PWM3重映射到對應的位即可。
具體操縱如下:
一、TIM1CCMR1 :
bit7 保留位
bit 6-4:
該3位定義了輸出參考信號OC1REF的動作,而OC1REF決定了OC1的值。OC1REF是高電平有效,而OC1的有效電平取決于CC1P位。
000:凍結。輸出實際比較值(CCRx_SHAD)與計數器TIM1_CNT間的比較對OC1REF不起作用;
001:匹配時設置通道1的輸出為有效電平。當計數器TIM1_CNT的值與捕獲/比較寄存器1(TIM1_CCR1)相同時,強制OC1REF為高。
010:匹配時設置通道1的輸出為無效電平。當計數器TIM1_CNT的值與捕獲/比較寄存器1(TIM1_CCR1)相同時,強制OC1REF為低。
011:翻轉。當TIM1_CCR1=TIM1_CNT時,翻轉OC1REF的電平。
100:強制為無效電平。強制OC1REF為低。
101:強制為有效電平。強制OC1REF為高。
110:PWM模式1- 在向上計數時,一旦TIM1_CNT<實際比較值(CCRx_SHAD)時OC1REF為有效電平,否則為無效電平;在向下計數時,一旦TIM1_CNT>實際比較值(CCRx_SHAD)時,OC1REF為無效電平,否則為有效電平。
111:PWM模式2- 在向上計數時,一旦TIM1_CNT<實際比較值(CCRx_SHAD)時OC1REF為無效電平,否則為有效電平;在向下計數時,一旦TIM1_CNT>實際比較值(CCRx_SHAD)時,OC1REF為有效電平,否則為無效電平。
注1:一旦LOCK級別設為3(TIM1_BKR寄存器中的LOCK位)并且T1CC1S=00(該通道配置成輸出) 則該位不能被修改。
注2:在PWM模式1或PWM模式2中,只有當比較結果改變了或在輸出比較模式中從凍結模式切換到PWM模式時,OC1REF電平才改變。(參考17.5.7PWM模式)
bit3:
T1OC1PE:輸出比較1預裝載使能
0:禁止TIM1CCR1H/L寄存器的預裝載功能,可隨時寫入T1CCR1預加載寄存器,并且新寫入的數值立即起作用。
1:開啟TIM1CCR1H/L寄存器的預裝載功能,讀寫操作僅對預裝載寄存器操作,TIM1CCR1H/L的預裝載值在更新事件到來時被加載至當前寄存器中。
注1:一旦LOCK級別設為3(TIM1BKR寄存器中的T1LOCK位)并且T1CC1S=00(該通道配置成輸出) 則該位不能被修改。
注2:為了操作正確,在PWM模式下必須使能預裝載功能。但在單脈沖模式下(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上。此模式僅工作在內部觸發器輸入被選中時(由
TIM1SMCR寄存器的T1TS位選擇)。
注:T1CC1S僅在通道關閉時(TIM1CCER1寄存器的T1CC1E=0,T1CC1NE=0且已被更新)才是可寫的。
TIM1CCMR2 :同上
TIM1CCMR3 :同上
TIM1CCMR4 :同上
實際程序中這樣寫得:
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互補輸出極性。參考CC1NP的描述。
bit6
T1CC2NE:
輸入捕獲/比較2互補輸出使能。參考CC1NE的描述。
bit5
T1CC2P:
輸入捕獲/比較2輸出極性。參考CC1P的描述。
bit4
T1CC2E:
輸入捕獲/比較2輸出使能。參考CC1E的描述。
//////////////////////////////////////////////// CC1NP這一路的配置情況
bit3
T1CC1NP:
輸入捕獲/比較1互補輸出極性
0:OC1N高電平有效;
1:OC1N低電平有效。
bit2
T1CC1NE:
輸入捕獲/比較1互補輸出使能
0:關閉- OC1N禁止輸出,因此OC1N的輸出電平依賴于MOE、OSSI、OSSR、OIS1、
OIS1N和CC1E位的值。
1:開啟- OC1N信號輸出到對應的輸出引腳,其輸出電平依賴于MOE、OSSI、OSSR、
OIS1、OIS1N和CC1E位的值。
bit1
T1CC1P:
輸入捕獲/比較1輸出極性CC1通道配置為輸出:
0:OC1高電平有效;
1:OC1低電平有效。
bit0
T1CC1E:輸入捕獲/比較1輸出使能
CC1通道配置為輸出:
0: 關閉- OC1禁止輸出,因此OC1的輸出電平依賴于MOE、OSSI、OSSR、OIS1、OIS1N和CC1NE位的值。
1: 開啟- OC1信號輸出到對應的輸出引腳,其輸出電平依賴于MOE、OSSI、OSSR、OIS1 、 OIS1N 和 CC1NE 位 的 值 。
三、TIM1CCER2:
bit7:空位
bit6:空位
bit5
T1CC4P:
輸入捕獲/比較4輸出極性。參考CC1P的描述。
bit4
T1CC4E:
輸入捕獲/比較4輸出使能。參考CC1E的描述。
//////////////////////////////////////////////// CC1NP這一路的配置情況
bit3
T1CC3NP:
輸入捕獲/比較3互補輸出極性
0:OC3N高電平有效;
1:OC3N低電平有效。
bit2
T1CC3NE:
輸入捕獲/比較3互補輸出使能
0:關閉- OC3N禁止輸出,
1:開啟- OC3N信號輸出到對應的輸出引腳,
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規格書
五、重映射 AFP1=0B00000000; //管腳重映射寄存器 1
FT62F083單片機內部PWM--5路源程序如下:
#include "common.h"
#include "syscfg.h"
#include "touch.h"
/**************觸摸變量?****************/
volatile uint GKeyValue; //返回的鍵值 bit0~bit14對應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,系統時鐘為內部振蕩器
//Bit0=0,時鐘源由FOSC<2:0>決定即編譯選項時選擇
INTCON = 0; //暫禁止所有中斷
PORTA = 0B00000000;
TRISA = 0B00000000; //PA輸入輸出 0-輸出 1-輸入
WPUA = 0B00000000; //PA端口上拉控制 1-開上拉 0-關上拉
PORTB = 0B00000000;
TRISB = 0B00000000; //PB輸入輸出 0-輸出 1-輸入 PB3-輸出
WPUB = 0B00000000; //PB端口上拉控制 1-開上拉 0-關上拉
PORTC = 0B00000000;
TRISC = 0B00000000; //PC輸入輸出 0-輸出 1-輸入 PC3-輸入
WPUC = 0B00000000; //PC端口上拉控制 1-開上拉 0-關上拉
PSRC0 = 0B11111111; //PORTA,PORTB源電流設置最大
PSRC1 = 0B11111111; //PORTC,PORTD源電流設置最大
PSINK0 = 0B11111111; //PORTA灌電流設置最大 0:最小,1:最大
PSINK1 = 0B11111111; //PORTB灌電流設置最大 0:最小,1:最大
PSINK2 = 0B11111111; //PORTC灌電流設置最大 0:最小,1:最大
PSINK3 = 0B11111111; //PORTD灌電流設置最大 0:最小,1:最大
ANSELA = 0B00000000; //全為數字管腳
}
//===========================================================
//Funtion name keydeal
//parameters: 無
//returned value:無
//===========================================================
/*-------------------------------------------------
* 函數名稱:Time4Initial
* 功能:
* 輸入參數:
* 返回參數:無
-------------------------------------------------*/
void Time4Initial(void)
{
PCKEN |=0B00001000; //TIME4模塊時鐘使能
//CKOCON=0B00110000;
//TCKSRC=0B00000011;
TIM4CR1 =0B00000101;
//BIT7: 0:TIM1_ARR寄存器沒有緩沖,它可以被直接寫入; 1:TIM1_ARR寄存器由預裝載緩沖器緩沖。
//BIT6:保留
//BIT5~BIT4:timer4時鐘選擇位。
//00:系統時鐘/主時鐘
//01:內部快時鐘HIRC
//10:LP時鐘,只有當FOSC選擇LP模式時才有意義
//11:XT時鐘,只有當FOSC選擇XT模式時才有意義
//BIT3:
// 0:在發生更新事件時,計數器不停止;
// 1:在發生下一次更新事件(清除CEN位)時,計數器停止。
//BIT2:
// 0:如果UDIS允許產生更新事件,則下述任一事件產生一個更新中斷:
//寄存器被更新(計數器上溢/下溢)
//軟件設置UG位
//時鐘/觸發控制器產生的更新
// 1:如果UDIS允許產生更新事件,則只有當下列事件發生時才產生更新中斷,并UIF置1:
//寄存器被更新(計數器上溢/下溢)
//BIT1:
// 0:一旦下列事件發生,產生更新(UEV)事件:
//計數器溢出/下溢
//產生軟件更新事件
//時鐘/觸發模式控制器產生的硬件復位被緩存的寄存器被裝入它們的預裝載值。
// 1:不產生更新事件,影子寄存器(ARR、PSC、CCRx)保持它們的值。如果設置了UG位或時鐘/觸發控制器發出了一個硬件復位,則計數器和預分頻器被重新初始化。
// BIT0: 0:禁止計數器;1:使能計數器。
TIM4IER =0B00000001;
//BIT0: 0:禁止更新中斷;1:允許更新中斷。
TIM4SR =0B00000000;
//BIT0:當產生更新事件時該位由硬件置1。它由軟件寫1清0
//0:無更新事件產生;
//1:更新事件等待響應。當寄存器被更新時該位由硬件置1:
//若TIM4_CR1寄存器的UDIS=0,當計數器上溢或下溢時;
//若TIM4_CR1寄存器的UDIS=0、URS=0,當設置TIM4_EGR寄存器的UG位軟件對計數器
//CNT重新初始化時;
//若TIM4_CR1寄存器的UDIS=0、URS=0,當計數器CNT被觸發事件重新初始化時。
TIM4EGR =0B00000000;
//BIT0:該位由軟件置1,由硬件自動清0。
//0:無動作;
//1:重新初始化計數器,并產生一個更新事件。注意預分頻器的計數器也被清0(但是預分頻系數不變)。若在中心對稱模式下或DIR=0(向上計數)則計數器被清0;若DIR=1(向下計數)則計數器取TIM1_ARR的值。
TIM4CNTR=0; //TIM4 8位計數器
TIM4PSCR=0B00000110;
//預分頻器對輸入的CK_PSC時鐘進行分頻。
//計數器的時鐘頻率fCK_CNT等于fCK_PSC/2(PSC[2:0])。PSC[7:3]由硬件清0。
//PSCR包含了當更新事件產生時裝入當前預分頻器寄存器的值(包括由于清除TIMx_EGR寄存器的UG位產生的計數器清除事件)。這意味著如要新的預分頻值生效,必須產生更新事件或者CEN=0。
TIM4ARR =124;
//ARR包含了將要裝載入實際的自動重裝載寄存器的值。
//當自動重裝載的值為空時,計數器不工作。
INTCON |= 0B11000000; //開總中斷和外設中斷
}
/*-------------------------------------------------
* 函數名稱:Time2Initial
* 功能: 初始化計時器2
* 輸入參數:無
* 返回參數:無
-------------------------------------------------*/
void Time2Initial(void)
{
PCKEN |= 0B00000100; //使能timer2時鐘模塊
CKOCON = 0B00100000;
//TCKSRC = 0B00000000; //TIM2時鐘為HIRC的2倍頻
TCKSRC = 0B00000000; //TIM2時鐘為HIRC的2倍頻
//Bit7低頻內振模式:1=256K 振蕩頻率模式,0 = 32K 振蕩頻率模式
//Bit[6:4]:TIM2時鐘源選擇位
//值 時鐘源
//0 系統時鐘/主時鐘
//1 HIRC
//2 XT時鐘/外部時鐘
//3 HIRC的2倍頻
//4 XT時鐘/外部時鐘的2倍頻
//5 LIRC
//6 LP時鐘/外部時鐘
//7 LP時鐘/外部時鐘的2位頻
//Bit3:保留位
//Bit[2:1]:TIM1時鐘源選擇位
//值 時鐘源
//0 系統時鐘/主時鐘
//1 HIRC
//2 XT時鐘/外部時鐘
//3 HIRC的2倍頻
//4 XT時鐘/外部時鐘的2倍頻
//5 LIRC
//6 LP時鐘/外部時鐘
//7 LP時鐘/外部時鐘的2位頻
TIM2CR1 =0B10000101; //預載允許,邊沿對齊向上計數器,計數器使能
//Bit7:自動預裝載允許位
//0:TIM2_ARR寄存器沒有緩沖,它可以被直接寫入;
//1:TIM2_ARR寄存器由預裝載緩沖器緩沖。
//Bit[6:4]:保留位
//Bit3:單脈沖模式
//0:在發生更新事件時,計數器不停止;
//1:在發生下一次更新事件(清除CEN位)時,計數器停止。
//Bit2:更新請求源
//0:如果UDIS允許產生更新事件,則下述任一事件產生一個更新中斷:
//寄存器被更新(計數器上溢/下溢)
//軟件設置UG位
//時鐘/觸發控制器產生的更新
//1:如果UDIS允許產生更新事件,則只有當下列事件發生時才產生更新中斷,并UIF置1:
//寄存器被更新(計數器上溢/下溢)
//Bit1:禁止更新
//0:一旦下列事件發生,產生更新(UEV)事件:
//計數器溢出/下溢
//產生軟件更新事件
//時鐘/觸發模式控制器產生的硬件復位被緩存的寄存器被裝入它們的預裝載值。
//1:不產生更新事件,影子寄存器(ARR_SHAD、PSC_SHAD、CCRx_SHAD)保持它們的值。
//Bit0:允許計數器
//0:禁止計數器;
//1:使能計數器。
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; //自動重載,周期 速度更快了,所以要乘以 X 速度慢就要除以 ÷
//TIM2ARRL =(65536-64896)*4%256;
TIM2ARRH =0;
TIM2ARRL =213;
GIE =1; //開總中斷
}
/*-------------------------------------------------
* 函數名:Time1Initial
* 功能: 上電系統初始化
* 輸入: 無
* 輸出: 無
--------------------------------------------------*/
void Time1Initial(void)
{
PCKEN |= 0B00000010; //使能timer1時鐘模塊
CKOCON=0B00100000;
//TCKSRC = 0B00110011; //TIM1時鐘為HIRC的2倍頻
TCKSRC = 0B00000000;
//Bit7低頻內振模式:1=256K 振蕩頻率模式,0 = 32K 振蕩頻率模式
//Bit[6:4]:TIM2時鐘源選擇位
//值 時鐘源
//0 系統時鐘/主時鐘
//1 HIRC
//2 XT時鐘/外部時鐘
//3 HIRC的2倍頻
//4 XT時鐘/外部時鐘的2倍頻
//5 LIRC
//6 LP時鐘/外部時鐘
//7 LP時鐘/外部時鐘的2位頻
//Bit3:保留位
//Bit[2:1]:TIM1時鐘源選擇位
//值 時鐘源
//0 系統時鐘/主時鐘
//1 HIRC
//2 XT時鐘/外部時鐘
//3 HIRC的2倍頻
//4 XT時鐘/外部時鐘的2倍頻
//5 LIRC
//6 LP時鐘/外部時鐘
//7 LP時鐘/外部時鐘的2位頻
TIM1CR1 =0B10000101; //預載允許,邊沿對齊向上計數器,計數器使能
//Bit7:自動預裝載允許位
//0:TIM1_ARR寄存器沒有緩沖,它可以被直接寫入;
//1:TIM1_ARR寄存器由預裝載緩沖器緩沖。
//Bit[6:5]:選擇對齊模式
//00:邊沿對齊模式。計數器依據方向位(DIR)向上或向下計數。
//01:中央對齊模式1。計數器交替地向上和向下計數。配置為輸出的通道(TIM1_CCMRx寄存器中CciS=00)的輸出比較中斷標志位,只在計數器向下計數時被置1。
//10: 中央對齊模式2。計數器交替地向上和向下計數。配置為輸出的通道(TIM1_CCMRx寄存器中CciS=00)的輸出比較中斷標志位,只在計數器向上計數時被置1。
//11:中央對齊模式3。計數器交替地向上和向下計數。配置為輸出的通道(TIM1_CCMRx寄存器中CciS=00)的輸出比較中斷標志位,在計數器向上和向下計數時均被置1。
//Bit4:方向
//0:計數器向上計數;
//1:計數器向下計數。
//Bit3:單脈沖模式
//0:在發生更新事件時,計數器不停止;
//1:在發生下一次更新事件(清除CEN位)時,計數器停止。
//Bit2:更新請求源
//0:如果UDIS允許產生更新事件,則下述任一事件產生一個更新中斷:
//寄存器被更新(計數器上溢/下溢)
//軟件設置UG位
//時鐘/觸發控制器產生的更新
//1:如果UDIS允許產生更新事件,則只有當下列事件發生時才產生更新中斷,并UIF置1:
//寄存器被更新(計數器上溢/下溢)
//Bit1: 禁止更新
//0:一旦下列事件發生,產生更新(UEV)事件:
//計數器溢出/下溢
//產生軟件更新事件
//時鐘/觸發模式控制器產生的硬件復位被緩存的寄存器被裝入它們的預裝載值。
//1:不產生更新事件,影子寄存器(ARR、PSC、CCRx)保持它們的值。如果設置了UG位或時鐘/觸發控制器發出了一個硬件復位,則計數器和預分頻器被重新初始化。
//Bit0: 允許計數器
//0:禁止計數器;
//1:使能計數器。
TIM1SMCR=0B00000000;
//Bit7:保留位
//Bit[6:4]:觸發選擇,這3位選擇用于選擇同步計數器的觸發輸入。
//000:內部觸發ITR0連接到TIM6 TRGO (此設計沒有TIM6,所以固定接0)
//001:保留
//010:內部觸發ITR2連接到TIM5 TRGO(此設計沒有TIM5,所以固定接0)
//011:保留
//100:TI1的邊沿檢測器(TI1F_ED)
//101:濾波后的定時器輸入1(TI1FP1)
//110:濾波后的定時器輸入2(TI2FP2)
//111:外部觸發輸入(ETRF)
//注:這些位只能在未用到(如SMS=000)時被改變,以避免在改變時產生錯誤的邊沿檢測。
//Bit3:保留
//Bit[2:0]:時鐘/觸發/從模式選擇,當選擇了外部信號,觸發信號(TRGI)的有效邊沿與選中的外部輸入極性相關(見輸入控制寄存器和控制寄存器的說明)
//000:時鐘/觸發控制器禁止 – 如果CEN=1,則預分頻器直接由內部時鐘驅動。
//001:編碼器模式1 – 根據TI1FP1的電平,計數器在TI2FP2的邊沿向上/下計數。
//010:編碼器模式2 – 根據TI2FP2的電平,計數器在TI1FP1的邊沿向上/下計數。
//011:編碼器模式3 – 根據另一個輸入的電平,計數器在TI1FP1和TI2FP2的邊沿向上/下計數。
//100:復位模式 – 在選中的觸發輸入(TRGI)的上升沿時重新初始化計數器,并且產生一個更新寄存器的信號。
//101:門控模式 – 當觸發輸入(TRGI)為高時,計數器的時鐘開啟。一旦觸發輸入變為低,則計數器停止(但不復位)。計數器的啟動和停止都是受控的。
//110:觸發模式 – 計數器在觸發輸入TRGI的上升沿啟動(但不復位),只有計數器的啟動是受控的。
//111:外部時鐘模式1 – 選中的觸發輸入(TRGI)的上升沿驅動計數器。
//注:如果TI1F_ED被選為觸發輸入(TS=100)時,不要使用門控模式。這是因為TI1F_ED在每次
//TI1F變化時只是輸出一個脈沖,然而門控模式是要檢查觸發輸入的電平。
//TIM1IER = 0B00000001;
TIM1IER = 0B00000000;
//Bit7:允許剎車中斷
//0:禁止剎車中斷;
//1:允許剎車中斷。
//Bit6:觸發中斷使能
//0:禁止觸發中斷;
//1:使能觸發中斷。
//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:剎車中斷標記(寫1清0,寫0無效)
//0:無剎車事件產生;
//1:剎車輸入上檢測到有效電平。
//Bit6:觸發器中斷標記(寫1清0,寫0無效)
//0:無觸發器事件產生;
//1:觸發中斷等待響應。
//Bit5:保留位
//Bit4:捕獲/比較4中斷標記
//參考CC1IF描述。
//Bit3:捕獲/比較3中斷標記
//參考CC1IF描述。
//Bit2:捕獲/比較2中斷標記
//參考CC1IF描述。
//Bit1:捕獲/比較1中斷標記 如果通道CC1配置為輸出模式:(寫1清0,寫0無效)
//0:無匹配發生;
//1:TIMx_CNT的值與TIMx_CCR1的值匹配。
//注:在中心對稱模式下,當計數器值為0時,向上計數,當計數器值為ARR時,向下計數(它從0向上計數到ARR-1,再由ARR向下計數到1)。因此,對所有的SMS位值,這兩個值都不置標記。但是,如果CCR1>ARR,則當CNT達到ARR值時,CC1IF置1。
//如果通道CC1配置為輸入模式:當捕獲事件發生時該位由硬件置1,它由軟件清0或通過讀TIM1_CCR1L清0。
//0:無輸入捕獲產生;
//1:計數器值已被捕獲(拷貝)至TIM1_CCR1(在IC1上檢測到與所選極性相同的邊沿)。
//Bit0:更新中斷標記,當產生更新事件時該位由硬件置1。它由軟件清0。
//0:無更新事件產生;
//1:更新事件等待響應。當寄存器被更新時該位由硬件置1:
//若TIM1_CR1寄存器的UDIS=0,當計數器上溢或下溢時;
//若TIM1_CR1寄存器的UDIS=0、URS=0,當設置TIM1_EGR寄存器的UG位軟件對計數器
//CNT重新初始化時;
//若TIM1_CR1寄存器的UDIS=0、URS=0,當計數器CNT被觸發事件重新初始化時 (參考0
//從模式控制寄存器TIM1_SMCR)。
TIM1SR2 =0B00000000;
TIM1EGR =0B00000000;
//Bit7:產生剎車事件,該位由軟件置1,用于產生一個剎車事件,由硬件自動清0。
//0:無動作;
//1:產生一個剎車事件。此時MOE=0、BIF=1,若開啟對應的中斷(BIE=1),則產生相應的中斷。
//Bit[6:5]:保留位
//Bit4:產生捕獲/比較4事件
//參考CC1G描述。
//Bit3:產生捕獲/比較3事件
//參考CC1G描述。
//Bit2:產生捕獲/比較2事件
//參考CC1G描述。
//Bit1:產生捕獲/比較1事件
//該位由軟件置1,用于產生一個捕獲/比較事件,由硬件自動清0。
//0:無動作;
//1:在通道CC1上產生一個捕獲/比較事件: 若通道CC1配置為輸出:
//設置CC1IF=1,若開啟對應的中斷,則產生相應的中斷。若通道CC1配置為輸入:
//當前的計數器值被捕獲至TIM1_CCR1寄存器,設置CC1IF=1,若開啟對應的中斷,則產生相應的中斷。若CC1IF已經為1,則設置CC1OF=1。
//Bit0: 保留位
TIM1CCMR1 =0B01101000;//CC1通道被配置為輸出
//Bit7:保留位
//Bit[6:4]:輸出比較1模式,該3位定義了輸出參考信號OC1REF的動作,而OC1REF決定了OC1的值。OC1REF是高電平有效,而OC1的有效電平取決于CC1P位。
//000:凍結。輸出比較寄存器TIM1_CCR1與計數器TIM1_CNT間的比較對OC1REF不起作用;
//001:匹配時設置通道1的輸出為有效電平。當計數器TIM1_CNT的值與捕獲/比較寄存器1(TIM1_CCR1)相同時,強制OC1REF為高。
//010:匹配時設置通道1的輸出為無效電平。當計數器TIM1_CNT的值與捕獲/比較寄存器1(TIM1_CCR1)相同時,強制OC1REF為低。
//011:翻轉。當TIM1_CCR1=TIM1_CNT時,翻轉OC1REF的電平。
//100:強制為無效電平。強制OC1REF為低。
//101:強制為有效電平。強制OC1REF為高。
//110:PWM模式1- 在向上計數時,一旦TIM1_CNT<TIM1_CCR1時通道1為有效電平,否則為無效電平;在向下計數時,一旦TIM1_CNT>TIM1_CCR1時通道1為無效電平(OC1REF=0), 否則為有效電平(OC1REF=1)。
//111:PWM模式2- 在向上計數時,一旦TIM1_CNT<TIM1_CCR1時通道1為無效電平,否則為有效電平;在向下計數時,一旦TIM1_CNT>TIM1_CCR1時通道1為有效電平,否則為無效電平。
//注1:一旦LOCK級別設為3(TIM1_BKR寄存器中的LOCK位)并且CC1S=00(該通道配置成輸出) 則該位不能被修改。
//注2:在PWM模式1或PWM模式2中,只有當比較結果改變了或在輸出比較模式中從凍結模式切換到PWM模式時,OC1REF電平才改變。(參考17.5.7PWM模式)
//注3:在有互補輸出的通道上,這些位是預裝載的。如果TIM1_CR2寄存器的CCPC=1,OCM 位只有在COM事件發生時,才從預裝載位取新值。
//Bit3:輸出比較1預裝載使能
//0:禁止TIM1_CCR1寄存器的預裝載功能,可隨時寫入TIM1_CCR1寄存器,并且新寫入的數值立即起作用。
//1:開啟TIM1_CCR1寄存器的預裝載功能,讀寫操作僅對預裝載寄存器操作,TIM1_CCR1的預裝載值在更新事件到來時被加載至當前寄存器中。
//注1:一旦LOCK級別設為3(TIM1_BKR寄存器中的LOCK位)并且CC1S=00(該通道配置成輸出) 則該位不能被修改。
//注2:為了操作正確,在PWM模式下必須使能預裝載功能。但在單脈沖模式下(TIM1_CR1寄存器的OPM=1),它不是必須的?
//Bit2:保留位
//Bit[1:0]:捕獲/比較1 選擇。這2位定義通道的方向(輸入/輸出),及輸入腳的選擇:
//00:CC1通道被配置為輸出;
//01:CC1通道被配置為輸入,IC1映射在TI1FP1上;
//10:CC1通道被配置為輸入,IC1映射在TI2FP1上;
//11:CC1通道被配置為輸入,IC1映射在TRC上。此模式僅工作在內部觸發器輸入被選中時(由
//TIM1_SMCR寄存器的TS位選擇)。
//注:CC1S僅在通道關閉時(TIM1_CCER1寄存器的CC1E=0)才是可寫的。
TIM1CCMR2 =0B01101000;//CC2通道被配置為輸出
TIM1CCMR3 =0B01101000;//CC3通道被配置為輸出
TIM1CCMR4 =0B01101000;//CC4通道被配置為輸出
TIM1CCER1 =0B01000100; //--bit3 互補電平0為高1為低 bit2 互補輸出 1為輸出 bit1 非互補極性 0為高 bit0非互補輸出 1為開啟 管理 1 1N 2 2N
//Bit7:輸入捕獲/比較2互補輸出極性。參考CC1NP的描述。
//Bit6:輸入捕獲/比較2互補輸出使能。參考CC1NE的描述。
//Bit5:輸入捕獲/比較2輸出極性。參考CC1P的描述。
//Bit4:輸入捕獲/比較2輸出使能。參考CC1E的描述。
//Bit3:輸入捕獲/比較1互補輸出極性
//0:OC1N高電平有效;
//1:OC1N低電平有效。
//注1:一旦LOCK級別(TIM1_BKR寄存器中的LCCK位)設為3或2且CC1S=00(通道配置為輸出) 則該位不能被修改。
//Bit2:輸入捕獲/比較1互補輸出使能
//0:關閉- OC1N禁止輸出,因此OC1N的輸出電平依賴于MOE、OSSI、OSSR、OIS1、
//OIS1N和CC1E位的值。
//1:開啟- OC1N信號輸出到對應的輸出引腳,其輸出電平依賴于MOE、OSSI、OSSR、
//OIS1、OIS1N和CC1E位的值。
//Bit1:輸入捕獲/比較1輸出極性CC1通道配置為輸出:
//0:OC1高電平有效;
//1:OC1低電平有效。
//CC1通道配置為觸發(參考圖61):
//0:觸發發生在TI1F的高電平或上升沿;
//1:觸發發生在TI1F的低電平或下降沿。
//CC1通道配置為輸入(參考圖61):
//0:捕捉發生在TI1F的高電平或上升沿;
//1:捕捉發生在TI1F的低電平或下降沿。
//注1:一旦LOCK級別(TIM1_BKR寄存器中的LCCK位)設為3或2,則該位不能被修改。
//COM事件發生時,CC1P位才從預裝載位中取新值。
//Bit0:輸入捕獲/比較1輸出使能
//CC1通道配置為輸出:
//0: 關閉- OC1禁止輸出,因此OC1的輸出電平依賴于MOE、OSSI、OSSR、OIS1、OIS1N和CC1NE位的值。
//1: 開啟- OC1信號輸出到對應的輸出引腳,其輸出電平依賴于MOE、OSSI、OSSR、OIS1、OIS1N和CC1NE位的值。CC1通道配置為輸入
//該位決定了計數器的值是否能捕獲入TIM1_CCR1寄存器。
//0:捕獲禁止;
//0:捕獲使能。
TIM1CCER2 =0B00010100; //--管理 3 3N 4通道
AFP0=0B00001100; //使用了重映射
AFP1=0B00000000; //使用了重映射
TIM1CNTRH = 0B00000000; //TIM1計數器
TIM1CNTRL = 0B00000000;
TIM1PSCRH = 0B00000000;
TIM1PSCRL = 0B00000000;
TIM1ARRH = 0; //自動重載,周期
TIM1ARRL = 213;//縮小了3倍
TIM1RCR = 0B00001111; //重復計數器的值
TIM1CCR1H =0; //PWM脈寬
TIM1CCR1L = 0;
TIM1CCR2H =0; //PWM脈寬
TIM1CCR2L = 0;
TIM1CCR3H = 0; //PWM脈寬
TIM1CCR3L = 0;
TIM1CCR4H =0; //PWM脈寬
TIM1CCR4L = 0;
TIM1BKR = 0B11000000; //輸出使能,禁止剎車
TIM1DTR = 0B00000111; //死區發生器
//Bit[7:0]: 死區發生器設置,這些位定義了插入互補輸出之間的死區持續時間。假設DT表示其持續時間,tCK_PSC為TIM1的時鐘脈沖:
//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; //空閑輸出狀態設置
//Bit1:輸出空閑狀態1(OC1N輸出)。
//0:當MOE=0時,則在一個死區時間后,OC1N=0;
//1:當MOE=0時,則在一個死區時間后,OC1N=1。
//注:已經設置了LOCK(TIM1_BKR寄存器)級別1、2或3后,該位不能被修改。
//Bit0:輸出空閑狀態1(OC1輸出)。
//0:當MOE=0時,如果OC1N使能,則在一個死區后,OC1=0;
//1:當MOE=0時,如果OC1N使能,則在一個死區后,OC1=1。
//注:已經設置了LOCK(TIM1_BKR寄存器)級別1、2或3后,該位不能被修改。
LEBCON =0B00000000; //前沿消隱禁止
//Bit7:前沿消隱使能位(僅當ADGO=0時可進行切換,否則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檢測
//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時鐘為HIRC的2倍?
Time2Initial();//TCKSRC=0B00110000; //TIM2時鐘為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)//定時器2 10秒
{
dii2=0;
LED1=~LED1;
}
if(TouchTimeCount>=(1000/SCANNINGTIME/(fmd_channels+1))) //按鍵掃描頻率
{
TouchTimeCount=0;
GKeyValue = TouchKeyScan(); //按鍵掃描并獲取按鍵值
}
switch(GKeyValue)//開關機鍵
{
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清零標志位
dii++;
if(dii>=12500*3)
{
dii=0;
dii2++;
}
}
}
復制代碼
程序:在上面
原理圖: 無
仿真: 無
PCB:
PCB文件.7z
(185.63 KB, 下載次數: 24)
2023-8-31 17:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久精品国产亚洲一区二区三区
|
欧美亚洲视频在线观看
|
成人午夜在线视频
|
亚洲理论在线观看电影
|
国产精久久久久久久
|
成人精品在线视频
|
久久精品视频在线观看
|
国产精品久久久久免费
|
亚洲成av人片在线观看无码
|
国产一区二区三区视频免费观看
|
日韩一区二区三区视频
|
国产免费色
|
亚洲精品一区二区三区中文字幕
|
欧美精品网站
|
国产午夜精品久久久
|
日韩国产免费
|
91福利在线观看
|
日韩精品免费在线
|
国产1区
|
中文字幕a√
|
国产视频欧美
|
成人高清视频在线观看
|
中文字幕av亚洲精品一部二部
|
中文字幕在线观看一区
|
午夜欧美
|
成人精品国产一区二区4080
|
欧美日韩亚洲视频
|
亚洲欧美日韩精品久久亚洲区
|
免费不卡av
|
一区二区三区四区在线视频
|
国产偷久久一级精品60部
|
成人在线观看免费视频
|
www.久久精品
|
日韩成人免费中文字幕
|
国产中文视频
|
欧美一级大片免费观看
|
国产精品视屏
|
97人人爱
|
亚洲精品一区二区三区蜜桃久
|
请别相信他免费喜剧电影在线观看
|
免费成人高清在线视频
|