娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年09月23日(星期一)

正在發生

2019年09月23日 | stm32庫函數學習篇---通用定時器(輸入捕獲功能)

發布者:daasddla 來源: eefocus關鍵字:stm32庫函數  通用定時器  輸入捕獲功能 手機看文章 掃描二維碼
隨時隨地手機看文章

實現功能:PA8隨意延時驅動led燈閃爍,并且將PA8用杜邦線連接到PA7口,PA7是通用定時器TIM3的2通道,在TIM3_CH2觸發中斷程序中取反連接到PD2口的led燈,指示中斷程序運行,并且每次進入中斷后改變觸發捕獲的極性。實現兩個led燈會交替閃爍。


先有必要了解stm32定時器的輸入觸發模塊,如下圖:

需要注意的是,一眼望去一個定時器似乎有8個通道,左邊四個,右邊四個,但其實左邊和右邊是共用相同的IO引腳,所以名稱標注是一模一樣。也就是說,每個通用定時器都只有四個獨立通道,當某一通道作為了輸入觸發功能那就不能再作為輸出匹配功能。這一點我們也可以從其他地方找到印證。比如TIM_ITConfig()函數中如下:

image.png

Enables or disables the specified TIM interrupts.

Parameters:

image.png

我們可以看到此函數TIM_IT參數的取值范圍如下:


TIM_IT_Update: TIM update Interrupt source


TIM_IT_CC1: TIM Capture Compare 1 Interrupt source


TIM_IT_CC2: TIM Capture Compare 2 Interrupt source


TIM_IT_CC3: TIM Capture Compare 3 Interrupt source


TIM_IT_CC4: TIM Capture Compare 4 Interrupt source


TIM_IT_COM: TIM Commutation Interrupt source


TIM_IT_Trigger: TIM Trigger Interrupt source


TIM_IT_Break: TIM Break Interrupt source


也就是說每個通道的捕獲和比較功能是共用一個中斷標志。


stm32定時器輸入觸發功能其實挺簡單的,與AVR單片機幾乎一樣。就是單片機引腳上一旦出現一個有效邊沿(可以配置為上升、下降或者上升下降均觸發),那么定時器計數器CNT里面的值就會被相應的Capture/Compare X Register保存下來。這里X可以是1,2,3,4任何一個。并且中斷標志位被置位。但是此時TIM的計數寄存器CNT卻不管這一事件的發生,繼續自己的計數。此功能可以用來測量外部信號的脈寬或者是周期。


對于定時器的時基單元TIM_TimeBaseStructure就不作說明了,在我前面的文章有專門介紹。下面就重點講解輸入觸發單元TIM_ICInitStructure。


首先看次結構體原型的定義如下:


typedef struct

{

   uint16_t TIM_Channel;      /*!< Specifies the TIM channel.

                                  This parameter can be a value of @ref TIM_Channel */

   uint16_t TIM_ICPolarity;   /*!< Specifies the active edge of the input signal.

                                   This parameter can be a value of @ref TIM_Input_Capture_Polarity */

   uint16_t TIM_ICSelection;  /*!< Specifies the input.

                                  This parameter can be a value of @ref TIM_Input_Capture_Selection */

   uint16_t TIM_ICPrescaler;  /*!< Specifies the Input Capture Prescaler.

                                   This parameter can be a value of @ref TIM_Input_Capture_Prescaler */

  uint16_t TIM_ICFilter;     /*!< Specifies the input capture filter.

                                   This parameter can be a number between 0x0 and 0xF */

} TIM_ICInitTypeDef;

 

它一共有5個成員,5個成員具體作用,我們只要看看3.5版本固件庫的說明就清楚了。


uint16_t TIM_ICInitTypeDef::TIM_Channel


Specifies the TIM channel. This parameter can be a value of TIM_Channel


其中TIM_Channel的取值范圍如下:


TIM_Channel_1.


TIM_Channel_2


TIM_Channel_3


TIM_Channel_4


uint16_t TIM_ICInitTypeDef::TIM_ICFilter


Specifies the input capture filter. This parameter can be a number between 0x0 and 0xF


