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

歷史上的今天

今天是:2025年02月09日(星期日)

正在發生

2020年02月09日 | STM8L101F3輸入捕獲測脈寬及占空比

發布者:科技奇才 來源: eefocus關鍵字:STM8L101F3  輸入捕獲  脈寬  占空比 手機看文章 掃描二維碼
隨時隨地手機看文章

近期空閑時做了一個STM8L101芯片的PWM檢測程序,在此發表個人見解。

預備知識:

STM8L庫函數的使用、STM8L定時器的使用,相關資料自行百度

目標:通過TIM3輸出PWM波,將輸出的波輸入至TIM2的捕獲通道。

好了,接下來進入正題。

STM8L10X的定時器的功能比較豐富,而且價格低廉,做輸入捕獲還是挺好的


首先介紹一個STM8L101X固件庫的一個函數,在固件庫的

line 444 of file stm8l10x_tim2.c.


TIM2_PWMIConfig是專門用來配置PWM輸入模式的庫函數,網上關于此處的介紹比較少,這里簡要介紹并應用


該函數原型如下:


00420 /**

00421   * @brief  Configures the TIM2 peripheral in PWM Input Mode according to the

00422   *         specified parameters.

00423   * @param  TIM2_Channel: TIM2 Channel 輸入捕獲的通道

00424   *          This parameter can be one of the following values:

00425   *            @arg TIM2_Channel_1: Channel 1

00426   *            @arg TIM2_Channel_2: Channel 2     

00427   * @param  TIM2_ICPolarity: Input Capture Polarity PWM開始的極性,可選為上升沿/下降沿

00428   *          This parameter can be one of the following values:

00429   *            @arg TIM2_ICPolarity_Rising: Input Capture on Rising Edge

00430   *            @arg TIM2_ICPolarity_Falling: Input Capture on Falling Edge  

00431   * @param  TIM2_ICSelection: Input Capture Selection 輸入通道與捕獲通道的連接,此處

TIM2_ICSelection_DirectTI表示捕獲通道1與輸入通道1連接

TIM2_ICSelection_IndirectTI表示捕獲通道1與輸入通道2連接

第三個值好像是與另外一個管腳連接,應該是TRGI

00432 * This parameter can be one of the following values:

00433   *   @arg TIM2_ICSelection_DirectTI: Input Capture mapped on the direct input

00434   *    @arg TIM2_ICSelection_IndirectTI: Input Capture mapped on the indirect input

00435   *            @arg TIM2_ICSelection_TRGI: Input Capture mapped on the Trigger Input  

 00436   * @param  TIM2_ICPrescaler: Input Capture Prescaler 分頻,表示多少個電位突變觸發一個事件

00437   *          This parameter can be one of the following values:

00438   *            @arg TIM2_ICPSC_DIV1: Input Capture Prescaler = 1 (one capture every 1 event)

00439   *            @arg TIM2_ICPSC_DIV2: Input Capture Prescaler = 2 (one capture every 2 events)

00440   *            @arg TIM2_ICPSC_DIV4: Input Capture Prescaler = 4 (one capture every 4 events)

00441   *            @arg TIM2_ICPSC_DIV8: Input Capture Prescaler = 8 (one capture every 8 events) 

00442   * @retval None

00443   */

00444 void TIM2_PWMIConfig(TIM2_Channel_TypeDef TIM2_Channel,

00445                      TIM2_ICPolarity_TypeDef TIM2_ICPolarity,

00446                      TIM2_ICSelection_TypeDef TIM2_ICSelection,

00447                      TIM2_ICPSC_TypeDef TIM2_ICPrescaler,

00448                      uint8_t TIM2_ICFilter)

