日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 程序員小哈
[導讀]在與傳感器或者模塊的總線進行通信的時候,常常需要使用到精確延時,一般我們會封裝幾個常用延時函數, 下面我們以STM32F103芯片為例,詳細介紹一下STM32下一種精確延時函數的實現: 時鐘樹 下圖中紫色的 to Cortex System timer(MHz)就是Systick的時鐘頻率

在與傳感器或者模塊的總線進行通信的時候,常常需要使用到精確延時,一般我們會封裝幾個常用延時函數 下面我們以STM32F103芯片為例,詳細介紹一下STM32下一種精確延時函數的實現:


時鐘樹

下圖中紫色的 to Cortex System timer(MHz)就是Systick的時鐘頻率;



SYSTICK原理

SysTick 是一個24位的倒計數定時器,當計到0時,將從RELOAD寄存器中自動重裝載定時初值并繼續(xù)計數,且同時觸發(fā)中斷。只要不把它在SysTick控制及狀態(tài)寄存器中的使能位清除,就永不停息。
SysTick 的最大使命,就是定期地產生異常請求,作為系統(tǒng)的時基,產生一個周期性的中斷。


Systick定時器的四個寄存器:

CTRL: Systick控制和狀態(tài)寄存器
LOAD: Systick重裝載寄存器
VAL: Systick當前值寄存器
CALIB: Systick校準值寄存器 (不常用,可忽略)



/** @addtogroup CMSIS_CM3_SysTick CMSIS CM3 SysTick memory mapped structure for SysTick @{*/typedef struct{ __IO uint32_t CTRL; /*!< Offset: 0x00 SysTick Control and Status Register */ __IO uint32_t LOAD; /*!< Offset: 0x04 SysTick Reload Value Register */ __IO uint32_t VAL; /*!< Offset: 0x08 SysTick Current Value Register */ __I uint32_t CALIB; /*!< Offset: 0x0C SysTick Calibration Register */} SysTick_Type;




SysTick->CTRL寄存器:

CLKSOURCE-時鐘源[2]: select the clock soruce, 0 : AHB / 8, 1 : AHB.

0:STCLK=外部時鐘源HCLK(AHB總線時鐘)/8=72M/8 = 9M  

1:FCLK=內核時鐘=72M

FCLK:空閑運行時鐘



SysTick-> LOAD寄存器:



SysTick-> VAL寄存器:



#include "delay.h"
static u8 fac_us=0; //us延時倍乘數 static u16 fac_ms=0; //ms延時倍乘數 //初始化延遲函數//SYSTICK的時鐘固定為HCLK時鐘的1/8,即SYSTICK=SYSCLK/8//SYSCLK:系統(tǒng)時鐘void delay_init(){ SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //選擇外部時鐘 HCLK/8
fac_us=SystemCoreClock/8000000; //SYSTICK時鐘為9M(即8分頻)時,fac_us=9,即SysTick倒數9個數,耗時1us fac_ms=(u16)fac_us*1000; //非OS下,代表每個ms需要的systick時鐘數 }
//查詢SysTick->CTRL寄存器bit0是否為1,當為1時,說明倒計時時間到;//整個延時方法中,不進入SysTick中斷;//延時nus//nus為要延時的us數. void delay_us(u32 nus){ u32 temp; SysTick->LOAD=nus*fac_us; //延時時間加載 SysTick->VAL=0x00; //清空計數器 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //開始倒數 //do while 判斷就是 systick 使能(bit0)位為 1 且(bit16)為1的時候等待結束 do { temp=SysTick->CTRL; }while((temp&0x01)&&!(temp&(1<<16))); //等待時間到達 SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //關閉計數器 SysTick->VAL =0X00; //清空計數器 }
//延時nms//注意nms的范圍//SysTick->LOAD為24位寄存器,所以,最大延時為://nms<=0xffffff*8*1000/SYSCLK//SYSCLK單位為Hz,nms單位為ms//對72M條件下,nms<=1864void delay_ms(u16 nms){ u32 temp; SysTick->LOAD=(u32)nms*fac_ms; //時間加載(SysTick->LOAD為24bit) 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; //清空計數器 }



有了上面函數實現,我們就可以在程序中進行精準延時了,比如delay_us(50);
在剛進入delay_us函數的時候,先計算好這段延時需要等待的SysTick計數次數,這里為50*9(假設系統(tǒng)時鐘為72MHz,因為systick的頻率為系統(tǒng)時鐘頻率的1/8,那么systick每增加1,就是1/9us),然后我們就一直讀取SysTick->CTRL寄存器,當該寄存器bit16的值為1時,說明倒計時了50*9個SysTick,即說明延時50us時間到了。

參考資料:

【正點原子】MiniSTM32開發(fā)板資料


喜歡請關注微信公眾號:程序員小哈

有啥想玩的模塊,留言給我,咱們一起玩


免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