說實話這個成員具體作用我沒有深入了解,僅僅知道是作為對輸入信號的濾波作用,估計是讓用戶設定用多少個采樣時鐘來確定最終輸入信號,起到濾波作用,避免高頻信號干擾,反正不管它了。


uint16_t TIM_ICInitTypeDef::TIM_ICPolarity


Specifies the active edge of the input signal. This parameter can be a value of TIM_Input_Capture_Polarity


這個就是觸發邊沿的極性選擇了,取值范圍如下:


TIM_ICPolarity_BothEdge


TIM_ICPolarity_Rising


TIM_ICPolarity_Falling


uint16_t TIM_ICInitTypeDef::TIM_ICPrescaler


Specifies the Input Capture Prescaler. This parameter can be a value of TIM_Input_Capture_Prescaler


這個成員是對外部信號進行分頻,也即是設置上圖中的Prescaler,可以設置為1/2/4/8分頻。


uint16_t TIM_ICInitTypeDef::TIM_ICSelection


Specifies the input. This parameter can be a value of TIM_Input_Capture_Selection


這個成員的作用就必須要對照上面的示意圖才能明白。仔細看上面的圖,可以發現定時器的4個通道并不是完全獨立的,而是1、2一組,3、4一組,同組之間的通道是有聯系的。也就是可以出現交叉觸發。而TIM_ICSelection就是選擇要不要使用交叉來觸發,如果不明白可以看固件庫的說明文檔,如下是此結構體成員的取值范圍:


#define TIM_ICSelection_DirectTI   ((uint16_t)0x0001)


TIM Input 1, 2, 3 or 4 is selected to be connected to IC1, IC2, IC3 or IC4, respectively


#define TIM_ICSelection_IndirectTI   ((uint16_t)0x0002)


TIM Input 1, 2, 3 or 4 is selected to be connected to IC2, IC1, IC4 or IC3, respectively.


#define TIM_ICSelection_TRC   ((uint16_t)0x0003)


TIM Input 1, 2, 3 or 4 is selected to be connected to TRC.


也就是說,根據不同的取值,可以講外部引腳的觸發信號連到內部不同的單元,這樣就使得單片機更加靈活了。


下面是main.c文件


#include "stm32f10x.h"


 GPIO_InitTypeDef GPIO_InitStructure;


TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;


TIM_ICInitTypeDef  TIM_ICInitStructure;


NVIC_InitTypeDef NVIC_InitStructure;


 void delay()


{


u32 i,j;


for(i=0;i<1000;i++)


for(j=0;j<5000;j++)


;


}


 void rcc_cfg()


{


 ;


}


 void gpio_cfg()


{


  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOA, ENABLE);



  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       //隨意延時led取反,且將PA8作為觸發定時器電平


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;


  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;


  GPIO_Init(GPIOA, &GPIO_InitStructure);


 


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                       //觸發中斷時,取反PD2


  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;


  GPIO_Init(GPIOD, &GPIO_InitStructure);


 


  /* TIM3 channel 2 pin (PA.07) configuration */


   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;


   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;


   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;


   GPIO_Init(GPIOA, &GPIO_InitStructure);


}


 


void nvic_cfg()


{


        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);


              /* Enable the TIM3 global Interrupt */


       NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中斷


       NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占優先級0級


       NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //從優先級3級


       NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能


       NVIC_Init(&NVIC_InitStructure);  //根據NVIC_InitStruct中指定的參數初始化外設NVIC寄存器


}


 


void tim3_cfg()


{


  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);


   TIM_DeInit(TIM3);


  TIM_InternalClockConfig(TIM3);


  //預分頻系數為36000-1,這樣計數器時鐘為72MHz/36000 = 2kHz


  TIM_TimeBaseStructure.TIM_Prescaler = 36000 - 1;


  //設置時鐘分割


  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;


  //設置計數器模式為向上計數模式


  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;


  //設置計數溢出大小,每計2000個數就產生一個更新事件


  TIM_TimeBaseStructure.TIM_Period = 2000 - 1;


  //將配置應用到TIM2中


  TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);


   //禁止ARR預裝載緩沖器


  TIM_ARRPreloadConfig(TIM3, DISABLE);


 


 //下面是對 TIM_ICInitStructure的配置


   TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;


   TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;


   TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;


   TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;    


   TIM_ICInitStructure.TIM_ICFilter = 0x0;       /*選擇輸入比較濾波器,濾波設置,經歷幾個周期跳變認定波形穩定0x0~0xF*/


    TIM_ICInit(TIM3, &TIM_ICInitStructure);


 


  //開啟TIM2的中斷


  TIM_ClearFlag(TIM3, TIM_IT_CC2);


  TIM_ITConfig(TIM3,TIM_IT_CC2,ENABLE);


 


  TIM_Cmd(TIM3, ENABLE);  //使能TIMx外設


}


 