00449 {

00450   uint8_t icpolarity = (uint8_t)TIM2_ICPolarity_Rising;

00451   uint8_t icselection = (uint8_t)TIM2_ICSelection_DirectTI;

00452 

00453   /* Check the parameters */

00454   assert_param(IS_TIM2_CHANNEL(TIM2_Channel));

00455 

00456   /* Select the Opposite Input Polarity */

00457   if (TIM2_ICPolarity == TIM2_ICPolarity_Rising) //配置開始時觸發方式

00458   {

00459     icpolarity = (uint8_t)TIM2_ICPolarity_Falling;

00460   }

00461   else

00462   {

00463     icpolarity = (uint8_t)TIM2_ICPolarity_Rising;

00464   }

00465 

00466   /* Select the Opposite Input */

00467   if (TIM2_ICSelection == TIM2_ICSelection_DirectTI) //另外一個捕獲通道觸發方式相反

00468   {

00469     icselection = (uint8_t)TIM2_ICSelection_IndirectTI;

00470   }

00471   else

00472   {

00473     icselection = (uint8_t)TIM2_ICSelection_DirectTI;

00474   }

00475 

00476   if (TIM2_Channel == TIM2_Channel_1)

00477   {

00478     /* TI1 Configuration */

00479     TI1_Config(TIM2_ICPolarity, TIM2_ICSelection,

00480                TIM2_ICFilter);

00481 

00482     /* Set the Input Capture Prescaler value */

00483     TIM2_SetIC1Prescaler(TIM2_ICPrescaler);

00484 

00485     /* TI2 Configuration */

00486     TI2_Config((TIM2_ICPolarity_TypeDef)icpolarity, (TIM2_ICSelection_TypeDef)icselection, TIM2_ICFilter);

00487 

00488     /* Set the Input Capture Prescaler value */

00489     TIM2_SetIC2Prescaler(TIM2_ICPrescaler);

00490   }

00491   else

00492   {

00493     /* TI2 Configuration */

00494     TI2_Config(TIM2_ICPolarity, TIM2_ICSelection,

00495                TIM2_ICFilter);

00496 

00497     /* Set the Input Capture Prescaler value */

00498     TIM2_SetIC2Prescaler(TIM2_ICPrescaler);

00499 

00500     /* TI1 Configuration */

00501     TI1_Config((TIM2_ICPolarity_TypeDef)icpolarity, (TIM2_ICSelection_TypeDef)icselection, TIM2_ICFilter);

00502 

00503     /* Set the Input Capture Prescaler value */

00504     TIM2_SetIC1Prescaler(TIM2_ICPrescaler);

00505   }

00506 }

00507 



部分注釋見上,簡要分析可知,該函數將選擇的輸入通道連接到定時器的捕獲通道1和捕獲通道2上,并且捕獲通道1為檢測開始沿,捕獲通道2則檢測


第二個電位沿,比如配置為上升沿為PWM開始,則PWM中間為下降沿




好了,該函數功能就是這樣了,下面是一些檢測函數,環境為STVD:




Tim2_Impulse_Detection.h頭文件

#ifndef Tim2_Impulse_Detection

#define Tim2_Impulse_Detection





/*

此庫文件用于捕獲Tim2通道1的輸入并檢測頻率以及脈寬

*/

#include

#include

#include

#include

#include





extern u8 temp; //中間變量,用于判斷上升0/下降1

extern int ICValue1; //上升沿記錄的值

extern int ICValue2; //下降沿記錄的值

extern int ICValue3; //第二個上升沿記錄的值

extern u8 update_high; //高電位溢出總數

extern u8 update_count; //溢出總數

extern u8 rate; //占空比,丟棄小數位





void Tim2_Impulse_Detection_Init(void); //Tim2_Impulse_Detection初始化

@far @interrupt void TIM2_Capture_Compare_HandledInterrupt (void);//捕獲中斷服務函數

@far @interrupt void TIM2_Update_Overflow_Trigger_Break_HandledInterrupt (void);//溢出中斷服務函數

void Tim2_Impulse_Detection_Get_Cycle(int* cycle_ms,int* cycle_us,u8* rate);//獲得輸入信號周期以及脈寬

void Tim3_PWM_Out(void); //Tim3輸出PWM波







#endif



Tim2_Impulse_Detection.c源文件

#include



/*

脈沖周期范圍(建議值):50us~1s

脈寬時間范圍(建議值):50us~1s

*/



u8 temp; //中間變量,用于判斷第一次進入上升沿捕獲0/第二次上升沿捕獲1

int ICValue1; //上升沿記錄的值

int ICValue2; //下降沿記錄的值

int ICValue3; //第二個上升沿記錄的值

u8 update_high; //高電位溢出總數

u8 update_count; //溢出總數



/**************************************

函數名:Tim2_Impulse_Detection_Init

功能:初始化Tim2為輸入捕獲

參數:無

返回值:無

描述:

**************************************/

void Tim2_Impulse_Detection_Init(void) //Tim2_Impulse_Detection初始化

{

CLK_MasterPrescalerConfig(CLK_MasterPrescaler_HSIDiv8);//系統時鐘頻率2Mhz

GPIO_Init(GPIOB , GPIO_Pin_0 , GPIO_Mode_In_PU_No_IT);//TIM2_CH1   PB0端口

CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,ENABLE);//使能時鐘


TIM2_DeInit();

TIM2_TimeBaseInit(TIM2_Prescaler_2, TIM2_CounterMode_Up, 30000);//計數周期1us,向上計數,溢出值為30000

TIM2_PWMIConfig(TIM2_Channel_1,

                 TIM2_ICPolarity_Rising,

                     TIM2_ICSelection_DirectTI,

                 0x00,

                     0x00);

//PWN輸入配置:通道1,上升沿,直接輸入,無分頻,無濾波

