chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用STM32單片機(jī)systick來實現(xiàn)延時定時功能

電子設(shè)計 ? 來源:CSDN博主 ? 作者:hurryddd ? 2021-02-14 06:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、前言

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

pIYBAF_9XjWAZY1uAAQTsF9Rra4795.png

2、systick配置注意事項

使用CubeMX配置生成的代碼中,會自動生成一個 SystemClock_Config() 的函數(shù),用于配置單片機(jī)時鐘,其中就會配置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中斷,調(diào)用 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 */
            }

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

__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;	  //為系統(tǒng)時鐘的1/1000000  	
	SysTick->LOAD   = nus*fac_us; 			      //時間加載	  		 
	SysTick->VAL    = 0x00;        			      //清空計數(shù)器
	SysTick->CTRL  |= SysTick_CTRL_ENABLE_Msk ;	  //開始倒數(shù)	  
	do
	{
		temp = SysTick->CTRL;
	}
	while((temp & 0x01) &&! (temp&(1 << 16)));	 //等待時間到達(dá)   
	SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;	 //關(guān)閉計數(shù)器
	SysTick->VAL = 0X00;      					 //清空計數(shù)器	 
}

2、如果想用systick座系統(tǒng)的時鐘節(jié)拍,需要開啟systick中斷,可以直接調(diào)用 SysTick_Config 來配置,也可以使用 HAL_Init 來配置,HAL_Init 配置最終也會調(diào)用 SysTick_Config 函數(shù)

 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的中斷中調(diào)用 osSystickHandler 和 HAL_IncTick

void SysTick_Handler(void)
{
	osSystickHandler();//為OS提供系統(tǒng)時鐘節(jié)拍
	HAL_IncTick();//為HAL庫提供時鐘基準(zhǔn)
}

