【STM32】输入捕获实验原理
目錄
輸入捕獲原理框架:
輸入捕獲實(shí)驗(yàn)工作原理:
1、濾波:
?2、設(shè)置捕獲極性:
3、設(shè)置輸入捕獲映射通道:
4、預(yù)分頻:
?5、中斷開啟:
輸入捕獲有關(guān)庫函數(shù)及操作:
1.通道初始化函數(shù):TIM_ICInit
2.通道極性設(shè)置:TIM_OCxPolarityConfig;
3.獲取當(dāng)前通道捕獲值:TIM_GetCapturex;
4.GPIO配置函數(shù):GPIO_Init;
5.中斷服務(wù)函數(shù):
輸入捕獲原理框架:
輸入捕獲實(shí)驗(yàn)工作原理:
輸入捕獲的工作原理:預(yù)設(shè)分頻系數(shù),和捕獲沿,檢測定時(shí)器通道輸入的邊沿信號(hào),當(dāng)信號(hào)發(fā)生跳變并且滿足預(yù)設(shè)條件時(shí),將定時(shí)器當(dāng)前值寄存器CNTx的值存入捕獲比較寄存器CCRx中。
捕獲過程捕獲的過程大致可以細(xì)分為五個(gè)步驟:濾波、設(shè)定捕獲極性、捕獲通道設(shè)定、預(yù)分頻、中斷設(shè)置;
1、濾波:
上面的圖為濾波步驟的工作設(shè)置。濾波簡單來說就是將一些雜的波過濾,獲得我們所需要的波。
例如我們捕獲實(shí)驗(yàn)需要特定周期捕獲高電平的信號(hào),但是在低電平處發(fā)生抖動(dòng),導(dǎo)致原本是低電平的地方就有一些高的信號(hào),所以我們要對(duì)這些信號(hào)進(jìn)行剔除。
例子剔除的方法也很簡單,就是多次檢測,如果每一次檢測的結(jié)果都為需要的結(jié)果,那么我們就認(rèn)為這個(gè)高電平是有效的,而我們設(shè)置的信號(hào)觸發(fā)后單次采樣的采樣的頻率f DTS。但是這個(gè)頻率總得有個(gè)來源吧,于是我們使用定時(shí)器的時(shí)鐘頻率CK_INT作為它的來源。而定時(shí)器TIMx_CCMRx的ICF位就用于選擇配置濾波器,但是f DTS與f INT之間的關(guān)系的配置需要使用。?TIMx_CRx位去配置:
TIMx_CRx寄存器配置單次采樣頻率?而設(shè)置需要的采樣次數(shù)x則由TIMx_CCMR1寄存器的IC1F位來配置:
?2、設(shè)置捕獲極性:
?這部分主要是用于設(shè)置捕獲的是上升的信號(hào)沿還是下降的信號(hào)沿,它是由CCER的CC1P位來配置的。所謂上升沿,就是由低電平變成高電平的瞬間,下降沿就是由高電平變成低電平的瞬間。我們可以設(shè)置需要捕獲哪一個(gè)時(shí)候的變化。
3、設(shè)置輸入捕獲映射通道:
?設(shè)置輸入捕獲映射通道,換句話說就是同一個(gè)定時(shí)器的不同通道捕獲到的信號(hào)需不需要互換的的設(shè)置,它們?nèi)绻粨Q那么關(guān)系如下圖:
通道信號(hào)交換它是由TIMx_CCMR1寄存器的CC1S位配置的,一般情況下,我們就只需要設(shè)置那個(gè)通道捕獲到信號(hào)就由那個(gè)通道對(duì)于設(shè)備處理即可。
4、預(yù)分頻:
?預(yù)分頻是設(shè)置記錄到幾次上升沿才觸發(fā)一次捕獲。它是由TIMx_CCMR1寄存器的ICPS位來配置的。例如,如果我們設(shè)置每2次上升沿觸發(fā)1次捕獲,那么下圖可以觸發(fā)一次捕獲
?5、中斷開啟:
這個(gè)就是開啟相應(yīng)的通道中斷,它由TIMx_DIER寄存器配置;
輸入捕獲有關(guān)庫函數(shù)及操作:
輸入捕獲的一般步驟有:
- 使能時(shí)鐘
- 配置GPIO口
- 配置定時(shí)器
- 配置輸入捕獲通道
- 配置捕獲中斷
- 使能定時(shí)器
- 編寫中斷服務(wù)函數(shù)
1.通道初始化函數(shù):TIM_ICInit
NVIC_Init(&NVIC_InitStructure);這個(gè)函數(shù)與我們PWM之前的函數(shù)類似,都是用于初始化定時(shí)器通道、配置定時(shí)器中斷的工作模式的。這里我們用到了它的參數(shù)結(jié)構(gòu)體的5個(gè)成員:
TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1;TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;TIM5_ICInitStructure.TIM_ICFilter = 0x00;第一個(gè)成員:?TIM_Channel,這個(gè)成員就是指定工作的通道;
第二個(gè)成員:TIM_ICPolarity,這個(gè)成員用來配置我們是采用上升沿捕獲還是下降沿捕獲;
第三個(gè)成員:TIM_ICSelection,這個(gè)成員用來配置是否要將輸入捕獲通道映射到其它的通道,一般選擇不用映射,直接direct現(xiàn)在的通道;
第四個(gè)成員:TIM_ICPrescaler,這個(gè)成員用來配置分頻系數(shù);
第五個(gè)成員:TIM_ICFilter,這個(gè)成員用來配置濾波的次數(shù);
2.通道極性設(shè)置:TIM_OCxPolarityConfig;
void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);這個(gè)函數(shù)用于配置通道的極性,即上升沿捕獲還是下降沿捕獲。
3.獲取當(dāng)前通道捕獲值:TIM_GetCapturex;
uint16_t TIM_GetCapture1(TIM_TypeDef* TIMx);這個(gè)函數(shù)用于獲取當(dāng)前我們通道捕獲到的數(shù)值,即捕獲比較寄存器存放的值
4.GPIO配置函數(shù):GPIO_Init;
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)GPIO的配置函數(shù)與前面GPIO的配置函數(shù)所需要做的類似,只不過需要具體去修改幾個(gè)特定的參數(shù):
?? ?GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
????GPIO_ResetBits(GPIOA,GPIO_Pin_0);
GPIO的選擇模式要選擇為輸入模式,并且要將GPIO的默認(rèn)電平改為低電平。
5.中斷服務(wù)函數(shù):
捕獲中斷函數(shù)內(nèi)部實(shí)現(xiàn)邏輯總結(jié)
以上是生活随笔為你收集整理的【STM32】输入捕获实验原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Airbnb开源框架,真响应式架构——M
- 下一篇: 个人中心页面