中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

STM32如何實現輸入捕獲功能

發布時間:2021-12-27 11:35:18 來源:億速云 閱讀:764 作者:小新 欄目:互聯網科技

小編給大家分享一下STM32如何實現輸入捕獲功能,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

01、STM32捕獲功能

從STM32的定時器框圖中看

STM32如何實現輸入捕獲功能

①部分基礎定時器模塊,已經在《STM32基礎定時器詳解》講解過了。

②部分捕獲/對比通道模塊,已經在《定時器的PWM功能》講解過了。

③部分是本文的重點,輸入捕獲模塊。

從上圖可以看出定時器1共有4個輸入捕獲通道。

下文以定時器1的捕獲通道2為例講解。

首先確定下對應的GPIO,從STM32F207數據手冊的Alternatefunction mapping看出,定時器1通道2對應的GPIO有PA9和PE11,下文將使用PE11。

STM32如何實現輸入捕獲功能

02、輸入捕獲過程

輸入階段采樣對應的對輸入TIx,去產生濾波后的信號TIxF。然后極性選擇邊沿檢測器產生一個信號(TIxFPx),這個信號可以被用于服務模式控制器的觸發輸入或在作為捕獲命令。在捕獲寄存器前被預分頻。

STM32如何實現輸入捕獲功能

輸出階段產生一個中間波形,被用于參考:OCxRef(高電平有效)。鏈地末尾末尾決定極0性。捕獲/比較通道1 主電路。

①處主要是設置輸入捕獲濾波器,輸入階段采樣對應的對輸入TIx,去產生濾波后的信號TIxF。一般應用場景不做濾波處理,設置TIMx_CCMR1的ICF[3:0]=0000,只要采集到上升沿,就觸發捕獲。

②處主要是設置輸入捕獲極性,設置TIMx_CCER的CC1P或CC1NP位,如果通道配置為輸出,為0表示高電平有效,為1表示低電平有效;如果配置成輸入模式,該位選擇是IC1還是IC1的反相信號作為觸發或捕獲信號。為0,表示不反相,為1表示反相。

③處設置輸入捕獲映射通道,設置TIMx_CCMR1的CC1S[1:0]位,這2位定義通道的方向(輸入/輸出),及輸入腳的選擇:

0o:CC1通道被配置為輸出;

01:CC1通道被配置為輸入,IC1映射在Tl1上;

10: CC1通道被配置為輸入,IC1映射在TI2上;

11:CC1通道被配置為輸入,IC1映射在TRC上。此模式僅工作在內部觸發器輸入被選中時(由TIMx_SMCR寄存器的TS位選擇)。

④處設置輸入捕獲分頻器,TIMx_CCMR1的ICPS[1:0]位和TIMx_CCER的CC1E位。

TIMx_CCMR1的ICPS[1:0]這2位定義了CC1輸入(IC1)的預分頻系數。一旦CC1E='O(TIMx_CCER寄存器中),則預分頻器復位。

00:無預分頻器,捕獲輸入口上檢測到的每一個邊沿都觸發一次捕獲;

01:每2個事件觸發一次捕獲;

10:每4個事件觸發一次捕獲;

11:每8個事件觸發一次捕獲。

TIMx_CCER的CC1E位

CC1通道配置為輸出:

0:關閉一OC1禁止輸出。

1:開啟一OC1信號輸出到對應的輸出引腳。

CC1通道配置為輸入:

該位決定了計數器的值是否能捕獲入TIMx_CCR1寄存器。

0:捕獲禁止;

0:捕獲使能。

最后我們還需要設置中斷,使系統快速響應輸入捕獲信號,主要是這只TIMx_DIER寄存器,如下:

STM32如何實現輸入捕獲功能

使能允許更新中斷和通道2中斷

STM32如何實現輸入捕獲功能

03、代碼配置

設置GPIO復用

/* TIM1 channel 2 pin (PE.11) configuration*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType =GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_NOPULL;
GPIO_Init(GPIOE, &GPIO_InitStructure);
 
/*Connect TIM pins to AF2 */
GPIO_PinAFConfig(GPIOE,GPIO_PinSource11, GPIO_AF_TIM1);

設定定時基礎功能

/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period =0XFFFF;
TIM_TimeBaseStructure.TIM_Prescaler = (uint16_t)((SystemCoreClock) / 1000000) -1;
TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;
 
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);

配置通道2

TIM_ICInitStructure.TIM_Channel =TIM_Channel_2;
TIM_ICInitStructure.TIM_ICPolarity =TIM_ICPolarity_Falling;
TIM_ICInitStructure.TIM_ICSelection =TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler =TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter =0x0;
 
TIM_ICInit(TIM1, &TIM_ICInitStructure);

使能中斷

/* Enable the TIM1 global Interrupt*/
NVIC_InitStructure.NVIC_IRQChannel =TIM1_CC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority =1;
NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
NVIC_Init(&NVIC_InitStructure);
 
NVIC_InitStructure.NVIC_IRQChannel =TIM1_UP_TIM10_IRQn;
NVIC_InitStructure.NVIC_IRQChannelSubPriority= 2;
NVIC_Init(&NVIC_InitStructure);
 
/* Enablethe CC2 Interrupt Request */
TIM_ITConfig(TIM1,TIM_IT_CC2|TIM_IT_Update, ENABLE);

使能定時器1

/* TIM enable counter */
TIM_Cmd(TIM1, ENABLE);

下載代碼驗證測試

STM32如何實現輸入捕獲功能

看完了這篇文章,相信你對“STM32如何實現輸入捕獲功能”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

竹溪县| 黄龙县| 措美县| 浦江县| 边坝县| 星座| 牡丹江市| 兴山县| 阳东县| 江门市| 淮北市| 中宁县| 巴彦县| 三江| 图木舒克市| 襄垣县| 聂拉木县| 辽阳市| 巴彦县| 陇川县| 南投市| 靖宇县| 大兴区| 元江| 柯坪县| 天镇县| 清丰县| 三门峡市| 什邡市| 盘山县| 余庆县| 泾源县| 盐源县| 连山| 三亚市| 江阴市| 西昌市| 松溪县| 嵩明县| 岳西县| 司法|