欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

CKS32F4xx系列MCU SysTick定時器的原理及使用方法

中科芯MCU ? 來源:中科芯MCU ? 2023-12-18 09:21 ? 次閱讀

本課將為大家講解CKS32F4xx系列產品的SysTick定時器原理及使用方法。SysTick定時器也叫SysTick滴答定時器,屬于Cortex-M4內核外設。SysTick定時器可以用于查詢延時、中斷延時以及測量函數(shù)運行時間;在實時操作系統(tǒng)RTOS中作為滴答定時器,用于上下文切換。采用Cortex-M內核的微處理都有SysTick定時器,方便不同處理器之間的軟件移植。SysTick定時器時鐘源可直接選取系統(tǒng)時鐘,還可以通過系統(tǒng)時鐘8分頻后取得。

SysTick定時器內部是一個遞減的計時器,當減到0時,將從LOAD寄存器中自動重裝定時器初始值,重新向下遞減計數(shù),如此循環(huán)往復。如果開啟SysTick中斷,當計數(shù)器減到0時,SysTick可以生產異常,異常編號為15。

SysTick定時器寄存器

SysTick定時器內部是一個24位向下遞減的計時器,包含4個寄存器,如圖。

34167e5a-9bf6-11ee-8b88-92fbcf53809c.png

圖1SysTick定時器框圖

1)STK_CTRL寄存器

STK_CTRL是SysTick定時器的控制及狀態(tài)寄存器,相應功能如下:

3429746a-9bf6-11ee-8b88-92fbcf53809c.jpg

2)STK_LOAD寄存器

STK_LOAD寄存器是SysTick定時器的重裝載數(shù)值寄存器,相應功能如下:

3438bc86-9bf6-11ee-8b88-92fbcf53809c.jpg

3)STK_VAL寄存器

STK_VAL寄存器是SysTick定時器的當前數(shù)值寄存器,相應功能如下:

3441d30c-9bf6-11ee-8b88-92fbcf53809c.jpg

4)STK_CALIB寄存器

STK_CALIB寄存器是SysTick定時器的校準數(shù)值定時器,用于利用片上硬件為軟件提供校準信息,但使用情況較少。在CMSIS Core中,不需要使用SysTick校準寄存器,因為CMSIS Core提供了一個名為“SystemCoreClock”的軟件變量。此變量在系統(tǒng)初始化函數(shù)“SystemInit()”中設置,每次更改系統(tǒng)時鐘配置時也會更新。這種方法比使用SysTick CalibrationRegister的硬件方法靈活。校準寄存器描述如下表:

3458cca6-9bf6-11ee-8b88-92fbcf53809c.jpg

查詢延時使用步驟

1)配置SysTick定時器時鐘源

2)加載延時計數(shù)值 3)清零計數(shù)器,啟動定時器開始遞減計數(shù) 4)等待計數(shù)結束 5)清零計數(shù),關閉定時器,延時結束 相關函數(shù)如下:

void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
{
  if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
  {
    SysTick->CTRL |= SysTick_CLKSource_HCLK;
  }
  else
  {
    SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
  }
}
void TickDelayInit(u8 SYSCLK)
{
//選擇時鐘源為AHB/8
    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
fac_us=SYSCLK>>3;
fac_ms=((u32)SYSCLK*1000)>>3;
}
void TickDelayUs(u16 nus)
{
uint32_t temp;
SysTick->LOAD=nus*fac_us-1;
SysTick->VAL=0x00;
SysTick->CTRL=0x01;
do
{
temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16)));
SysTick->CTRL=0x00;        
SysTick->VAL =0X00;       
}
void TickDelayMs(u16 nms)
{        
u32 temp;    
SysTick->LOAD=nms*fac_ms -1;
SysTick->VAL =0x00;
SysTick->CTRL=0x01 ;
do
{
temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16)));
SysTick->CTRL=0x00;
SysTick->VAL =0X00;  
}

中斷方式延時使用步驟

1)配置SysTick定時器時鐘源

2)調用系統(tǒng)函數(shù)SysTick_Config(),開啟中斷,配置中斷間隔

