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

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

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

3天內不再提示

如何使用STM32單片機systick來實現延時定時功能

電子設計 ? 來源:CSDN博主 ? 作者:hurryddd ? 2021-02-14 06:25 ? 次閱讀

1、前言

CM4內核的處理和CM3一樣,內部都包含了一個SysTick定時器,SysTick 是一個24 位的倒計數定時器,當計到0 時,將從RELOAD 寄存器中自動重裝載定時初值。只要不把它在SysTick 控制及狀態寄存器中的使能位清除,就永不停息。這樣可以用systick來實現延時定時功能,不用再占用系統定時器。systick也多用做系統的時鐘節拍,如freeRTOS等OS,再啟動調度器的時候,就會將systick配置成其系統時鐘,給系統提供心跳。systick中有4個寄存器CTRL、LOAD、VAL、CALIB

pIYBAF_9XjWAZY1uAAQTsF9Rra4795.png

2、systick配置注意事項

使用CubeMX配置生成的代碼中,會自動生成一個 SystemClock_Config() 的函數,用于配置單片機時鐘,其中就會配置systick

void SystemClock_Config()
{
    ...........
    LL_SYSTICK_SetClkSource(LL_SYSTICK_CLKSOURCE_HCLK);
    LL_SetSystemCoreClock(32000000);
#ifndef SYSTICK_IRQ
    LL_Init1msTick(32000000); //使能systick但是不開啟systick中斷
#else
    SysTick_Config(SystemCoreClock / 1000);//使能systick同時開啟systick中斷
#endif
}

但是這里 需要注意的是,是不是需要開啟 systick 中斷!!!!

1、如果只是想用systick來作為延時用,程序不想被中斷打斷,就只需要使能systick而不用開啟systick中斷,調用 LL_Init1msTick 即可

void LL_Init1msTick(uint32_t HCLKFrequency)
    ---> LL_InitTick(HCLKFrequency, 1000U);
        ---> __STATIC_INLINE void LL_InitTick(uint32_t HCLKFrequency, uint32_t Ticks)
            {
                  /* Configure the SysTick to have interrupt in 1ms time base */
                  SysTick->LOAD  = (uint32_t)((HCLKFrequency / Ticks) - 1UL);  /* set reload register */
                  SysTick->VAL   = 0UL;  /* Load the SysTick Counter Value */
                  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
                                   SysTick_CTRL_ENABLE_Msk; /* Enable the Systick Timer */
            }

但是需要自己編寫延時函數,不能使用HAL庫提供的HAL_Delay()。原因如下:HAL_Delay的實現是依靠一個uwTickFreq變量,uwTickFreq是在HAL_IncTick中累加的,需要在 SysTick_Handler中斷函數中周期調用,這樣HAL_Delay才會有一個基準

__weak void HAL_IncTick(void)
{
  uwTick += uwTickFreq;
}
__weak uint32_t HAL_GetTick(void)
{
  return uwTick;
}
__weak void HAL_Delay(uint32_t Delay)
{
  uint32_t tickstart = HAL_GetTick();
  uint32_t wait = Delay;
 
  /* Add a period to guaranty minimum wait */
  if (wait < HAL_MAX_DELAY)
  {
    wait += (uint32_t)(uwTickFreq);
  }
 
  while((HAL_GetTick() - tickstart) < wait)
  {
  }
}

自定義的us延時

void my_delay_us(uint32_t nus)
{		
	uint32_t temp;	
	uint32_t fac_us = SystemCoreClock/1000000;	  //為系統時鐘的1/1000000  	
	SysTick->LOAD   = nus*fac_us; 			      //時間加載	  		 
	SysTick->VAL    = 0x00;        			      //清空計數器
	SysTick->CTRL  |= SysTick_CTRL_ENABLE_Msk ;	  //開始倒數	  
	do
	{
		temp = SysTick->CTRL;
	}
	while((temp & 0x01) &&! (temp&(1 << 16)));	 //等待時間到達   
	SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;	 //關閉計數器
	SysTick->VAL = 0X00;      					 //清空計數器	 
}

