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