3)延時函數(shù)賦值延時變量,并等待延時變量遞減到0,達到精確延時效果

4)中斷函數(shù)中延時變量遞減到0 相關函數(shù)如下:

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
   if ((ticks - 1) > 0xFFFFFF)//24位寄存器,大于該值返回錯誤
   {
      return (1);  
   }
  SysTick->LOAD  = (uint32_t)(ticks - 1);//計數(shù)到0,ticks值應減1   
  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1);
  SysTick->VAL   = 0UL;    
  SysTick->CTRL  = (1<<2) |(1<<1) | 1;//配置時鐘源,使能定時器,開啟中斷
  return (0UL);  
}
void TickInterruptDelay(__IO u32 nTime)
{
  TimingDelay = nTime;
  while(TimingDelay != 0);
}
void TickInterruptHandleTimingDelay_Decrement(void)
{
  if (TimingDelay != 0)
   {
     TimingDelay--;
   }
}

測量短時函數(shù)的執(zhí)行時間

SysTick計時器可用于計時測量。例如,可以使用以下代碼測量短函數(shù)的持續(xù)時間:

SysTick->CTRL = 0; // 禁用 SysTick

SysTick->LOAD = 0xFFFFFFFF; // 設置重裝寄存器到最大值

SysTick->VAL = 0; // 清零VAL

SysTick->CTRL = 0x5; // 使能SysTick, 使用處理器時鐘

while(SysTick->VAL != 0); // 等待重裝完畢

start_time = SysTick->VAL; // 較大的起始點

TestDelayFunc(); // 待測函數(shù)執(zhí)行時間

stop_time = SysTick->VAL; // 獲取執(zhí)行結束時間

cycle_count = start_time e stop_time;//計算函數(shù)執(zhí)行時間

由于SysTick是一個遞減計數(shù)器,因此start_time的值大于stop_time。如果待測函數(shù)執(zhí)行時間較長,這種情況必須啟用SysTick異常,并使用SysTick處理程序來計算SysTick計數(shù)器下溢的次數(shù)。

總結及注意事項

SysTick定時器是微處理器系統(tǒng)內部定時器,提供精確的時間延時和計時功能。采用中斷方式延時,需要考慮SysTick中斷優(yōu)先級較低,容易被打斷影響延時;在嵌入式系統(tǒng)中,系統(tǒng)將使用SysTick計時器,應用程序中則不可在使用SysTick;在系統(tǒng)在線調試停止時,SysTick計時器將停止計時。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17316

    瀏覽量

    352533
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    121098
  • 操作系統(tǒng)

    關注

    37

    文章

    6889

    瀏覽量

    123708
  • 定時器
    +關注

    關注

    23

    文章

    3255

    瀏覽量

    115313
  • Systick
    +關注

    關注

    0

    文章

    62

    瀏覽量

    13137

原文標題:MCU微課堂|CKS32F4xx系列SysTick定時器

