柚子快報(bào)邀請(qǐng)碼778899分享:Stm32的定時(shí)器
柚子快報(bào)邀請(qǐng)碼778899分享:Stm32的定時(shí)器
?定時(shí)器分類(lèi):
? ? ? ? ①高級(jí)定時(shí)器(功能最全)(Stm32的TIM1、TIM8)(掛載在A(yíng)PB2總線(xiàn)上)
? ? ? ? ? ? ? ? :通用定時(shí)器+重復(fù)計(jì)數(shù)器、死區(qū)生成、互補(bǔ)輸出、剎車(chē)輸入
? ? ? ? ②通用定時(shí)器(最常用)(Stm32的TIM2、TIM3、TIM4、TIM5)(掛載在A(yíng)PB1總線(xiàn)上)
? ? ? ? ? ? ? ? :基本定時(shí)器+內(nèi)外時(shí)鐘源選擇、輸入捕獲、輸出比較、編碼器接口、主從觸發(fā)模式
? ? ? ? ③基本定時(shí)器(Stm32的TIM6、TIM7)(掛載在A(yíng)PB1總線(xiàn)上)
? ? ? ? ? ? ? ? :只有定時(shí)中斷、DAC功能。也就是最基本的傳感器所用的定時(shí)器就是這種
StmF103C8T6的定時(shí)器資源:TIM1、TIM2、TIM3、TIM4(1高3通)
Stm定時(shí)器的功能:
? ? ? ? ①定時(shí)中斷(+內(nèi)外部時(shí)鐘源選擇)
? ? ? ? ②輸出比較(PWM—>電機(jī))
? ? ? ? ③輸入捕獲(測(cè)輸入的PWM的頻率、占空比)
? ? ? ? ④編碼器接口(?)
? ? ? ? ⑤主從觸發(fā)模式
Stm32定時(shí)器的時(shí)基單元:
? ? ? ? ①16位的CNT計(jì)數(shù)器(CRR,產(chǎn)生一次中斷所需要的計(jì)數(shù)值)
? ? ? ? ②16的PSC預(yù)分頻器(系統(tǒng)時(shí)鐘/預(yù)分頻 = 時(shí)鐘頻率)
? ? ? ? ②16位的自動(dòng)重裝計(jì)數(shù)器(每次循環(huán)的計(jì)數(shù)值)
???????????????????????????????????????????????????????????????????????????(主頻)? ?/? ?(預(yù)分頻)? / (計(jì)數(shù)器)
2^16 = 65536 ,所以最小中斷頻率Small-Hz是72 000 000 / 65535?/ 65535
所以最大中斷時(shí)間是 T = 1 / Hz = 1 /72 000 000 / 65535 / 65535?=?59.650503125 ≈59.65s
級(jí)聯(lián):
????????Stm32的定時(shí)器可以級(jí)聯(lián),也就是A定時(shí)器的輸出作為B定時(shí)器的輸入。
時(shí)鐘信息流向(自己編的名字):
RCC(復(fù)位時(shí)鐘控制器)—(觸發(fā)控制器)—>PSC預(yù)分頻器——>CNT計(jì)數(shù)(當(dāng)CNT==自動(dòng)重裝計(jì)數(shù)器,會(huì)產(chǎn)生中斷信號(hào),自動(dòng)重裝計(jì)數(shù)器會(huì)重置CNT)
CNT計(jì)數(shù)器:
? ? ? ? 向上計(jì)數(shù),等于A(yíng)RR時(shí)產(chǎn)生中斷
? ? ? ? 向下計(jì)數(shù),等于0是產(chǎn)生中斷
? ? ? ? 中央對(duì)齊計(jì)數(shù),等于A(yíng)RR或0時(shí)產(chǎn)生中斷
中斷:
????????先經(jīng)過(guò)中斷控制(是否開(kāi)啟/允許中斷),再去向NVIC(中斷通路、優(yōu)先級(jí))
? ? ? ? ①更新中斷:會(huì)通向NVIC,在NVIC配置了優(yōu)先級(jí)與中斷通路之后,CPU才能響應(yīng)中斷。
? ? ? ? ②更新事件:
????????????????可以觸發(fā)其他電路的工作,映射到RTGO上,TRGO可以直接連接到某個(gè)引腳進(jìn)行控制。硬件自動(dòng)化。
????????????????TRGO也可以連接其他定時(shí)器,定時(shí)器被其他定時(shí)器輸入的引腳是ITRx引腳,不同定時(shí)器的x值不同(下圖),且不是數(shù)值剛好對(duì)應(yīng)(定時(shí)器1對(duì)應(yīng)ITR1)的情況。稱(chēng)為定時(shí)器級(jí)聯(lián)。
定時(shí)器的部分說(shuō)明:
? ? ? ? ①基本定時(shí)器只能選擇內(nèi)部時(shí)鐘
? ? ? ? ②通用和高級(jí)定時(shí)器可以選擇外部時(shí)鐘ERT(),也就是可以讓一個(gè)ETR引腳接收方波信號(hào)來(lái)模擬時(shí)鐘的高低電平,但是這需要配置內(nèi)部硬件的<極性選擇><邊沿檢測(cè)><預(yù)分頻><輸入濾波電路>
? ? ? ? ③輸入的時(shí)鐘
? ? ? ? ? ? ? ? ①走ETRF進(jìn)入觸發(fā)控制器,由此可以配置其作為時(shí)基單元的時(shí)鐘源。在STM32中被稱(chēng)為“外部時(shí)鐘模式2”,一個(gè)實(shí)例就是用TIM來(lái)計(jì)數(shù)外部時(shí)鐘的次數(shù)(按鍵當(dāng)時(shí)鐘信號(hào))
? ? ? ? ? ? ? ? ②走TRGI走觸發(fā)控制器,作為觸發(fā)輸入(占用了這個(gè)通道),與定時(shí)器的從模式有關(guān)。當(dāng)這一路的輸入被作為時(shí)鐘信號(hào)時(shí),稱(chēng)為“外部時(shí)鐘模式1”(定時(shí)器級(jí)聯(lián))。
? ? ? ? ? ? ? ? ③兩者輸入都可以作為外部時(shí)鐘,區(qū)別是有沒(méi)有占用觸發(fā)輸入的通道
外部時(shí)鐘的英文簡(jiǎn)稱(chēng)是HSE(High Speed External Clock),內(nèi)部時(shí)鐘的英文簡(jiǎn)稱(chēng)是HSI(High Speed Internal Clock)。
????????TI1F_ED連接的是輸入捕獲引腳CH1,ED是邊沿的意思,此路意為輸入的上下邊沿均有效 。編碼器接口左側(cè)的TI1FP1和TI2FP2是連載CH1、CH2的濾波器之后的。
????????CH引腳用于輸入捕獲和測(cè)頻率,ITRx用于定時(shí)器的級(jí)聯(lián),編碼器接口用于讀取正交編碼器的波形
????????內(nèi)部時(shí)鐘優(yōu)先72Mhz,外部時(shí)鐘優(yōu)先走ETR通路(外部時(shí)鐘模式2,方便)
????????TRGO是定時(shí)器的主模式輸出
????????捕獲/比較的通道用于輸出PWM驅(qū)動(dòng)電機(jī)(舵機(jī)、直流電機(jī))
高級(jí)計(jì)數(shù)器的部分額外功能
重復(fù)次數(shù)計(jì)數(shù)器:設(shè)定一個(gè)值x,每經(jīng)過(guò)x個(gè)計(jì)數(shù)周期才產(chǎn)生一次中斷。類(lèi)似于再分頻。
DTG:死區(qū)生成電路,防止互補(bǔ)輸出由于硬件限制,驅(qū)動(dòng)三項(xiàng)無(wú)刷電機(jī)驅(qū)動(dòng)橋臂時(shí)造成短暫的直通現(xiàn)象,會(huì)在開(kāi)關(guān)切換的瞬間生成一定時(shí)常的死區(qū),關(guān)閉輸出,防止直通
最右側(cè)的輸出的3個(gè)引腳由一個(gè)(TIMx_CHx)變成了兩個(gè)(TIMx_CHx、TIMx_CHxN),可以輸出互補(bǔ)的(極性相反)的PWM波,用于三相無(wú)刷電機(jī),因?yàn)闊o(wú)刷電機(jī)一般需要3路控制,所以圖中第4路沒(méi)有多一條輸出。
BRK:剎車(chē)輸入。保證電機(jī)運(yùn)行安全,外部產(chǎn)生BRK信號(hào)的時(shí)候或內(nèi)部時(shí)鐘失效,就會(huì)切斷輸出,防止意外發(fā)生
緩沖計(jì)數(shù)器
(影子寄存器、硬件說(shuō)明圖的底框加黑就說(shuō)明該硬件有影子寄存器):
????????在某個(gè)計(jì)數(shù)周期未完成的時(shí)候,如果寫(xiě)入新的預(yù)分頻值,則緩沖計(jì)數(shù)器會(huì)先記錄寫(xiě)入的值,在當(dāng)前的計(jì)數(shù)周期完成之后,再把數(shù)值寫(xiě)入預(yù)分頻值,避免中途寫(xiě)入導(dǎo)致前后計(jì)數(shù)頻率不一致誤差問(wèn)題。兩個(gè)沒(méi)緩沖計(jì)數(shù)器的情況:
? ? ? ? 情況1:原ARR==36,CNT<36,寫(xiě)入55,則導(dǎo)致當(dāng)前計(jì)數(shù)周期加長(zhǎng);
? ? ? ? 情況2:原ARR==40,CNT<40但>35,寫(xiě)入35,寫(xiě)導(dǎo)致當(dāng)前計(jì)數(shù)會(huì)從CNT—>FF—>35,而不是直接因?yàn)镃NT>35而進(jìn)入下一個(gè)計(jì)數(shù)周期
????????預(yù)分頻器的工作原理:通過(guò)一個(gè)計(jì)數(shù)器在計(jì)數(shù)預(yù)定分頻值之后輸出一個(gè)信號(hào)。比如2分頻,那么就是0 1 2 0 1 2 ,并且在2—>0過(guò)程中輸出一次信號(hào)給CNT,從而CNT得到的值就是分頻過(guò)后的
時(shí)鐘樹(shù)的部分功能說(shuō)明:
左側(cè)是時(shí)鐘來(lái)源(什么頻率的時(shí)鐘作為輸入源),右側(cè)是時(shí)鐘分配(誰(shuí)需要用什么頻率的時(shí)鐘)。
硬件執(zhí)行前都需要先初始化配置時(shí)鐘,但是Stm32已經(jīng)完成了這一步操作。
系統(tǒng)時(shí)鐘:72MHz?
有四個(gè)時(shí)鐘震蕩源:
????????8MHz的內(nèi)部高速RC振蕩器
? ? ? ? 4~16MHz的外部高速石英振蕩器(晶振,比內(nèi)部RC穩(wěn)定)
? ? ? ? 32.768KHz的低速晶振(給RTC(實(shí)時(shí)時(shí)鐘)提供時(shí)鐘)
? ? ? ? 40KHz內(nèi)部低速RC振蕩器(給看門(mén)狗提供時(shí)鐘)
兩個(gè)高速晶振用于給系統(tǒng)提供時(shí)鐘(AHP,APB1,APB2)
Stm32的時(shí)鐘配置流程(SystemInit()函數(shù)的配置)
? ? ? ? 先以?xún)?nèi)部高速8Mhz時(shí)鐘(RC)啟動(dòng),然后啟動(dòng)外部時(shí)鐘,將外部8Mhz時(shí)鐘(晶振)進(jìn)行PLL鎖相環(huán)9倍頻得到72Mhz的時(shí)鐘,等到鎖相環(huán)輸出穩(wěn)定后,在將鎖相環(huán)輸出的時(shí)鐘作為系統(tǒng)時(shí)鐘。從而把系統(tǒng)時(shí)鐘改8Mhz——>72MHz。
? ? ? ? 但一旦外部時(shí)鐘出了問(wèn)題,系統(tǒng)就會(huì)選擇內(nèi)部8MHz的時(shí)鐘作為系統(tǒng)時(shí)鐘,72/8=9≈10,這時(shí)候程序運(yùn)行的速度降低。舉例:原先一秒的中斷會(huì)變成9秒的中斷
外部時(shí)鐘的運(yùn)行狀態(tài)由CSS檢測(cè),一旦出錯(cuò)就會(huì)更換系統(tǒng)時(shí)鐘源。(高級(jí)定時(shí)器的剎車(chē)輸入也有CSS)
外設(shè)時(shí)鐘使能就是XXX_cmd(XXX,ENABlE)
輸出比較+PWM:
1.大概介紹
????????CCR里的是自行設(shè)定的一個(gè)值。? ? ? ??
????????比較CNT和CCR(capture/compare registe捕獲/比較寄存器里的值)的值,來(lái)設(shè)置是輸出高/低,或是翻轉(zhuǎn)。捕獲比較寄存器是兩個(gè)功能一起的,看配置要求來(lái)啟動(dòng)其中的一個(gè)功能。
? ? ? ? PWM在慣性系物件上使用。通過(guò)調(diào)節(jié)輸出的高低電平在一段時(shí)間內(nèi)的占比范圍(占空比==高T/周期T),來(lái)控制慣性系物件的狀態(tài)。用于LED呼吸燈、直流電機(jī)調(diào)速。
? ? ? ? 工作原實(shí)現(xiàn):配置CNT和CCR的值,通過(guò)比較兩值大小關(guān)系來(lái)輸出高低電平;
模式1:
? ? ? ? ? ?向上:CNT ? ? ? ? ? ? 向下:CNT>CCR(無(wú)效),CNT≤CCR(有效) 模式2: ????????????向上:CNT ? ? ? ? ? ? 向下:CNT>CCR(有效),CNT≤CCR(無(wú)效) PWM頻率:計(jì)數(shù)器頻率, 即? ?時(shí)鐘源頻率 / 預(yù)分頻+1 / ARR+1 PWM占空比:CCR/(ARR + 1) PWM分辨率:1/(ARR + 1) (占空比最小變化單位,如1%,0.1%) 注意:不同定時(shí)器對(duì)應(yīng)的輸出引腳不同 2.函數(shù)配置: 外設(shè)使能——>GPIO初始化——>時(shí)基單元初始化——>輸出比較配置——>cmd void PWM_Init(void) { ?? ?/*開(kāi)啟時(shí)鐘*/ ?? ?RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);?? ??? ??? ?//開(kāi)啟TIM2的時(shí)鐘 ?? ?RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);?? ??? ??? ?//開(kāi)啟GPIOA的時(shí)鐘 ?? ? ?? ?/*GPIO初始化*/ ?? ?GPIO_InitTypeDef GPIO_InitStructure; ?? ?GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//受外設(shè)控制(定時(shí)器、ADC)的都要用復(fù)用模式 ?? ?GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; ?? ?GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; ?? ?GPIO_Init(GPIOA, &GPIO_InitStructure);?? ? ?? ? ?? ?/*配置時(shí)鐘源*/ ?? ?TIM_InternalClockConfig(TIM2);?? ??? ?//TIM2的時(shí)鐘源選擇為為內(nèi)部時(shí)鐘(可不寫(xiě)) ?? ? ?? ?/*時(shí)基單元初始化*/ ?? ?TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;?? ??? ??? ??? ?//定義結(jié)構(gòu)體變量 ?? ?TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; ? ? //時(shí)鐘分頻,選擇不分頻 ?? ?TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //計(jì)數(shù)器模式,選擇向上計(jì)數(shù) ?? ?TIM_TimeBaseInitStructure.TIM_Period = 100 - 1;?? ??? ??? ??? ??? ?//計(jì)數(shù)周期,即ARR的值 ?? ?TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1;?? ??? ??? ??? ?//預(yù)分頻器,即PSC的值 ?? ?TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; ? ? ? ? ? ?//重復(fù)計(jì)數(shù)器,高級(jí)定時(shí)器才會(huì)用到 ?? ?TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure); ? ? ? ? ? ? //將結(jié)構(gòu)體變量交給TIM_TimeBaseInit,配置TIM2的時(shí)基單元 ?? ? ?? ?/*輸出比較初始化*/ ?? ?TIM_OCInitTypeDef TIM_OCInitStructure;?? ??? ??? ??? ??? ??? ??? ?//定義結(jié)構(gòu)體變量 ?? ?TIM_OCStructInit(&TIM_OCInitStructure);?? ??? ??? ??? ??? ??? ??? ?//結(jié)構(gòu)體初始化,防止后續(xù)沒(méi)賦值的成員亂值 ?? ?TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;?? ??? ??? ??? ?//輸出比較模式,選擇PWM模式1 ?? ?TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;?? ??? ?//輸出極性,選擇為高,若選擇極性為低,則輸出高低電平取反 ?? ?TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;?? ?//輸出使能 ?? ?TIM_OCInitStructure.TIM_Pulse = 0;?? ??? ??? ??? ??? ??? ??? ??? ?//初始的CCR值 ?? ?TIM_OC1Init(TIM2, &TIM_OCInitStructure);?? ??? ??? ??? ??? ??? ?//將結(jié)構(gòu)體變量交給TIM_OC1Init,配置TIM2的輸出比較通道1 ?? ? ?? ?/*TIM使能*/ ?? ?TIM_Cmd(TIM2, ENABLE);?? ??? ??? ?//使能TIM2,定時(shí)器開(kāi)始運(yùn)行 } TIM_SetCompare3(TIM2,Compare);//用于修改第3輸出比較通道的CCR的值,總共有1、2、3個(gè)輸出比較CCR寄存器 輸入捕獲和輸出比較的輸入輸出引腳都是公用的,且一次只能啟動(dòng)一中種功能 輸入捕獲IC(Intput Capture): 1.輸入捕獲的方式有:上升沿觸發(fā)、下降沿觸發(fā)、邊沿觸發(fā)。 ????????以及專(zhuān)門(mén)測(cè)量PWM的PWMI模式,可以同時(shí)測(cè)量頻率和占空比。 適合主從模式實(shí)現(xiàn)硬件的自動(dòng)測(cè)量PWM 2.以上升沿觸發(fā)為例解釋兩種測(cè)量方法: ? ? ? ? (1)測(cè)頻法(適合測(cè)量高頻。由于是一段固定時(shí)間內(nèi)的值,所以結(jié)果是均值,出結(jié)果速度慢):給定一個(gè)時(shí)間T(常1s),在時(shí)間T內(nèi)測(cè)量有N次上升沿,然后頻率f = N / T? ? ? ? ? (2)測(cè)周法(適合測(cè)量低頻。只測(cè)量一個(gè)周期,所以出結(jié)果得速度取決于輸入頻率,波動(dòng)較大):在兩個(gè)上升沿內(nèi),用標(biāo)準(zhǔn)頻率計(jì)N次來(lái)計(jì)算一個(gè)周期的時(shí)間T,然后f = 1 / T。 ????????????????兩種理解 ????????????????①先后兩次測(cè)量CNT的值得X1,X2; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 若X1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 若X1>X2,則T = ARR -?X1 +?X2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 然后得f = 1 / T(這里的時(shí)間的頻率f取決于系統(tǒng)主頻f'。) ????????????????②在第一次上升沿時(shí)value1 = 0并開(kāi)始計(jì)數(shù),第二次上升沿時(shí)value2 = x,記一個(gè)數(shù)得時(shí)間t = 1 / f',?則期間的總計(jì)時(shí)間是(value2 -value1)*t,記N = value2 - value1 則兩次上升沿的頻率是 f = 1 /? (N * t)?= f'?/ N。 (假設(shè)72Mhz的時(shí)鐘源,那么每次計(jì)數(shù)的時(shí)間是T=1 / 72,000,000?秒,計(jì)數(shù)N次就是 Tn = N / 72000000秒),再由f = 1 / T,T? = Tn,得到頻率f = f’ / N。) ? ? ? ? 3.以上兩種測(cè)量方法都存在正負(fù)1的誤差,即①測(cè)量過(guò)的上升沿次數(shù)不一定是完整的一個(gè)周期,而可能是半個(gè)周期,所以會(huì)需要取舍;②測(cè)量到第2個(gè)上升沿的時(shí)候,可能標(biāo)準(zhǔn)計(jì)數(shù)次數(shù)也不是完整的一個(gè)頻率,而是0.xx,這時(shí)候也需要取舍。所以?xún)煞N測(cè)量方法都有誤差,但是要選擇更合適的方法以減少誤差。 ? ? ? ? 4.由此,當(dāng)(1)和(2)的N相同時(shí),也就是誤差相同,此時(shí)的輸入頻率f =?√(f'?/ T)。式子來(lái)源: 將(1) (2)得N提出來(lái),N = f * T = f' / f,則f*f = f' /?T,f =?√(f'?/ T)。 當(dāng)待測(cè)頻率fx 3.XOR: 輸入引腳處的三輸入異或門(mén)是為三項(xiàng)無(wú)刷電機(jī)服務(wù)的,當(dāng)三個(gè)輸入引腳有任一引腳電平翻轉(zhuǎn)時(shí),異或門(mén)輸出的電平翻轉(zhuǎn),通過(guò)數(shù)據(jù)選擇器TI1。如果數(shù)據(jù)選擇器選擇了上面的模式,那么輸出的就是三個(gè)輸入引腳(TIMx_CH1、CH2、CH3)的異或值,要是選擇了下面的模式,那就是輸出TIMx_CH1得值,三個(gè)引腳各輸出各的。 三項(xiàng)無(wú)刷電機(jī)有3個(gè)霍爾傳感器來(lái)檢測(cè)轉(zhuǎn)子的位置,可以根據(jù)轉(zhuǎn)子的位置進(jìn)行換相,前三個(gè)輸入通道可以接入無(wú)刷電機(jī)的霍爾傳感器,從而讓定時(shí)器 作為無(wú)刷電機(jī)的接口定時(shí)器去驅(qū)動(dòng)換相電路工作 輸入濾波器可以對(duì)輸入的信號(hào)進(jìn)行濾波,減少毛刺信號(hào); 邊沿檢測(cè)器可以配置是上升沿檢測(cè)、下降沿檢測(cè)、邊沿檢測(cè) 有兩套濾波+極性選擇; 第一套輸入得到TIF1FP1然后輸入給通道1 第二套經(jīng)過(guò)另一套濾波+極性選擇,得到TIF1FP2,輸入給通道2 同理,TI1、2、3、4的輸入都可以經(jīng)過(guò)兩套濾波+極性選擇,可以得到兩個(gè)輸出結(jié)果進(jìn)入兩個(gè)通道。(1和2交叉、3和4交叉) 這可以實(shí)現(xiàn)交叉輸入,靈活切換后續(xù)捕獲電路的輸入 也可以把一個(gè)引腳的捕獲輸入給兩個(gè)通道,用于PWMI:第一個(gè)捕獲通道配置上升沿觸發(fā),捕獲周期,第二個(gè)通道配置下降沿觸發(fā),捕獲占空比。兩個(gè)通道對(duì)一個(gè)引腳進(jìn)行捕獲,就可以獲得周期、占空比 4.輸入捕獲單元的內(nèi)部原理圖解釋 TI1是外部輸入信號(hào),F(xiàn)dts是測(cè)周法的參考頻率 而ICF[3:0]指的是TIMx_CCMR1寄存器里的ICF位,可以控制濾波器的參數(shù)。不同x對(duì)應(yīng)的ICF的稱(chēng)號(hào)不同,如TIM1_CCMR1的ICF的名字是IC1F。 如圖說(shuō)明IC1F,采樣頻率就是測(cè)周法的參考頻率,頻率約小,一段時(shí)間內(nèi)采樣的個(gè)數(shù)N就越大,呂濾波效果就越好。 5.數(shù)字濾波器的工作原理: ????????計(jì)數(shù)了N個(gè)電平,如果這N個(gè)電平都是一樣的,就輸出這N個(gè)電平對(duì)應(yīng)的狀態(tài)。比如N個(gè)都是低電平,那就輸出低電平)。 ????????如果N個(gè)中有不同的,那就維持原先的電平輸出。比如原先輸出高電平,后續(xù)的N個(gè)采樣中有N-1個(gè)低電平,1個(gè)高電平,那就接著輸出高電平,因?yàn)檫@N個(gè)采樣中有波動(dòng),所以濾波。 ? ? ? ? 不要理解成吃了N個(gè)輸入信號(hào)才吐一個(gè)信號(hào)!實(shí)際情況是檢測(cè)N個(gè)信號(hào)來(lái)判斷是不是要改變輸出信號(hào)!如果N個(gè)信號(hào)內(nèi)有波動(dòng),則說(shuō)明是信號(hào)不穩(wěn),就需要維持原狀態(tài)輸出!要是N個(gè)信號(hào)的狀態(tài)是穩(wěn)的,那就需要轉(zhuǎn)換輸出!但是在檢測(cè)的過(guò)程中也是在不斷維持原有信號(hào)狀態(tài)進(jìn)行輸出的! ? ? ? ? 而且采樣頻率一般會(huì)很高,如果真的有外部輸入信號(hào)的頻率和采樣頻率一摸一樣,才可能導(dǎo)致N個(gè)信號(hào)一直不穩(wěn),但這種情況是不被允許的(應(yīng)該極力避免的),否則會(huì)導(dǎo)致濾波器的輸出信號(hào)可能不發(fā)生改變。 ? ? ? ??N可以配置,采樣頻率可以配置。 ? ? ? ? 會(huì)導(dǎo)致輸入信號(hào)降低頻率的是分頻器。 濾波之后的信號(hào)再通過(guò)邊沿檢測(cè)器來(lái)統(tǒng)計(jì)上升沿、下降沿或邊沿。 其中CC1P用于使能選擇器的輸出極性,然后輸出TI1FP1,之后通過(guò)后續(xù)的捕獲電路。 前文說(shuō)過(guò)每個(gè)輸入濾波器和邊沿檢測(cè)器都有兩套,所以上圖中少了一套產(chǎn)生由通道1但產(chǎn)生信號(hào)TI2FP2并通向通道2的濾波+極性器。 然后通過(guò)CC1S控制的數(shù)據(jù)選擇器(選擇是接收TI1FP1還是TI2FP2還是TRC的輸入) ICPS用于配置分頻器(1、2、4、8) CC1E用于控制輸出使失能。開(kāi)啟使能之后,輸入信號(hào)在經(jīng)歷系列電路之后,就可以讓CCR捕獲CNT的值,并且清零CNT。 自動(dòng)清零CNT:TI1FP1與TIF_ED都可以通向從模式控制器,也就是TI1FP1在觸發(fā)邊沿的時(shí)候,還可以觸發(fā)從模式控制,而從模式內(nèi)就有控制CNT清零的電路。也就是CNT清零靠從模式觸發(fā)。 6.主從模式(圖片參考自江協(xié)) 主模式:能夠?qū)⒍〞r(shí)器內(nèi)部的信號(hào)映射到TRGO(Trigger? Out觸發(fā)輸出),而TRGO可以用來(lái)觸發(fā)別的外設(shè) 從模式:可以接收自身定時(shí)器或者是其他定時(shí)器輸出映射到TRGO的信號(hào)控制的外設(shè)。 觸發(fā)源:TRGO的信號(hào)來(lái)源,觸發(fā)源選擇就是選擇觸發(fā)從模式的信號(hào)源 想要TI1FP1信號(hào)觸發(fā)從模式電路實(shí)現(xiàn)清零,就需要觸發(fā)源選擇TI1FP1,并且將從模式的操作選怎Reset,就可以實(shí)現(xiàn)全自動(dòng)清零。 7.配置流程(測(cè)周法)及補(bǔ)充: (1)配置: 1.非PWM輸入捕獲: ? ? ? ? 外設(shè)時(shí)鐘—>GPIO—>時(shí)基單元—>濾波器、邊沿檢測(cè)/極性選擇(上、下、邊沿)—> ? ? ? ? ? ? ? ?① (主從模式)TI1FP1—>觸發(fā)源選擇(選擇TIxFPx)—>從模式功能選擇(Reset) ? ? ? ? ? ? ? ? ②信號(hào)輸入通道(直通TI1FP1、交通TI1FP2)—>分頻器—>CCR(CCR記錄當(dāng)前 CNT的值) ? ? 配置好 后,CCR之后從模式會(huì)自動(dòng)Reset CNT的值。 2.PWM輸入捕獲: ????????外設(shè)時(shí)鐘—>GPIO—>時(shí)基單元—>濾波器、邊沿檢測(cè)/極性選擇(上、下、邊沿)—> ? ? ? ? ? ? ? ?① (主從模式)TI1FP1—>觸發(fā)源選擇(選擇TIxFPx)—>從模式功能選擇(Reset) ? ? ? ? ? ? ? ? ②TI1FP1—>輸入信號(hào)預(yù)分頻器配置—>CCR1(CCR1記錄上升沿CNT的值) ? ? ? ? ? ? ? ? ③TI1FP2—>輸入信號(hào)預(yù)分頻器配置—>CCR2(CCR1記錄下降沿CNT的值) 配置好后,CCR1會(huì)在上升沿記錄CNT的值,并且在第二次及以后記錄后會(huì)清零CNT的值,但是CCR2將在下降沿讀取CNT的值,且不會(huì)清零CNT的值。由于CCR1第一次記錄CNT的之后會(huì)清零CNT的值,所以CCR2記錄的值時(shí)0~CNT的值。 記CCR1第二次及以后記錄的CNT值為x,CCR2記錄的為y,則占空比 = y? / x 。 詳細(xì)內(nèi)容流程: ①外設(shè)時(shí)鐘(TIM、GPIO)——》 ②GPIO——》 ③時(shí)基單元(ARR、PSC、CNT、計(jì)數(shù)模式、分頻、重復(fù)計(jì)數(shù)器)——》 ④IC(IC通道、濾波器的采樣N、邊沿檢測(cè)器極性選擇(上、下、邊沿)、分頻器、信號(hào)源(通、交))——》 ⑤從模式(觸發(fā)源、觸發(fā)模式(信號(hào)來(lái)了干什么:Reset)) (2)配置函數(shù)(來(lái)自江協(xié)): //1.測(cè)頻率 void IC_Init(void) { ?? ?/*開(kāi)啟時(shí)鐘*/ ?? ?RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);?? ??? ??? ?//開(kāi)啟TIM3的時(shí)鐘 ?? ?RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);?? ??? ??? ?//開(kāi)啟GPIOA的時(shí)鐘 ?? ? ?? ?/*GPIO初始化*/ ?? ?GPIO_InitTypeDef GPIO_InitStructure; ?? ?GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; ?? ?GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; ?? ?GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; ?? ?GPIO_Init(GPIOA, &GPIO_InitStructure);?? ??? ??? ??? ??? ??? ??? ?//將PA6引腳初始化為上拉輸入 ?? ? ?? ?/*配置時(shí)鐘源*/ ?? ?TIM_InternalClockConfig(TIM3);?? ??? ?//選擇TIM3為內(nèi)部時(shí)鐘,若不調(diào)用此函數(shù),TIM默認(rèn)也為內(nèi)部時(shí)鐘 ?? ? ?? ?/*時(shí)基單元初始化*/ ?? ?TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;?? ??? ??? ??? ?//定義結(jié)構(gòu)體變量 ?? ?TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; ? ? //時(shí)鐘分頻,選擇不分頻,此參數(shù)用于配置濾波器時(shí)鐘,不影響時(shí)基單元功能 ?? ?TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //計(jì)數(shù)器模式,選擇向上計(jì)數(shù) ?? ?TIM_TimeBaseInitStructure.TIM_Period = 65536 - 1; ? ? ? ? ? ? ? //計(jì)數(shù)周期,即ARR的值 ?? ?TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1; ? ? ? ? ? ? ? //預(yù)分頻器,即PSC的值 ?? ?TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; ? ? ? ? ? ?//重復(fù)計(jì)數(shù)器,高級(jí)定時(shí)器才會(huì)用到 ?? ?TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure); ? ? ? ? ? ? //將結(jié)構(gòu)體變量交給TIM_TimeBaseInit,配置TIM3的時(shí)基單元 ?? ? ?? ?/*輸入捕獲初始化*/ ?? ?TIM_ICInitTypeDef TIM_ICInitStructure;?? ??? ??? ??? ??? ??? ??? ?//定義結(jié)構(gòu)體變量 ?? ?TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;?? ??? ??? ??? ?//選擇配置定時(shí)器通道1 ?? ?TIM_ICInitStructure.TIM_ICFilter = 0xF;?? ??? ??? ??? ??? ??? ??? ?//輸入濾波器參數(shù),可以過(guò)濾信號(hào)抖動(dòng) ?? ?TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;?? ??? ?//極性,選擇為上升沿觸發(fā)捕獲 ?? ?TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;?? ??? ??? ?//捕獲預(yù)分頻,選擇不分頻,每次信號(hào)都觸發(fā)捕獲 ?? ?TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;?? ?//輸入信號(hào)交叉,選擇直通,不交叉 ?? ?TIM_ICInit(TIM3, &TIM_ICInitStructure);?? ??? ??? ??? ??? ??? ??? ?//將結(jié)構(gòu)體變量交給TIM_ICInit,配置TIM3的輸入捕獲通道 ?? ? ?? ?/*選擇觸發(fā)源及從模式*/ ?? ?TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);?? ??? ??? ??? ??? ?//觸發(fā)源選擇TI1FP1 ?? ?TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);?? ??? ??? ??? ??? ?//從模式選擇復(fù)位 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//即TI1產(chǎn)生上升沿時(shí),會(huì)觸發(fā)CNT歸零 ?? ? ?? ?/*TIM使能*/ ?? ?TIM_Cmd(TIM3, ENABLE);?? ??? ??? ?//使能TIM3,定時(shí)器開(kāi)始運(yùn)行 } //測(cè)周法獲取CNT值:其中1 000 000 = 72Mhz? /? 72??(psc)?? //f' =? fc / N uint32_t IC_GetFreq(void) { ?? ?return 1000000 / (TIM_GetCapture1(TIM3) + 1);?? ??? ?//測(cè)周法得到頻率fx = fc / N,這里不執(zhí)行+1的操作也可(不+得到的數(shù)值大概率多1) } //2.測(cè)頻率+占空比, //方法①在輸入捕獲初始化下面沾上下面的語(yǔ)句。 ?? ?TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;?? ??? ??? ??? ?//選擇配置定時(shí)器通道2 ?? ?TIM_ICInitStructure.TIM_ICFilter = 0xF;?? ??? ??? ??? ??? ??? ??? ?//輸入濾波器參數(shù),可以過(guò)濾信號(hào)抖動(dòng) ?? ?TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;?? ??? ?//極性,選擇為上升沿觸發(fā)捕獲 ?? ?TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;?? ??? ??? ?//捕獲預(yù)分頻,選擇不分頻,每次信號(hào)都觸發(fā)捕獲 ?? ?TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_IndirectTI;?? ?//輸入信號(hào)交叉,交叉輸入 方法②將????????TIM_ICInit(TIM3, &TIM_ICInitStructure);?? ????????改為????????TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);?? ??? ??? ??? ??? ??? ? 這是Stm公司寫(xiě)好的函數(shù),但是只允許是對(duì)通道1、2進(jìn)行配置;不能對(duì)3、4進(jìn)行這樣的配置。 讀取占空比(0~100) uint32_t IC_GetDuty(void) { ?? ?return (TIM_GetCapture2(TIM3) + 1) * 100 / (TIM_GetCapture1(TIM3) + 1);?? ?//占空比Duty = CCR2 / CCR1 * 100,這里不執(zhí)行+1的操作也可 } ???????? (3)補(bǔ)充: ? ? ? ? ①運(yùn)行時(shí),第一次記錄的CNT的值是未知的,記錄第一次之后就會(huì)立即Reset CNT,在第二次記錄CNT的值時(shí),該值對(duì)應(yīng)的就是在系統(tǒng)頻率下,輸入信號(hào)的一個(gè)周期的時(shí)間,。因?yàn)榈谝淮斡涗浿笄辶?,第二次及以后記錄的值就是?~>CNT的最新CNT的值。 ? ? ? ? ②要是外部輸入信號(hào)的頻率太低,就可能導(dǎo)致CNT的值溢出。所以把ARR的值弄到最大,極可能人為避免這種情況。 ????????舉例就是:第一次記錄到高電平之后CNT被Reset了,但是在等待第二次高電平的時(shí)候,在CNT到最高計(jì)數(shù)值的期間內(nèi)都等不到第二次高電平,然后CNT的值已經(jīng)超過(guò)了ARR的最高上限,這時(shí)候定時(shí)器的配置會(huì)讓CNT從零開(kāi)始。 ? ? ? ? ③從模式的信號(hào)源不是所有定時(shí)器都有,如參考自江協(xié)的圖片所示,只有TI1FP1和TI2FP2的信號(hào),沒(méi)有TI3FP3和TI4FP4的信號(hào),因此從模式自動(dòng)清零CNT只能選擇輸入捕獲通道1、2,而不能選擇3、4。對(duì)于通道3、4,就只能通過(guò)捕獲中斷在中斷內(nèi)部調(diào)用函數(shù)手動(dòng)清零,但易消耗軟件資源。 ? ? ? ? ④ ????????直通:輸入信號(hào)從哪里來(lái)就從哪輸入 ????????交通:輸入信號(hào)交錯(cuò)輸入,因?yàn)?和2、3和4有交通輸入,也就是1/2的信號(hào)可以輸入給2/1... ? ? ? ? ⑤采樣頻率與系統(tǒng)時(shí)鐘頻率有關(guān)。 ? ? ? ? ⑥占空比是下降沿觸發(fā)的原因: ? ? ? ? ⑦測(cè)周法 ????????????????最大檢測(cè)頻率 = 72Mhz / ARR。但是當(dāng)檢測(cè)頻率接近72Mhz / ARR時(shí),誤差會(huì)越來(lái)越大 ????????????????最小檢測(cè)頻率 =?72Mhz / PSC / ARR。小于這個(gè)頻率的話(huà),CNT的值就會(huì)溢出。 ????????????????誤差精度? =?72Mhz / ARR / 最大檢測(cè)頻率 ? ? ? ? ? ? ? ? 上述的PSC都是時(shí)基單元分頻器的值,而非IC通道分頻器的值。 ? ? ? ? ? ? ? ?對(duì)于過(guò)高的待測(cè)頻率,就應(yīng)該用測(cè)頻法,而不是用測(cè)周法了 用PWM驅(qū)動(dòng)電機(jī),再用編碼器測(cè)量電機(jī)的速度,然后用PID算法進(jìn)行閉環(huán)控制,就可以控制小車(chē)的移動(dòng)。電機(jī)速度一般比較快,一般用無(wú)接觸的霍爾傳感器or光柵測(cè) 編碼器接口(Encoder Interface): ? ? ? ? 1.優(yōu)于用外部中斷來(lái)計(jì)次編碼器轉(zhuǎn)次,防止電機(jī)高速轉(zhuǎn)動(dòng)時(shí),軟件頻繁進(jìn)入中斷消耗軟件資源。 ? ? ? ? 2.可以接收增量(正交)編碼器的信號(hào),根據(jù)編碼器的旋轉(zhuǎn)方向產(chǎn)生正交信號(hào)脈沖,自動(dòng)控制控制CNT自增或自減,從加減可以測(cè)得旋轉(zhuǎn)方向,從數(shù)值變化大小可以測(cè)得旋轉(zhuǎn)速度。 ? ? ? ? 3.正交編碼器:兩個(gè)相(A、B)的輸入相差剛好90°。 ? ? ? ? ? ? ? ? ①這樣在旋轉(zhuǎn)的時(shí)候,根據(jù)旋轉(zhuǎn)方向的不同,就可以知道哪一個(gè)端先輸入有效信號(hào),哪一端后輸入有效信號(hào),從而判斷旋轉(zhuǎn)方向。 ? ? ? ? ? ? ? ? ②而在一段時(shí)間內(nèi)產(chǎn)生多少個(gè)脈沖,就可以計(jì)數(shù)多少個(gè)脈沖,然后根據(jù)固定時(shí)間內(nèi)接受的脈沖數(shù)量,進(jìn)行一段處理就可以得到速度。 ? ? ? ? 4.每個(gè)高級(jí)、通用定時(shí)器都只有1個(gè)編碼器接口;編碼器的兩個(gè)相的輸入端分別占用IC的通道1、2,(用到了TI1FP1、TI2FP2;通道3、4不能接編碼器,即CH3、CH3)。需要注意的是,作為編碼器接口的定時(shí)器不能啟用其他功能。TI1FP1、TI2FP2見(jiàn)下圖編碼器接口左側(cè)。 ? ? ? ? 5.輸入的信號(hào)的流傳: ? ? ? ? ????????CH1、2—>輸入濾波器和邊沿檢測(cè)器——>觸發(fā)控制器的編碼器接口——>PSC——>CNT。 ? ? ? ? 其中邊沿檢測(cè)器中的極性選擇的可以選擇輸入信號(hào)是高電平還是低電平有效,這會(huì)導(dǎo)致計(jì)數(shù)方向改變。(因?yàn)闃O性選擇是接收到對(duì)應(yīng)極性才輸出高電平,否則輸出低電平。如果選在高極性,那就是接收高電平輸出高電平,接收低電平就輸出低電平;如果選擇低極性有效,那就是接收低電平輸出高電平,接收高電平輸出低電平。個(gè)人理解) ????????其中ARR一般配置為最大值65535,用于計(jì)數(shù)滿(mǎn)后清零。在這個(gè)流程下,72Mhz的內(nèi)部時(shí)鐘、時(shí)基單元配置的CNT計(jì)數(shù)方向(向上、向下、中央對(duì)齊)不會(huì)被該電路使用。CNT的計(jì)數(shù)快慢,計(jì)數(shù)加減由編碼器控制 ? ? ? ? ????????補(bǔ)充說(shuō)明:在編碼器接口的工作模式下,通道1、2的OC也是可以正常工作的。(前提是使能了輸出控制) ? ? ? ? 6.工作模式:三種。第三種的精度最高 ? ? ? ? 這個(gè)表的看法是:先選定自己的工作模式,再想所需要兩個(gè)輸入的信號(hào)高低,然后看右上方的TI1、TI2的上升、下降,然后再找對(duì)應(yīng)工作模式下選定上升/下降列對(duì)應(yīng)的計(jì)數(shù)方式,此時(shí)相對(duì)信號(hào)的電平就控制計(jì)數(shù)是+還是-。 ? ? ? ? 比如我選在TI1和2上計(jì)數(shù),想要知道TI1高、TI2低電平的計(jì)數(shù)是什么: ???????? 函數(shù)配置流程: ? ? ? ? 外設(shè)時(shí)鐘——>GPIO——>時(shí)基單元——>IC——編碼器。 ? ? ? ? 其中時(shí)基單元的CNT計(jì)數(shù)方式、時(shí)鐘源選擇即使配置了也不會(huì)生效,因?yàn)镃NT的的計(jì)數(shù)由編碼器作為時(shí)鐘源控制,而CNT的技術(shù)方向由編碼器的旋轉(zhuǎn)方向決定是+還是-。IC的邊沿檢測(cè)器的極性選擇將控制旋轉(zhuǎn)編碼器的計(jì)數(shù)方向(因?yàn)闃O性選擇將導(dǎo)致輸入信號(hào)的高低電平是否翻轉(zhuǎn))。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); TIM_InternalClockConfig(TIM3); //GPIO GPIO_InitTypeDef GPIOAInitStructure; GPIOAInitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIOAInitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIOAInitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIOAInitStructure); //時(shí)基單元 TIM_TimeBaseInitTypeDef InitStructure; InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//時(shí)鐘源分頻——編碼器模式下用不到 InitStructure.TIM_CounterMode = TIM_CounterMode_Up;//計(jì)數(shù)模式 向上計(jì)數(shù)——編碼器模式下用不到 InitStructure.TIM_Period = 65536 - 1;//ARR 自動(dòng)重裝值 InitStructure.TIM_Prescaler = 1 - 1;//PSC 預(yù)分頻 InitStructure.TIM_RepetitionCounter = 0;//重復(fù)計(jì)數(shù)器-高級(jí)定時(shí)器:多少個(gè)計(jì)數(shù)周期算計(jì)數(shù)一次 TIM_TimeBaseInit(TIM2,&InitStructure);//結(jié)構(gòu)體是初始化誰(shuí)的就是誰(shuí)Init //IC TIM_ICInitTypeDef ICInitStructure; TIM_ICStructInit(&ICInitStructure);//不完全配置參數(shù)就需要這一步,用結(jié)構(gòu)體初始化 ICInitStructure.TIM_Channel = TIM_Channel_1 ;//IC的輸入通道 ICInitStructure.TIM_ICFilter = 0xF;//輸入信號(hào)濾波器的值 ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_BothEdge;//輸入信號(hào)有效邊沿選擇——編碼模式下則對(duì)應(yīng)是否翻轉(zhuǎn)極性——后面可以統(tǒng)一配置,這里可以不配 // ICInitStructure.TIM_ICPrescaler = ;//后半段的輸入信號(hào)分頻——編碼器用不到 // ICInitStructure.TIM_ICSelection = ;//后半段的信號(hào)通道選擇——編碼器用不到 TIM_ICInit(TIM3,&ICInitStructure); ICInitStructure.TIM_Channel = TIM_Channel_2 ;//IC的輸入通道 ICInitStructure.TIM_ICFilter = 0xF;//輸入信號(hào)濾波器的值 ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_BothEdge;//輸入信號(hào)有效邊沿選擇——編碼模式下則對(duì)應(yīng)是否翻轉(zhuǎn)極性——后面可以統(tǒng)一配置,這里可以不配 // ICInitStructure.TIM_ICPrescaler = ;//后半段的輸入信號(hào)分頻——編碼器用不到 // ICInitStructure.TIM_ICSelection = ;//后半段的信號(hào)通道選擇——編碼器用不到 TIM_ICInit(TIM3,&ICInitStructure); //配置編碼器接口 TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);//定時(shí)器通道、編碼模式(單計(jì)數(shù)、雙計(jì)數(shù))、IC1的輸入極性、IC2的輸入極性 TIM_Cmd(TIM3,ENABLE);//TIM使能 獲取編碼器旋轉(zhuǎn)值的函數(shù) TIM_GetCounter(TIM3); 清零編碼值的函數(shù) TIM_SetCounter(TIM3,0); 柚子快報(bào)邀請(qǐng)碼778899分享:Stm32的定時(shí)器 推薦鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀(guān)點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。