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

歷史上的今天

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

正在發(fā)生

2020年02月13日 | STM32學(xué)習(xí)筆記——利用通用定時器TIM2進(jìn)行精確延時

發(fā)布者:xrmilk 來源: eefocus關(guān)鍵字:STM32  通用定時器  IM2  精確延時 手機(jī)看文章 掃描二維碼
隨時隨地手機(jī)看文章

1. 通用定時器概述及性能


1.1 概述


在作者所使用的stm32芯片上,共有TIM1 1個高級定時器以及TIM2、TIM3、TIM4共3個通用定時器。其中各通用定時器均由一個通過可編程預(yù)分頻器驅(qū)動的16位自動裝載計(jì)數(shù)器構(gòu)成。適用于多種場合,包括測量輸入信號的脈沖長度(輸入采集)或者產(chǎn)生輸出波形(輸出比較和PWM)。使用定時器預(yù)分頻器和RCC時鐘控制器預(yù)分頻器,脈沖長度和波形周期可以在幾個微秒到幾個毫秒間調(diào)整。定時器是完全獨(dú)立的,而且沒有互相共享任何資源。它們可以一起同步操作。


1.2 性能


通用TIMx定時器特性包括:


16 位向上,向下,向上/向下自動裝載計(jì)數(shù)器

16 位可編程預(yù)分頻器,計(jì)數(shù)器時鐘頻率的分頻系數(shù)為1~65535 之間的任意數(shù)值

4個獨(dú)立通道:

─ 輸入捕獲


─ 輸出比較


─ PWM生成(邊緣或中間對齊模式)


─ 單脈沖模式輸出


使用外部信號控制定時器和定時器互連的同步電路

如下事件發(fā)生時產(chǎn)生中斷/DMA:

─ 更新:計(jì)數(shù)器向上溢出/向下溢出,計(jì)數(shù)器初始化(通過軟件或者內(nèi)部/外部觸發(fā))


─ 觸發(fā)事件(計(jì)數(shù)器啟動,停止,初始化或者由內(nèi)部/外部觸發(fā)計(jì)數(shù))


─ 輸入捕獲


─ 輸出比較


1.3 部分寄存器


由于通用定時器較為復(fù)雜,此處僅介紹如何利用TIM2進(jìn)行精確延時。下面介紹是TIM中與本篇內(nèi)容有關(guān)的寄存器。


1.3.1控制寄存器1(TIMx_CR1)

1.3.2 DMA/中斷使能寄存器(TIMx_DIER)

本篇中只關(guān)心其第6位及第0位

由于需要TIM在更新時產(chǎn)生中斷,因此這兩位都必須置1。


1.3.3 預(yù)分頻器(TIMx_PSC)

該分頻器對時鐘進(jìn)行分頻,并作為計(jì)數(shù)器時鐘。


時鐘來源有4種:


1)內(nèi)部時鐘(CK_INT) 


2)外部時鐘模式1:外部輸入腳(TIx) 


3)外部時鐘模式2:外部觸發(fā)輸入(ETR) 


4)內(nèi)部觸發(fā)輸入(ITRx):使用A定時器作為B定時器的預(yù)分頻器(A為B提供時鐘)。


具體選擇可以通過TIMx_SMCR寄存器相關(guān)位來設(shè)置。


1.3.4 自動重裝載寄存器(TIMx_ARR)

1.3.5 狀態(tài)寄存器(TIMx_SR)

本篇中主要關(guān)心該寄存器第0位

當(dāng)產(chǎn)生溢出時,該標(biāo)記位被置1,執(zhí)行更新事件后由軟件清0。

其他眾多關(guān)于TIM寄存器可查閱《STM32F10x參考手冊》


1.4基本計(jì)數(shù)中斷過程