/**


  * @brief  Main program.


  * @param  None


  * @retval None


  */


int main(void)


{


      rcc_cfg();


      gpio_cfg();


      nvic_cfg();


      tim3_cfg();


  while (1)


  {


    /* Set PA8 */


    GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_SET);


       delay();


    /* Reset PA8 */


    GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_RESET);


       delay();


  }


}


 


注意定時器3通道2引腳設置為浮空輸入。


 


 


 


下面是stm32f10x_it.c文件


 


#include "stm32f10x_it.h"


 u8 flag=0;


extern TIM_ICInitTypeDef  TIM_ICInitStructure;


void TIM3_IRQHandler(void)


{


  if(TIM_GetITStatus(TIM3, TIM_IT_CC2) == SET)


  {


    /* Clear TIM3 Capture compare interrupt pending bit */


    TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);


      //每次進入中斷就改變捕獲觸發方式,且翻轉PD2的電平


       if(flag==0)


              {


              flag=1;


              TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;


              TIM_ICInit(TIM3, &TIM_ICInitStructure);


              GPIO_WriteBit(GPIOD, GPIO_Pin_2, Bit_RESET);


              }


       else


              {


              flag=0;


              TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;


              TIM_ICInit(TIM3, &TIM_ICInitStructure);


              GPIO_WriteBit(GPIOD, GPIO_Pin_2, Bit_SET);


              }


   }


}


 


程序運行后,可以看到板子上兩個led燈交替閃爍。


我并沒有對捕獲值作任何處理,因為我只是測試程序是否能順利進入捕獲中斷。

關鍵字:stm32庫函數  通用定時器  輸入捕獲功能 引用地址:stm32庫函數學習篇---通用定時器(輸入捕獲功能)

上一篇:(STM32)GPIO庫函數使用一覽
下一篇:STM32的官方庫函數調用

推薦閱讀