2、如果想用systick座系統的時鐘節拍,需要開啟systick中斷,可以直接調用 SysTick_Config 來配置,也可以使用 HAL_Init 來配置,HAL_Init 配置最終也會調用 SysTick_Config 函數

 HAL_Init(void)
    ---> HAL_InitTick(uint32_t TickPriority)
        ---> SysTick_Config(uint32_t ticks)
            {
              if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
              {
                return (1UL);                                                   /* Reload value impossible */
              }
            
              SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */
              NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
              SysTick->VAL   = 0UL;                                             /* 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 (0UL);                                                     /* Function successful */
            }

這樣配置完成之后,還需要再systick的中斷中調用 osSystickHandler 和 HAL_IncTick

void SysTick_Handler(void)
{
	osSystickHandler();//為OS提供系統時鐘節拍
	HAL_IncTick();//為HAL庫提供時鐘基準
}

編輯:hfy

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

    關注

    6039

    文章

    44575

    瀏覽量

    636394
  • 寄存器
    +關注

    關注

    31

    文章

    5357

    瀏覽量

    120635
  • 定時器
    +關注

    關注

    23

    文章

    3251

    瀏覽量

    115003
  • STM32單片機
    +關注

    關注

    59

    文章

    549

    瀏覽量

    58741
  • Systick
    +關注

    關注

    0

    文章

    62

    瀏覽量

    13120