按照自己的理解,使能中斷及定時器后,根據(jù)時鐘來源以及預(yù)分頻器(TIMx_PSC)所設(shè)置的分頻數(shù)開始計(jì)數(shù),當(dāng)計(jì)數(shù)達(dá)到自動重裝載寄存器(TIMx_ARR)中所存儲的值時,狀態(tài)寄存器(TIMx_SR)中對應(yīng)的標(biāo)志位(第0位)置1,通過軟件檢查該位則可以更新事件。


例如:系統(tǒng)中APB1(TIM2被掛在APB下)時鐘頻率為36MHz,設(shè)置TIMx_PSC分頻為36000,則作為定時器TIM2的時鐘頻率為36000000/36000=1000Hz,即1秒內(nèi)內(nèi)部開關(guān)計(jì)數(shù)1000次,每次1ms,設(shè)置TIMx_ARR重裝值為1000,則計(jì)數(shù)達(dá)1000次時,TIMx_SR中第0位標(biāo)志位被置1,此時為延遲1秒。


2 TIM固件庫函數(shù)


2.1 函數(shù)TIM_DeInit

image.png

例:重設(shè)TIM2


TIM_DeInit(TIM2);

 

2.2 函數(shù)TIM_TimeBaseInit

image.png

TIM_TimeBaseInitTypeDef structure


TIM_TimeBaseInitTypeDef定義于文件“stm32f10x_tim.h”: 


typedef struct 

    u16 TIM_Period; 

    u16 TIM_Prescaler; 

    u8 TIM_ClockDivision; 

    u16 TIM_CounterMode; 

} TIM_TimeBaseInitTypeDef; 


TIM_Period 


TIM_Period設(shè)置了在下一個更新事件裝入活動的自動重裝載寄存器周期的值。它的取值必須在0x0000和0xFFFF之間。


TIM_Prescaler 


TIM_Prescaler設(shè)置了用來作為TIMx時鐘頻率除數(shù)的預(yù)分頻值。它的取值必須在0x0000和0xFFFF之間。


TIM_ClockDivision 


TIM_ClockDivision設(shè)置了時鐘分割。該參數(shù)取值見下表。

image.png

TIM_CounterMode 


TIM_CounterMode選擇了計(jì)數(shù)器模式。該參數(shù)取值見下表。

image.png

例: 


TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; 

TIM_TimeBaseStructure.TIM_Period = 0xFFFF; 

TIM_TimeBaseStructure.TIM_Prescaler = 0xF; 

TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; 

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 

TIM_TimeBaseInit(TIM2, & TIM_TimeBaseStructure);


2.3 函數(shù)TIM_ClearFlag

image.png

TIM_FLAG值

image.png

例:


TIM_ClearFlag(TIM2,TIME_FLAG_Update);



2.4 函數(shù)TIM_ITConfig

image.png

TIM_IT值

image.png

例:


TIM_ITConfig(TIM2,TIME_FLAG_Update,ENABLE);



2.5 函數(shù)TIM_Cmd

image.png

例:


TIM_Cmd(TIM2,ENABLE);


3 例程程序


本例程主要使用TIM2進(jìn)行精準(zhǔn)延時并亮滅LED燈,其中NVIC部分暫做了解,后面再繼續(xù)深入。另外,需要注意3.0以后版本的固件庫相比2.0版有所更改,如刪除舊版NVIC部分函數(shù),或移動至misc.c文件中,通道名TIM2_IRQChannel更改為TIM2_IRQn等。完整構(gòu)架:

 

完整代碼:


#include "stm32f10x.h"

    void delay1ms(u32 nTimer);

    void GPIO_Configuration(void);

    void TIM2_IRQHandler(void);

    void Timer2_Configuration(void);

    void NVIC_Configuration(void);

 

int main(void)