//該函數配置捕獲通道1為上升沿,捕獲通道2為下降沿

}





/**************************************

函數名:TIM2_Capture_Compare_HandledInterrupt

功能:TIM2_Capture_Compare_HandledInterrupt中斷服務程序

參數:無

返回值:無

描述:

**************************************/

@far @interrupt void TIM2_Capture_Compare_HandledInterrupt (void)//捕獲中斷服務函數

{

if((TIM2_GetITStatus(TIM2_FLAG_CC1)) != RESET)

{

if(temp)

{

ICValue3=TIM2_GetCapture1();


TIM2_ClearFlag(TIM2_FLAG_CC1);//清除通道中斷標志

TIM2_ClearITPendingBit(TIM2_IT_CC1);

TIM2_ITConfig( TIM2_IT_Update, DISABLE);//關閉溢出中斷

TIM2_CCxCmd(TIM2_Channel_1, DISABLE);//關閉通道1

TIM2_ITConfig(TIM2_IT_CC1, DISABLE);//關閉捕獲通道1中斷

TIM2_CCxCmd(TIM2_Channel_2, DISABLE);//關閉通道2

TIM2_ITConfig(TIM2_IT_CC2, DISABLE);//關閉捕獲通道2中斷

temp=0;

}

else

{

ICValue1=TIM2_GetCapture1();


TIM2_ITConfig( TIM2_IT_Update, ENABLE);//使能溢出中斷

TIM2_ClearITPendingBit(TIM2_IT_Update);

TIM2_ClearITPendingBit(TIM2_IT_CC1);

TIM2_ClearFlag(TIM2_FLAG_CC1);//清除中斷標志

TIM2_CCxCmd(TIM2_Channel_2,ENABLE);//使能捕獲通道2

TIM2_ITConfig( TIM2_IT_CC2 , ENABLE);//使能TIM2輸入通道2中斷

TIM2_ClearFlag(TIM2_FLAG_CC2);//清除通道中斷標志

TIM2_ClearITPendingBit(TIM2_IT_CC2);

temp=1;


}

}

if((TIM2_GetITStatus(TIM2_FLAG_CC2)) != RESET)

{

ICValue2=TIM2_GetCapture2();


update_high=update_count;

TIM2_ClearFlag(TIM2_FLAG_CC2);//清除通道中斷標志

TIM2_ClearITPendingBit(TIM2_IT_CC2);

TIM2_CCxCmd(TIM2_Channel_2,DISABLE);//失能捕獲通道2

TIM2_ITConfig( TIM2_IT_CC2 , DISABLE);//失能TIM2輸入通道2中斷

}

}







/**************************************

函數名:TIM2_Update_Overflow_Trigger_Break_HandledInterrupt

功能:TIM2_Update_Overflow_Trigger_Break_HandledInterrupt中斷服務程序

參數:無

返回值:無

描述:

**************************************/

@far @interrupt void TIM2_Update_Overflow_Trigger_Break_HandledInterrupt (void)//溢出中斷服務函數

{

update_count++;

TIM2_ClearITPendingBit(TIM2_IT_Update);

TIM2_ClearFlag(TIM2_IT_Update);

}





/**************************************

函數名:Tim2_Impulse_Detection_Get_Cycle

功能:Tim2_Impulse_Detection_Get_Cycle獲取輸入PWM波的脈寬與占空比

參數:

cycle_ms 一個儲存周期毫秒數的指針

cycle_us 一個儲存周期微秒數的指針

rate 一個儲存占空比的指針

返回值:無

描述:初始化完畢后,直接調用即可取得脈寬與占空比

**************************************/

void Tim2_Impulse_Detection_Get_Cycle(int* cycle_ms,int* cycle_us,u8* rate)//獲得輸入信號周期以及脈寬

[1] [2]
關鍵字:STM8L101F3  輸入捕獲  脈寬  占空比 引用地址:STM8L101F3輸入捕獲測脈寬及占空比

上一篇:STM8S庫文件判斷指定IO輸入引腳電平GPIO_ReadInputPin有問題
下一篇:解決stm8s003中timer2配置初始化中引起中斷更新

推薦閱讀

