歡迎來到《圣博凱斯》變頻供水設(shè)備官網(wǎng)
精銳于專業(yè) / 卓然于品質(zhì) -- 20年專注于供水行業(yè),締造至臻品質(zhì) -- 服務(wù)熱線:0731-85783205 18932453205

定時(shí)器分為哪三種_定時(shí)器分為哪幾種

STM32F1開發(fā)指南《精英版》庫函數(shù)版---第五章第一,系統(tǒng)init時(shí)鐘初始化函數(shù)使用V3.5版本的庫函數(shù),該函數(shù)在系統(tǒng)啟動(dòng)后自動(dòng)調(diào)用。

在startup_stm32f10x_xx.s文件中:

; resethandlerreset _ handlerprocexportreset _ handler [ weak ] import _ mainimportsysteminitldrr 0,=system init blx r0 ldr r0

初始化后的狀態(tài): SYSCLK (系統(tǒng)時(shí)鐘) 72MHz

AHB總線時(shí)鐘(使用SYSCLK ) 72MHz

APB1總線時(shí)鐘(PCLK1) 36MHz

APB2總線時(shí)鐘(PCLK2) 72MHz

PLL時(shí)鐘72MHz

初始化后,可以從變量SystemCoreClock中獲取系統(tǒng)變量。 如果SYSCLK=72MHz,則變量SystemCoreClock=72000000。 二、有Systick滴答計(jì)時(shí)器1、Systick計(jì)時(shí)器、CM3、CM4核心芯片。 2、Systick計(jì)時(shí)器常用于延時(shí)或?qū)崟r(shí)系統(tǒng)的心跳時(shí)鐘

節(jié)約MCU資源,無需浪費(fèi)計(jì)時(shí)器。 例如,在UCOS中,時(shí)分復(fù)用需要最小的時(shí)間戳,一般在STM32 UCOS系統(tǒng)中使用Systick作為UCOS心跳時(shí)鐘。

3、Systick計(jì)時(shí)器是系統(tǒng)滴答的計(jì)時(shí)器,是24位倒計(jì)時(shí)計(jì)時(shí)器。 計(jì)數(shù)到0后,從RELOAD寄存器中自動(dòng)重新加載計(jì)時(shí)器初始值。 只要不清除Systick控件和狀態(tài)寄存器的使能位,它就不會(huì)停止,并在休眠模式下工作。

4、SysTick計(jì)時(shí)器與NVIC捆綁在一起,用于產(chǎn)生SysTick異常(異常編號(hào): 15 )。 5、也可以設(shè)定Systick中斷的優(yōu)先順序。 6、4個(gè)Systick寄存器(參考Cortex M3權(quán)威指南):CTRL SysTick控件和狀態(tài)寄存器

位0:ENABLE有效位:必須設(shè)置1才能使用Systick計(jì)時(shí)器

是否發(fā)生位1(Tickint )中斷

位2:CLKSOURCE時(shí)鐘源(由函數(shù)SysTick_CLKSourceConfig配置) ) ) )

位16 )計(jì)數(shù)標(biāo)志)讀取此位時(shí)自動(dòng)清除----避免誤讀

在STM32的情況中,外部時(shí)鐘源是HCLK(AHB總線時(shí)鐘)的1/8核心時(shí)鐘是hclk時(shí)鐘。

配置函數(shù): SysTick_CLKSourceConfig (;

):加載棒自動(dòng)重載除法寄存器

24位重載寄存器即使在32位中也僅24位有效

):VAL SysTick當(dāng)前值寄存器

):CALIB SysTick校準(zhǔn)值寄存器

7、固件庫中的Systick相關(guān)函數(shù):

p style="text-align:left;">??? SysTick_CLKSourceConfig()??? //Systick時(shí)鐘源選擇? misc.c文件中

void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource){ /* Check the parameters */ assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource)); if (SysTick_CLKSource == SysTick_CLKSource_HCLK) { SysTick->CTRL |= SysTick_CLKSource_HCLK; } else { SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8; }} static __INLINE uint32_t SysTick_Config(uint32_t ticks){ if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ /* set reload register */ SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set Priority for Cortex-M0 System Interrupts */ NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); SysTick->VAL = 0; /* Load the SysTick Counter Value */ SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ return (0); /* Function successful */}