{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能GPIOC時鐘

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能TIM2時鐘

GPIO_Configuration();

NVIC_Configuration();//配置中斷

Timer2_Configuration();//配置定時器

  while(1)

  {

    GPIO_ResetBits(GPIOC,GPIO_Pin_7|GPIO_Pin_6);

    GPIO_SetBits(GPIOC,GPIO_Pin_9|GPIO_Pin_8);

    delay1ms(1000);

    GPIO_ResetBits(GPIOC,GPIO_Pin_9|GPIO_Pin_8);

    GPIO_SetBits(GPIOC,GPIO_Pin_7|GPIO_Pin_6);

    delay1ms(1000);

    GPIO_Write(GPIOC,0x0140);

    delay1ms(2000);

    GPIO_Write(GPIOC,0x0280);

    delay1ms(2000);

   }

}

 

void GPIO_Configuration(void)

{

  GPIO_InitTypeDef GPIO_InitStructure;

  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;

  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

  GPIO_Init(GPIOC,&GPIO_InitStructure);

}

 

void Timer2_Configuration(void)

{

  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

  TIM_DeInit(TIM2);//使用缺省值初始化TIM外設(shè)寄存器

  TIM_TimeBaseStructure.TIM_Period=1;//自動重裝載寄存器值為1

  TIM_TimeBaseStructure.TIM_Prescaler=(36000-1);//時鐘預(yù)分頻數(shù)為36000

  TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//采樣分頻倍數(shù)1,未明該語句作用。

  TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//上升模式

  TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

  TIM_ClearFlag(TIM2,TIM_FLAG_Update);//清除更新標(biāo)志位

  TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//使能中斷

  TIM_Cmd(TIM2,ENABLE);//使能TIM2定時器

}

 

void NVIC_Configuration(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_SetPriorityGrouping(NVIC_PriorityGroup_0);

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //3.0版以后的函數(shù)庫將各通道TIM2_IRQChanel改名TIM2_IRQn

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; 

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);//NVIC_Init函數(shù)被包含在misc.c文件中。

}

 

volatile u32 gTimer;

void TIM2_IRQHandler(void)

{

  if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)//檢查溢出信號

  {

    TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除溢出標(biāo)志

    gTimer--;

  }

}

 

void delay1ms(u32 nTimer)

{

 gTimer=nTimer;

 while(gTimer);

}


完成編譯并燒錄后,開發(fā)板上四個LED燈先相鄰兩兩亮滅,亮滅時間延遲1秒,然后交替兩兩亮滅,亮滅時間延遲2秒。


參考文獻(xiàn)


[1] Sharkdo.STM32用定時器精確延時的方法  [EB/OL].http://www.cnblogs.com/sharkdo/archive/2011/03/23/1993036.html,2011-03-23/2012-10-14


[2] Cdzlllfe.stm32 通用定時器精確延時程序[EB/OL].


http://blog.sina.com.cn/s/blog_88534dff01010t1a.html,2011-12-17/2012-10-14


[3]福州芯達(dá)工作室.《STM32入門系列教程——定時器與蜂鳴器》[EB/OL]. http://ishare.iask.sina.com.cn/f/10918196.html,2010-10-20/2012-10-14.


[4]正點(diǎn)電子.《Stm32不完全手冊》[EB/OL]. http://www.amobbs.com/forum.php?mod=viewthread&tid=4517523,2011-01-17/2012-10-15


[5]半壺水,《STM32 菜鳥學(xué)習(xí)手冊-羅嗦版》,http://wenku.baidu.com/view/fc7c7d20ccbff121dd3683da.html, 2012-08-19.


[6] ST.《如何從STM32F10xxx固件庫V2.0.3 升級為STM32F10xxx標(biāo)準(zhǔn)外設(shè)庫V3.0.0》[EB/OL]. http://ishare.iask.sina.com.cn/f/18297257.html?from=like,2011-08-22/2012-09-09.

關(guān)鍵字:STM32  通用定時器  IM2  精確延時 引用地址:STM32學(xué)習(xí)筆記——利用通用定時器TIM2進(jìn)行精確延時