2018年2月7日,圣迭戈——諾基亞和Qualcomm Incorporated(NASDAQ: QCOM)子公司Qualcomm Technologies, Inc. 宣布,已在3.5GHz和28GHz頻譜上成功完成符合全球3GPP Release 15 5G新空口標準的互操作測試,測試采用諾基亞商用AirScale基站和Qualcomm Technologies的終端原型。3GPP Release 15 5G新空口標準已在去年12月正式完成。 諾基亞和Qual...
我們平時經常能看到概念車的渲染圖,非常帥氣,有科技感,但是真正能量產的卻幾乎沒有。其實概念車的設計理念真的非常出色,如果真的視線對于汽車真的算是一次改革了。就在近段時間,日本也是把一個概念車的設計理念變成了顯示,推出了首款無后視鏡的車型。無后視鏡車型來了,真不是畫蛇添足,你怎么看由于現在的后視鏡為了更大的視野被做的太大了,造成A...
首先,你要用軟件允許中斷,即C語言中EA = 1; 允許總中斷ES = 1;//允許串口中斷匯編中可用SETB EA ;允許總中斷SETB ES ;允許串口中斷當單片機接收到一幀數據后,RI會置1,向CPU申請中斷,若之前有中斷允許,則產生了中斷,進入中斷服務程序。當然,單片機發送完一幀數據,TI也會置1,同樣會產生中斷!一般我們在發送數據時要關中斷,因為一般你不...
通過P1口的中斷開啟定時器,然后利用定時器中斷不斷掃描相應的端口狀態,判斷按鍵的//定時器設置void TimerA1Init(){ _UINT data = 0 ; TA1CTL = data ;//clear all ,diaable interrupt , claer ifg TA1CTL |= TASSEL__ACLK | ID_0 | TACLR ; // ACLK, stop mode, ,div:1 ,clear TAR //TA0CTL |= MC__UP...

史海拾趣

問答坊 | AI 解惑

哪位大俠做過PS2鍵盤的請幫幫忙,我的鍵盤不能在電腦上顯示出來

我自己設計了一個鍵盤,插到PS2接口上后,按下按鍵,電腦沒顯示,只有聽到發數據的聲音,每按一次按鍵電腦就嘟三聲;請個位幫幫忙,給點建議!…

查看全部問答∨

Windows CE驅動程序開發04.pdf

Windows CE驅動程序開發04.pdf…

查看全部問答∨

請教一個關于RAM_HIGH_ADRS的問題

我現在用的是vxworks平臺 cpu是powerpc的MPC8248 原來我的bootrom程序中RAM_LOW_ADRS、RAM_HIGH_ADRS分別設置的為0x00010000和0x01e00000,現在我的vxworks映像過大,修改了RAM_HIGH_ADRS的值(config.h和makefile中),結果機器會不斷重啟,請問 ...…

查看全部問答∨

can學習整個一個月紀念,高興,散分!!

大家還記得一個月前,我在這問了一個關于CAN-BUS學習的問題,整整一個月過去了,現在已經掌握BASSIC CAN 和PELI CAN的原理,并把兩種模式的程序調試成功(兩個節點),總結這一個月,收獲很多,從ARM到51,對單片機的理解又有了新的認識...非常的開心,與大家 ...…

查看全部問答∨

高人指點一下

嵌入式跟一般的軟件編程有什么不同? 不要笑我 新手…

查看全部問答∨

最近我看到有人反對淘寶有的贊成淘寶唉不說了大家看下

本帖最后由 ddllxxrr 于 2016-1-7 17:11 編輯 這個東西是,仁者見仁智者見智的東西, 我覺得在淘寶買東西很有必要:   1,當地有些件買不到,比如LPC1114,STM32你去電子市場長買吧,怕八輩子也買不到. 2,方便,對與我這樣大門不出二門緊閉的人, ...…

查看全部問答∨

2011年全國電子設計競賽賽題專家預測(權威版)

本帖最后由 paulhyde 于 2014-9-15 09:14 編輯  …

查看全部問答∨

stm8無復位從用戶代碼跳轉到UBC代碼?

公司要我做stm8單片機的相關的技術研發,提出要求從用戶代碼不通過復位直接跳轉到UBC(用戶啟動代碼)模式下;在UBC模式下要跳轉到用戶代碼是很簡單的,幾條語句就解決了,例如:typedef @far void (*TFUNCTION)(void); const TFUNCTION  M ...…

查看全部問答∨

圖像采集

想用ARM+Linux實現圖像采集和傳輸,用ARM的哪款處理器比較好實現呢??各位大俠給推薦一下~~…

查看全部問答∨

VxWorks6.8學習交流

剛弄了一個VxWorks6.8版本的安裝盤,支持各種系列的CPU。學習交流請QQ:578308323…

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

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 诸城市| 永丰县| 耿马| 郓城县| 泸定县| 两当县| 霍山县| 云梦县| 丰台区| 灌云县| 峡江县| 方正县| 乃东县| 新和县| 天长市| 含山县| 东光县| 南宫市| 屏边| 疏附县| 平乐县| 花垣县| 赤壁市| 阳朔县| 襄樊市| 玉环县| 松阳县| 高平市| 连南| 商丘市| 定远县| 铜川市| 陆河县| 新建县| 吴忠市| 平远县| 翼城县| 黔东| 兴山县| 吐鲁番市| 中江县|