色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

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

3天內不再提示

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

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

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

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

SysTick定時器寄存器

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

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

圖1SysTick定時器框圖

1)STK_CTRL寄存器

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

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

2)STK_LOAD寄存器

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

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

3)STK_VAL寄存器

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

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

4)STK_CALIB寄存器

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

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

查詢延時使用步驟

1)配置SysTick定時器時鐘源

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

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)調用系統函數SysTick_Config(),開啟中斷,配置中斷間隔

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

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

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
   if ((ticks - 1) > 0xFFFFFF)//24位寄存器,大于該值返回錯誤
   {
      return (1);  
   }
  SysTick->LOAD  = (uint32_t)(ticks - 1);//計數到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--;
   }
}

測量短時函數的執行時間

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

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

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

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

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

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

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

TestDelayFunc(); // 待測函數執行時間

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

cycle_count = start_time e stop_time;//計算函數執行時間

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

總結及注意事項

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

審核編輯:湯梓紅

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

    關注

    146

    文章

    17892

    瀏覽量

    361772
  • 寄存器
    +關注

    關注

    31

    文章

    5427

    瀏覽量

    123690
  • 操作系統
    +關注

    關注

    37

    文章

    7113

    瀏覽量

    125109
  • 定時器
    +關注

    關注

    23

    文章

    3297

    瀏覽量

    117451
  • Systick
    +關注

    關注

    0

    文章

    63

    瀏覽量

    13516

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

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

收藏 0人收藏

    評論

    相關推薦
    熱點推薦

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

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

    CKS32F4xx系列ETH通信詳解

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

    基于CKS32F4xx系列MCU互補PWM方案

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

    CKS32F4xx系列產品串口DMA傳輸

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

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

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

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

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

    CKS32F4xx系列RNG功能設置

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

    CKS32F4xx系列DAC功能

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

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

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

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

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

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

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

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

    CKS32F4xx系列產品Timer的基本使用方法-定時操作
    的頭像 發表于 11-09 17:41 ?828次閱讀
    <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通信
    的頭像 發表于 10-24 17:12 ?1023次閱讀
    <b class='flag-5'>MCU</b>微課堂 | <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產品SPI通信

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

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

    CKS32F4xx系列FSMC功能簡介

    本課講為大家講解CKS32F4xx系列產品的FSMC應用實例,FSMC全稱是Flexible Static Memory Controller,讀作靈活的靜態存儲控制,顧名思義,MCU
    的頭像 發表于 04-14 15:06 ?1425次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>FSMC功能簡介
    主站蜘蛛池模板: 秘密教学93话恩爱久等了免费 | 99re5久久热在线 | 不良网站进入窗口软件下载免费 | 2020精品国产视 | 国产午夜免费视频片夜色 | 国产亚洲精品久久久久久鸭绿欲 | 老阿姨才是最有味的一区二区 | 亚洲国产AV精品卡一卡二 | 男同志video最新猛男 | 內射XXX韩国在线观看 | 嫩草影院成人 | 欧美丰满熟妇BBB久久久 | 三级叫床震大尺度视频 | 亚洲男人片片在线观看 | 久久人妻少妇嫩草AV蜜桃99 | 国产91专区 | 中国午夜伦理片 | 久久精品成人免费网站 | 欧美激情视频在线观看一区二区三区 | 爱看吧孕妇网 | 青青草A在在观免费线观看 青青草AV国产精品 青青草 久久久 | hd性欧美俱乐部中文 | 羽月希被黑人吃奶dasd585 | 国产亚洲精品线观看不卡 | 午夜色情影院色a国产 | 国产成人精品免费视频大 | 末成年美女黄网站色大片连接 | 国产毛片女人高潮叫声 | 久久艹综合 | 色噜噜视频影院 | 性夜a爽黄爽 | 亚洲欧美日本久久综合网站 | 好姑娘BD高清在线观看免费 | 国产精品久久久久久52AVAV | 快播黄色电影 | 777久久人妻少妇嫩草AV | 免费在线观看一区 | adc我们的永久网址 adc网址在线观看 | 91麻豆精品国产一级 | 国产精品2020观看久久 | 国产亚洲精品久久久久久一区二区 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品