上一篇:stm8 tim4 測速顯示
下一篇:STM8s103F3p 16位定時器 STM2

推薦閱讀

總有一些人,讓你覺得他們就是從未來穿越過來的。一生開掛的達(dá)芬奇,在天文學(xué)、物理學(xué)、光學(xué)、醫(yī)學(xué)、建筑學(xué)、軍事與機(jī)械工程學(xué)、地理學(xué)等十幾個領(lǐng)域都有著突出貢獻(xiàn)。相比之下,畫畫啥的似乎就是副業(yè)了……而在當(dāng)下,埃隆·馬斯克就是那個穿越而至的神秘人。從年輕時的各種任性到后來創(chuàng)立各種高大上的前沿科技公司,馬斯克簡直就是現(xiàn)實(shí)版的“鋼鐵俠”!而在...
如此前預(yù)告,今日@三星GALAXY蓋樂世 官微正式宣布,三星Galaxy新品發(fā)布會將于北京時間2019年2月21日凌晨3點(diǎn)舉辦,屆時S10系列將全球首發(fā)。不出意外,和往年一樣,此次發(fā)布的S10系列將全球首發(fā)驍龍855移動平臺。同時,部分國家和地區(qū)提供Exynos 9820版本。據(jù)悉,此次S10家族將推出三款新品,包括:S10、S10 Plus以及S10E。其中,S10、S10 Plus是上代S9...
據(jù)南方電網(wǎng)數(shù)據(jù)顯示,截至2月11日,南方電網(wǎng)已復(fù)工和開工基建工程共13項(xiàng),其中5項(xiàng)主網(wǎng)及電源工程在春節(jié)期間持續(xù)施工,其余8項(xiàng)是新開工配網(wǎng)項(xiàng)目。配網(wǎng)項(xiàng)目中,配合防疫工作開展的業(yè)擴(kuò)配套及應(yīng)急項(xiàng)目7項(xiàng),已完工5項(xiàng)。同時,南方電網(wǎng)公司正在全力組織開展昆柳龍直流工程、云貴互聯(lián)通道工程等重點(diǎn)工程全面復(fù)工準(zhǔn)備,施工力量組織、設(shè)備生產(chǎn)與運(yùn)輸、現(xiàn)場復(fù)工...
據(jù)外媒報(bào)道,荷蘭設(shè)備制造商ASML表示,芯片短缺導(dǎo)致汽車生產(chǎn)放緩是給半導(dǎo)體行業(yè)供應(yīng)商帶來壓力的需求更廣泛增長的一個征兆。ASML的一位高管表示,對大多數(shù)類型的電腦芯片的更高需求看起來比包括ASML在內(nèi)的大多數(shù)行業(yè)參與者在新冠大流行開始時所預(yù)期的更強(qiáng)勁、更持久。 在過去十年時間里,ASML已經(jīng)發(fā)展成為歐洲最大的工業(yè)科技公司,市值近2000億歐元。該公...

史海拾趣

問答坊 | AI 解惑

avr仿真AD轉(zhuǎn)換的例子

avr仿真AD轉(zhuǎn)換的例子,很不錯的啊…

查看全部問答∨

430f449學(xué)習(xí)資料

以下是我收集和整理的一些有關(guān)msp430f449的資料。現(xiàn)在拿出來曬曬,讓更多的人能夠那道開源的資料!大家可以共同學(xué)習(xí),共同進(jìn)步! 本人有一個QQ群,叫:Robot DIY。群號:30240424。各位有興趣的,可以進(jìn)來。…

查看全部問答∨

不啟動資源管理器,怎樣實(shí)現(xiàn)窗口最小化

   如題:  點(diǎn)最小化發(fā)現(xiàn)沒響應(yīng)    我要在主窗口中執(zhí)行這一進(jìn)程,有時候需要讓它在后臺運(yùn)行,回到主窗口進(jìn)行其他操作   再次選擇執(zhí)行時又顯示該窗口  怎樣實(shí)現(xiàn)類似最小化的功能 …