??? SysTick_Config(uint32_t ticks) //初始化systick,時(shí)鐘為HCLK,并開啟中斷? ? ?//core_cm3.h/core_cm4.h文件中(兩個(gè)中斷時(shí)間間隔)

8、Systick中斷服務(wù)函數(shù)

void SysTick_Handler(void);

9、用中斷的方式實(shí)現(xiàn)delay延時(shí) static __IO uint32_t TimingDelay;void Delay(__IO uint32_t nTime){ TimingDelay = nTime; while(TimingDelay != 0);}void SysTick_Handler(void){ if (TimingDelay != 0x00) { TimingDelay--; }} int main(void) { … if (SysTick_Config(SystemCoreClock / 1000)) //systick時(shí)鐘為HCLK,中斷時(shí)間間隔1ms { while (1); } while(1) { Delay(200);//2ms … }} 三、delay延時(shí)函數(shù)

如果使用中發(fā)現(xiàn)延時(shí)不一致,問題一般都是因?yàn)椴煌瑑?nèi)核時(shí)鐘不一樣而已。修改tciks值即可。

void delay_ms(u16 nms){ u32 temp; SysTick->LOAD=(u32)nms*fac_ms;//時(shí)間加載(SysTick->LOAD為24bit)SysTick->VAL =0x00;//清空計(jì)數(shù)器SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;//開始倒數(shù) do{temp=SysTick->CTRL;}while((temp&0x01)&&!(temp&(1<<16)));//等待時(shí)間到達(dá) SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;//關(guān)閉計(jì)數(shù)器SysTick->VAL =0X00; //清空計(jì)數(shù)器 }

猜你喜歡

  • 三菱plc計(jì)時(shí)器最大計(jì)時(shí)_三菱plc計(jì)時(shí)器分類

    關(guān)注“PLC狂熱”,一起提高知識(shí)!回復(fù)“三菱全套”,接收三菱系列的電子資料收藏!很多同學(xué)絕對(duì)計(jì)時(shí)器和計(jì)數(shù)器很簡單,但這部分的內(nèi)容沒有必要輕視。其實(shí)大多數(shù)人都沒有掌握自己的使用方法。將計(jì)時(shí)器的當(dāng)前值、設(shè)定值應(yīng)用于寄存器、比較指令、觸摸屏是最實(shí)用的知識(shí)點(diǎn),其他書籍和案例中沒有過多說明,但本文將重點(diǎn)說明。01計(jì)時(shí)器圖2

  • 時(shí)鐘脈沖和時(shí)鐘周期一樣嗎_時(shí)鐘脈沖和時(shí)鐘周期

    什么是時(shí)鐘脈沖,CPU為什么需要時(shí)鐘,時(shí)鐘信號(hào)是怎么產(chǎn)生的?首先知道什么是脈沖上圖的一個(gè)方波稱為一個(gè)脈沖,類似于人類的脈搏跳動(dòng)。對(duì)于每一個(gè)方形脈沖,電壓或電路從0上升到最大值的那條線叫做上升沿;反之,電壓或電流逐漸下降的那條線叫做下降沿。一個(gè)脈沖稱為CPU的一個(gè)時(shí)鐘信號(hào),或者時(shí)鐘脈沖。一個(gè)脈沖周期就叫CPU時(shí)鐘周

  • 系統(tǒng)時(shí)鐘同步方式是什么_時(shí)鐘同步系統(tǒng)采用哪幾種方式對(duì)時(shí)

    時(shí)間同步裝置(時(shí)鐘系統(tǒng))工作模式介紹時(shí)間同步裝置(時(shí)鐘系統(tǒng))工作模式介紹PCS7系統(tǒng)基于TIA構(gòu)建方式,在整個(gè)系統(tǒng)下包含了AS自動(dòng)化系統(tǒng),OS服務(wù)器/客戶端,單站和各類遠(yuǎn)程站點(diǎn)等多種組件。這些組件都擁有自己的時(shí)鐘系統(tǒng),如果沒有配置統(tǒng)一的時(shí)鐘系統(tǒng),可能會(huì)導(dǎo)致OS中的報(bào)警時(shí)鐘與計(jì)算機(jī)時(shí)鐘不一致,冗余服務(wù)器所看到同