文章出處:【微信號:中科芯MCU,微信公眾號:中科芯MCU】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    MCU微課堂|CKS32F4xx系列產品時鐘配置

    作為MCU運行的基礎,時鐘是單片機各個模塊工作時序的最小時間單位,推動單片機的各指令執(zhí)行,是MCU選型的一個重要指標。CKS32F4xx系列產品具有眾多的外設,但并非所有的外設均需要系
    發(fā)表于 12-12 10:17 ?880次閱讀

    CKS32F4xx系列ETH通信詳解

    CKS32F4xx系列芯片自帶以太網模塊,該模塊包括帶專用DMA控制的MAC 802.3(介質訪問控制)控制
    的頭像 發(fā)表于 11-10 11:13 ?1075次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>ETH通信詳解

    基于CKS32F4xx系列MCU互補PWM方案

    互補輸出實際跟比較輸出章節(jié)一樣使用的是定時器的功能,所以相關的函數(shù)設置同樣在庫函數(shù)文件CKS32f4xx_tim.h和CKS32f4xx_tim.c文件中。 1)開啟TIM1和GPIO時鐘,配置PA7、PA8選擇復用功能GPIO
    發(fā)表于 12-02 10:13 ?690次閱讀
    基于<b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>的<b class='flag-5'>MCU</b>互補PWM方案

    CKS32F4xx系列產品串口DMA傳輸

    在上一講,我們講過CKS32F4xx系列的6個串口都支持DMA傳輸。因此本節(jié)我們對CKS32F4xx系列的DMA進行介紹,同時利用DMA對串口數(shù)據(jù)進行傳輸。
    的頭像 發(fā)表于 04-10 11:18 ?1101次閱讀

    CKS32F4xx系列產品的定時器使用-基本特征和定時操作

    這一課我們將介紹CKS32F4XX系列產品的定時器使用,CKS32F4XX定時器功能十分強大,包含2個高級控制
    的頭像 發(fā)表于 05-19 09:18 ?969次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產品的<b class='flag-5'>定時器</b>使用-基本特征和<b class='flag-5'>定時</b>操作

    CKS32F4xx系列產品Timer的基本使用方法-定時器脈沖計數(shù)

    上一章我們介紹了CKS32F4的通用定時器定時操作的使用方法,這一章我們將向大家介紹通用定時器作為定時器
    的頭像 發(fā)表于 06-05 09:39 ?1087次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產品Timer的基本<b class='flag-5'>使用方法</b>-<b class='flag-5'>定時器</b>脈沖計數(shù)

    CKS32F4xx系列RNG功能設置

    ? MCU 微課堂 CKS32F4xx 系 列RNG功能 隨機數(shù)發(fā)生簡介 ? ? CKS32F4xx系列自帶了硬件隨機數(shù)發(fā)生
    的頭像 發(fā)表于 09-08 10:01 ?657次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>RNG功能設置

    CKS32F4xx系列DAC功能

    CKS32F4xx系列DAC功能
    的頭像 發(fā)表于 11-06 16:56 ?901次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>DAC功能

    CKS32F4xx系列ADC多通道DMA電壓采集

    CKS32F4xx系列ADC多通道DMA電壓采集
    的頭像 發(fā)表于 11-06 16:53 ?1156次閱讀

    CKS32F4xx系列產品Timer的基本使用方法-定時器脈沖計數(shù)

    CKS32F4xx系列產品Timer的基本使用方法-定時器脈沖計數(shù)
    的頭像 發(fā)表于 11-09 17:38 ?1135次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產品Timer的基本<b class='flag-5'>使用方法</b>-<b class='flag-5'>定時器</b>脈沖計數(shù)

    CKS32F4xx系列產品Timer的基本使用方法-比較輸出

    CKS32F4xx系列產品Timer的基本使用方法-比較輸出
    的頭像 發(fā)表于 11-09 17:39 ?910次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產品Timer的基本<b class='flag-5'>使用方法</b>-比較輸出

    CKS32F4xx系列產品Timer的基本使用方法-定時操作

    CKS32F4xx系列產品Timer的基本使用方法-定時操作
    的頭像 發(fā)表于 11-09 17:41 ?675次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產品Timer的基本<b class='flag-5'>使用方法</b>-<b class='flag-5'>定時</b>操作

    MCU微課堂 | CKS32F4xx系列產品SPI通信

    MCU微課堂 | CKS32F4xx系列產品SPI通信
    的頭像 發(fā)表于 10-24 17:12 ?759次閱讀
    <b class='flag-5'>MCU</b>微課堂 | <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產品SPI通信

    MCU微課堂 | CKS32F4xx系列產品GPIO口配置

    MCU微課堂 | CKS32F4xx系列產品GPIO口配置
    的頭像 發(fā)表于 10-24 15:14 ?851次閱讀
    <b class='flag-5'>MCU</b>微課堂 | <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產品GPIO口配置

    CKS32F4xx系列FSMC功能簡介

    本課講為大家講解CKS32F4xx系列產品的FSMC應用實例,F(xiàn)SMC全稱是Flexible Static Memory Controller,讀作靈活的靜態(tài)存儲控制,顧名思義,MCU
    的頭像 發(fā)表于 04-14 15:06 ?1038次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>FSMC功能簡介