查看全部問答∨

求助:Assertion Failed! File wincore.cpp,Line 2347 eVC4

WinCE 程序 環(huán)境 eVC4 錯誤:Assertion Failed! File wincore.cpp,Line wincore.cpp,Line 2347: 代碼 CWnd* CWnd::GetTopLevelParent() const {         if (GetSafeHwnd() == NULL) // no Window attached   &nb ...…

查看全部問答∨

modelsim 問題

今天在程序仿真的時候,突然產(chǎn)生一個問題,modelsim 突然出現(xiàn)了問題:工具欄上的所有出口都打不開,并彈出:Error:Invalid time value:{Error reading variable from kernel }! 請問大家這個問題怎么解決呢!謝謝…

查看全部問答∨

com16550驅(qū)動請教!!!!請做過此驅(qū)動的大哥幫忙!!!謝謝!!!

現(xiàn)在BSP中用的是在public下移植過來的com16550驅(qū)動,可是一直沒看懂是怎么用的外部中斷 看了網(wǎng)上 xunjingzhpu 的博客中: 3 需要增加串口芯片對應(yīng)的gpio口中斷,在中斷處理線程DWORD CPdd16550::ThreadRun()中記得重新使能中斷,在中斷觸發(fā)上如果 ...…

查看全部問答∨

求一 二進(jìn)制文件 轉(zhuǎn)換成 十六進(jìn)制文件 的工具 謝謝!

求一 二進(jìn)制文件 轉(zhuǎn)換成 十六進(jìn)制文件 的工具 謝謝! 給出下載地址 或者netsyt@sina.com…

查看全部問答∨

怎樣 自定義的輸入法編輯器IME用戶界面

IME(輸入法編輯器)內(nèi)核,包括和用戶輸入的語言相關(guān)的內(nèi)容,比如輸入法、漢字庫等; IME界面窗口包括:狀態(tài)窗口、字母組合窗口、候選字列表窗口。 默認(rèn)情況下,系統(tǒng)創(chuàng)建缺省的IME界面窗口; 現(xiàn)在,我還使用IME(輸入法編輯器)內(nèi)核,但不用缺省 ...…

查看全部問答∨

IShellFolder指針指向派生類CDesktopFolder,為什么不是調(diào)用派生類的函數(shù)

安裝了WinCE 5.0 MessageBox沒執(zhí)行到,代碼見后面。 為什么pSHF->CreateViewObject沒有運(yùn)行CDesktopFolder::CreateViewObject? 怎樣才能讓他執(zhí)行CDesktopFolder::CreateViewObject? SHSTDAPI SHGetDesktopFolder(LPSHELLFOLDER *ppshf) { & ...…

查看全部問答∨

有做過嵌入式視頻解碼器的嗎

我現(xiàn)在接手的工作是要用C64x的DSP做一個H.264的解碼器,并且用ARM了作為輔助的驗(yàn)證 我的思路是這樣: 編碼端是在電腦上進(jìn)行的,通過H.264編碼編成一定格式的文件,然后把該文件輸送到DSP中解碼,解碼后的數(shù)據(jù)通過DSP的HPI接口傳輸給ARM,然后經(jīng)過 ...…

查看全部問答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 乌拉特后旗| 沂源县| 黄浦区| 和平县| 林州市| 黄陵县| 建昌县| 安义县| 通海县| 甘泉县| 赤水市| 西乡县| 琼结县| 卓尼县| 雷山县| 正安县| 塘沽区| 台北市| 泽库县| 贡觉县| 仪陇县| 海丰县| 嵊泗县| 延安市| 原阳县| 武川县| 华亭县| 万山特区| 长寿区| 方城县| 建宁县| 泸定县| 松滋市| 如皋市| 彭水| 呈贡县| 诸暨市| 融水| 昆明市| 多伦县| 丘北县|