編輯:hfy

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

    關(guān)注

    6074

    文章

    45457

    瀏覽量

    667101
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5601

    瀏覽量

    129574
  • 定時器
    +關(guān)注

    關(guān)注

    23

    文章

    3365

    瀏覽量

    122382
  • STM32單片機(jī)
    +關(guān)注

    關(guān)注

    59

    文章

    553

    瀏覽量

    60459
  • Systick
    +關(guān)注

    關(guān)注

    0

    文章

    67

    瀏覽量

    13931
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    CW32系統(tǒng)滴答SysTick定時器詳解

    _CTRL_TICKINT_Msk| SysTick_CTRL_ENABLE_Msk; 設(shè)置SysTick IRQ中斷使能,并開啟SysTick定時器 4.
    發(fā)表于 01-21 07:20

    編寫簡單高效單片機(jī)匯編程序

    獨(dú)立的任務(wù),這樣既能減少代碼重復(fù),也便于維護(hù)和調(diào)試。 計時模塊:利用單片機(jī)定時器,精確控制時鐘的秒脈沖。 顯示模塊:用循環(huán)或查表法實現(xiàn)不同的時間顯示,這能減少不必要的分支跳轉(zhuǎn)指令
    發(fā)表于 11-24 07:00

    使用系統(tǒng)定時SysTick實現(xiàn)精確延時微秒和毫秒函數(shù)

    到 0 時,將從RELOAD 寄存器中自動重裝載定時初值,開始新一輪計數(shù)。使用內(nèi)核的SysTick定時實現(xiàn)
    發(fā)表于 11-20 07:12

    PWM、定時器、SysTick 區(qū)別及應(yīng)用場景

    單片機(jī)和嵌入式開發(fā)中,經(jīng)常會遇到PWM(脈寬調(diào)制)、定時器、SysTick(系統(tǒng)滴答定時器)這幾個詞。很多初學(xué)者容易把它們混為一談,以為都是“定時
    的頭像 發(fā)表于 11-17 10:53 ?418次閱讀
    PWM、<b class='flag-5'>定時</b>器、<b class='flag-5'>SysTick</b> 區(qū)別及應(yīng)用場景

    SysTick系統(tǒng)滴答定時器簡介

    SysTick—系統(tǒng)定時器是屬于CM33內(nèi)核中的一個外設(shè),內(nèi)嵌在NVIC中。系統(tǒng)定時器是一個24bit的向下遞減的計數(shù)器,計數(shù)器每計數(shù)一次的時間為 1/SYSCLK,一般我們設(shè)置系統(tǒng)時鐘SYSCLK等于 200MHz。當(dāng)重裝載數(shù)
    的頭像 發(fā)表于 09-23 09:50 ?1493次閱讀
    <b class='flag-5'>SysTick</b>系統(tǒng)滴答<b class='flag-5'>定時</b>器簡介

    單片機(jī)怎么驅(qū)動電機(jī)?

    在各類自動化設(shè)備和智能裝置中,電機(jī)是重要的執(zhí)行部件,而單片機(jī)作為控制核心,需要通過特定的方式驅(qū)動電機(jī)運(yùn)轉(zhuǎn)。單片機(jī)驅(qū)動電機(jī)并非直接連接即可,而是要根據(jù)電機(jī)類型和功率,搭配合適的驅(qū)動電路,才能實現(xiàn)穩(wěn)定
    的頭像 發(fā)表于 07-25 09:31 ?574次閱讀

    第十二章 SysTick——系統(tǒng)定時

    本章介紹了W55MH32的SysTick系統(tǒng)定時器,它是24位遞減計數(shù)器,含4個寄存器,可配置定時、中斷,用于產(chǎn)生時基 等。
    的頭像 發(fā)表于 05-22 17:16 ?952次閱讀
    第十二章 <b class='flag-5'>SysTick</b>——系統(tǒng)<b class='flag-5'>定時</b>器

    C51單片機(jī)及C語言知識點必備秘籍

    單片機(jī)關(guān)鍵知識點一覽: 系列一 1:單片機(jī)簡敘 2:單片機(jī)引腳介紹 3:單片機(jī)存儲器結(jié)構(gòu) 4:第一個單片機(jī)小程序 5:
    發(fā)表于 05-15 14:00

    新概念51單片機(jī)C語言教程入門、提高、開發(fā)、拓展全攻略

    庫函數(shù)實現(xiàn)流水燈 第2篇 內(nèi)外部資源操作篇 3.1 數(shù)碼管顯示原理 3.2 數(shù)碼管靜態(tài)顯示 3.3 數(shù)碼管動態(tài)顯示 3.4 中斷概念 3.5 單片機(jī)定時器中斷 4.1 獨(dú)立鍵盤檢測 4.2 矩陣鍵盤
    發(fā)表于 04-15 13:57

    STM32F10xxx單片機(jī)編程手冊

    電子發(fā)燒友網(wǎng)站提供《STM32F10xxx單片機(jī)編程手冊.pdf》資料免費(fèi)下載
    發(fā)表于 04-14 14:56 ?17次下載

    STM32F103x8 STM32F103xB單片機(jī)數(shù)據(jù)手冊

    STM32F103x8STM32F103xB單片機(jī)數(shù)據(jù)手冊
    發(fā)表于 04-14 14:55 ?8次下載

    0STM32中的SysTick是個啥?咋用?(可下載)

    Cortex-Mx內(nèi)核內(nèi)部包含了一個SysTick定時器,SysTick是一個24位的倒計數(shù)定時器,當(dāng)計到0時,將從RELOAD寄存器中自動重裝載
    發(fā)表于 04-01 14:52 ?0次下載

    瑞薩MCU RA8系列教程:RA8單片機(jī)SysTick使用描述

    ? 每個Cortex-M內(nèi)核都集成了一個SysTick模塊,那是因為這個模塊幾乎是單片機(jī)項目必備的一個(定時器)功能。 不管是最新的Cortex-M85內(nèi)核,還是經(jīng)典的Cortex-M
    的頭像 發(fā)表于 03-27 14:27 ?1757次閱讀
    瑞薩MCU RA8系列教程:RA8<b class='flag-5'>單片機(jī)</b><b class='flag-5'>SysTick</b>使用描述

    STM32單片機(jī)最小系統(tǒng)電路設(shè)計

    單片機(jī)最小系統(tǒng)是指用最少的電路組成單片機(jī)可以工作的系統(tǒng),通常最小系統(tǒng)包含:電源電路、時鐘電路、復(fù)位電路、調(diào)試/下載電路,對于STM32還需要啟動選擇電路??傊?,剛開始如果不太懂電路的話,就抄別人的電路,然后自己拼湊。
    的頭像 發(fā)表于 03-12 14:09 ?1.9w次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>單片機(jī)</b>最小系統(tǒng)電路設(shè)計

    MH32F103A單片機(jī) 低價替代STM32,硬件完美兼容 主頻可達(dá)216M

    、I2C、UART、USB 2.0全速串行通信接口、CAN總線控制器以及SDIO接口。 MH32F103A單片機(jī)可用于替代STM32103,替換簡單,功能更強(qiáng),價格更低。 應(yīng)用場景 MH32F103A
    的頭像 發(fā)表于 02-14 16:14 ?1057次閱讀
    MH32F103A<b class='flag-5'>單片機(jī)</b> 低價替代<b class='flag-5'>STM32</b>,硬件完美兼容 主頻可達(dá)216M