收藏 人收藏

    評論

    相關推薦

    上位如何實現發送參數給單片機單片機保存接收的參數重復運行指定的功能

    ,類似于設定單片機運行指定功能時所需要的參數: 舉例:名稱,功能,上限,下限,參數一,參數二,...,延時。一行代表一個功能。 上位機設定好
    發表于 12-04 08:19

    STM32單片機的特點介紹

    和易用的工具,再配合強大的功能,在行業中享有盛譽。 STM32單片機的特點主要體現在以下幾個方面: STM32擁有強大的內核。它采用了ARM32位Cortex-M3 CPU,最高工作頻
    的頭像 發表于 09-25 17:19 ?1703次閱讀

    基于STM32單片機的智能加濕器設計

    本文介紹了一種基于STM32單片機的智能加濕器。該加濕器配備了DHT11溫濕度傳感器、水位傳感器和濁度傳感器,數據通過單片機處理并顯示在OLED屏幕上。用戶可通過按鍵模塊設置閾值,并在檢測值與設定值
    的頭像 發表于 09-14 08:04 ?1211次閱讀
    基于<b class='flag-5'>STM32</b><b class='flag-5'>單片機</b>的智能加濕器設計

    stm32單片機用什么軟件編程

    STM32單片機是一種廣泛應用于嵌入式系統領域的微控制器,具有高性能、低功耗、豐富的外設接口等特點。要對STM32單片機進行編程,需要選擇合適的軟件工具。 概述
    的頭像 發表于 09-02 10:16 ?1551次閱讀

    stm32單片機引腳介紹及功能

    特點,廣泛應用于工業控制、消費電子、醫療設備、智能家居等領域。本文將介紹STM32單片機的引腳及其功能。 1. 引腳概述 STM32單片機
    的頭像 發表于 09-02 09:38 ?6232次閱讀

    簡述單片機定時器的工作原理

    單片機定時器的工作原理是一個復雜而精細的過程,它涉及到單片機內部的多個組件和機制。
    的頭像 發表于 08-19 18:20 ?1502次閱讀

    stm32單片機的優勢有哪些?

    STM32作為一款強大而多功能單片機,憑借其性能、功能、開發者生態系統以及廣泛的應用領域,成為了眾多單片機中的佼佼者。無論是專業開發者
    發表于 07-29 09:29

    揭秘:單片機硬件與軟件延時之大不同!

    普及一下延時相關概念和分類。硬件延時:指利用具有計數功能的硬件進行延時。比如:定時器(Timer)、實時時鐘(RTC)、系統滴答
    的頭像 發表于 07-25 08:11 ?896次閱讀
    揭秘:<b class='flag-5'>單片機</b>硬件與軟件<b class='flag-5'>延時</b>之大不同!

    基于STM32單片機的聲光控節能燈系統設計

    系統使用STM32單片機進行主控,系統內使用光敏電阻模塊檢測外界的光強,另外通過紅外光電識別模塊進行人體識別,使用聲音傳感器檢測是否有人聲。
    的頭像 發表于 06-27 10:25 ?1619次閱讀
    基于<b class='flag-5'>STM32</b><b class='flag-5'>單片機</b>的聲光控節能燈系統設計

    51、STM32單片機的編程方式一樣嗎?

    STM32和51單片機是兩種常見的單片機系列,它們在硬件架構、性能特點和編程方式等方面有所不同。但是從c語言編程的角度來說,我認為是大同小異的。我們對比一下它們的編程特點:51&am
    的頭像 發表于 05-18 08:04 ?2302次閱讀
    51、<b class='flag-5'>STM32</b><b class='flag-5'>單片機</b>的編程方式一樣嗎?

    STM32單片機最小化系統設計原理

    STM32最小系統,就是能讓STM32單片機能夠正常工作所必須擁有的組成部分的集合,也是STM32單片機正常運行的必要環境。
    發表于 04-23 14:54 ?2906次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>單片機</b>最小化系統設計原理

    Systick到底是用作延時好還是用作定時好?都有什么優缺點?

    功能,作基礎定時用,而不建議用作延時功能,方便后面程序移植. 最好有個定論,方便后面程序的移植,不能各自玩各自的,一個公司里面寫程序的風格和標準需要統一。 想問下各位,
    發表于 04-08 07:37

    基于STM32單片機的瓦斯監測與控制

    本文設計出這一款基于STM32單片機煤礦瓦斯監測控制管理系統,包括甲烷氣體傳感器電路、溫濕度傳感器電路、Wi-Fi模塊電路、報警電路、繼電器控制電路及顯示電路。STM32單片機作為核心
    的頭像 發表于 02-27 08:09 ?1597次閱讀
    基于<b class='flag-5'>STM32</b><b class='flag-5'>單片機</b>的瓦斯監測與控制

    在CYT2B73CAE單片機中使用systick的demo,無法進入systick_handler是什么原因?

    在CYT2B73CAE單片機中使用systick的demo,無法進入systick_handler中。請問這是什么原因?
    發表于 02-02 06:20

    單片機外部中斷和定時器中斷的區別和用法

    單片機外部中斷和定時器中斷在觸發來源、應用場景以及功能特點上存在明顯差異** **。
    的頭像 發表于 01-28 17:35 ?3210次閱讀
    主站蜘蛛池模板: 国产综合视频在线观看一区| 久久中文字幕亚洲| 人妻免费视频公开上传| 凹凸精品视频分类视频| 色尼玛亚洲| 国产在线公开视频| 永久免费在线观看视频| 欧美乱码卡一卡二卡四卡免费| YELLOW在线观看高清视频免费| 日本午夜视频在线| 国产在线观看成人| 57PAO强力打造高清免费| 日韩爽爽影院在线播放| 国产精品丰满人妻AV麻豆| 一边啪啪的一边呻吟声口述| 欧美日韩久久久精品A片| 国产精品一国产精品免费| 4388成人| 久久免费看视频| JEALOUSVUE成熟老师APP| 色综合欧美色综合七久久| 黄页免费观看| free俄罗斯性xxxxhd派对| 性女传奇快播| 男人脱女人衣服吃奶视频| 国产全肉乱妇杂乱视频| 2022国产精品不卡a| 无限资源在线观看完整版免费下载| 快穿之H啪肉| 国产精品无需播放器| 97人人爽人人爽人人人片AV| 香蕉AV福利精品导航| 內射XXX韩国在线观看| 国产女人91精品嗷嗷嗷嗷| 99久久国产综合精品国| 亚洲黄色高清视频| 人人在线碰碰视频免费| 久久亚洲精品成人| 国产一及毛片| 高h全肉图| 99久久全国免费久久爱|