? ?在前段時間舉行的柏林IFA2018大會上,索尼帶來了全新旗艦手機Xperia XZ3,而根據現場報道,這款手機將會在拍照和三防方面有突破性進展。  昨日晚間,索尼官方宣布將于10月18日下午2點在北京舉辦新品發布會,地址選在了北京朝陽區廣順南大街嘉美中心6層,本次發布會地主角正是索尼新年度旗艦Xperia XZ3。  雖然該機早在IFA2018展會上就亮過相,...
BL NEXT ;跳轉到子程序 ......... ;NEXT處執行 NEXT .......... MOV PC,LR ;從子程序返回這里的BL是跳轉的意思,LR(R14)保存了返回地址,PC(R15)是當前地址,把LR給PC就是從子程序返回。1.SP(R13)、 LR(...
近日,商務部例行記者會上,商務部發言人表示,中國作為全球電子產品制造大國,半導體需求量穩步上升,已經成為全球半導體市場增長的主要動力。截止今年9月初,我國集成電路累計進口1.5萬億元人民幣,同比增長15.3%... 本月早些時候,商務部發言人高峰在商務部例行記者會上表示,今年前8個月,我國外貿進出口逐步回穩向好,情況好于預期。截至今年9月初,...
【線上研討會】新興汽車市場發展現狀及未來趨勢——聚焦中國、俄羅斯、中東及非洲市場日期:2021年9月28日時間:15:00 — 16:25當前,全球各汽車市場的任務是如何從生產制造以及消費端恢復到正常狀態。中國市場率先實現反彈,歐洲市場盡管銷量出現大面積下滑,但近兩年新能源汽車市場迎來了跨越式發展。其他地區如中東、東南亞、非洲等新興力量的崛起也...

史海拾趣

問答坊 | AI 解惑

探索視頻圖像干擾的產生和有效解決辦法

新春伊始,在匯集、總結幾年來對干擾原因(因素)的初步認識基礎上,我們不妨來個“反向思維”,以求探索干擾的有效解決辦法。     你做過安防工程嗎?這樣直接提問,雖然有些唐突,但還都可以回答“做過”。但是,如果我問:“你做工程 ...…

查看全部問答∨

100分請教大家一個問題。怎樣用單片機控制電機

現在有個項目,就是通過單片機控制精密行星直流減速電機(型號:ple06-16/55zyn04a3), 達到如下目的:電機 正轉反轉100次/分鐘 電壓15V,電流3.2A,功率120W 不知道選用什么型號的單片機,還有具體的編程大概是如何的?可以用C語言編程嗎? ...…

查看全部問答∨

WIN 2000下如何設計雙網卡熱備份

大家好?WIN2000下,雙網卡熱備份,也就是一個網卡壞了,另一個冗余網卡熱切換,實現方案是什么?代碼是什么?謝謝…

查看全部問答∨

單片機學習新人 STC12C4052AD P1.1口電平輸出.求解疑惑 上圖 上程序

 用STC12C4052 搭建好最小系統 12M晶振 .寫個 P1.1口輸出 間隔時間輸出脈沖信號.程序如下:     ORG 0000H    LJMP MAIN   ORG 0030HMAIN:         MOV R1, ...…

查看全部問答∨

求指教

各位高手求指教啊,最近我想做FPGA方面的東西,但發現要寫這方面的論文找不到合適的理論背景支持,各位大師指點一下哪方面比較適合容易寫小論文啊…

查看全部問答∨

f28027 launchpad 下不進去程序 求助

我用的launchpad f28027,下不進去程序,對那個跳線帽和開關怎么 設置,望多多指導啊 …

查看全部問答∨

出一個 TP-LINK 路由器,九成九新,300M速度

本帖最后由 ddllxxrr 于 2016-1-7 16:35 編輯 出一個 TP-LINK 的路由器,九成九新,300M速度,原價210,現在 150元包郵出,需要的聯系我的QQ 429512065 本站強薦:185娛樂?城.足球?真_人.彩票齊全?手機可投?注任何游戲. 首次開戶送10元.首存送 ...…

查看全部問答∨

PCB電路設計的14個誤區

  現象一:這PCB板子的PCB設計要求不高,就用細一點的線,自動布吧點評:自動布線必然要占用更大的PCB面積,同時產生比手動布線多好多倍的過孔,在批量很大的產品中,PCB廠家降價所考慮的因素除了商務因素外,就是線寬和過孔數量,它們分別影響到 ...…

查看全部問答∨

【轉載】如何通過ARM管理FPGA周邊設備

本帖最后由 chenzhufly 于 2014-11-24 16:11 編輯 在Altera SoC FPGA系統中,有兩種不同的外設連接方式,一種是ARM通過AXI總線連接的外設,(可以成為硬外設),另外有一種是通過FPGA連接的外設, 在SoC FPGA中,通過FPGA連接的外設是通過LW HP ...…

查看全部問答∨

MSP430F5529A支持幾個UART口啊??

求大神解答啊,MSP430F5529A支持幾個UART口啊??最近要選個單片機做項目,需要至少兩個UART串口,不知道這個單片機支持幾個啊??…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 淮滨县| 兰西县| 北票市| 锡林郭勒盟| 舞钢市| 万州区| 东方市| 醴陵市| 寿阳县| 博白县| 临泽县| 和田县| 中阳县| 隆回县| 沙湾县| 曲沃县| 乐亭县| 内丘县| 都昌县| 家居| 醴陵市| 邳州市| 鸡东县| 宁晋县| 西安市| 舟山市| 汾阳市| 荣昌县| 抚宁县| 南丹县| 绍兴市| 若尔盖县| 花垣县| 马龙县| 建平县| 乌兰察布市| 屏东市| 凤山市| 集安市| 本溪市| 荣成市|