一、STM32的SysTick簡介
SysTick是一個24位的系統(tǒng)節(jié)拍定時器system tick timer,SysTick,具有自動重載和溢出中斷功能,所有基于Cortex_M3處理器的微控制器都可以由這個定時器獲得一定的時間間隔。
systick的作用:
在單任務(wù)引用程序中,因為其架構(gòu)就決定了它執(zhí)行任務(wù)的串行性,這就引出一個問題:當(dāng)某個任務(wù)出現(xiàn)問題時,就會牽連到后續(xù)的任務(wù),進(jìn)而導(dǎo)致整個系統(tǒng)崩潰。要解決這個問題,可以使用實時操作系統(tǒng)(RTOS).
因為RTOS以并行的架構(gòu)處理任務(wù),單一任務(wù)的崩潰并不會牽連到整個系統(tǒng)。這樣用戶出于可靠性的考慮可能就會基于RTOS來設(shè)計自己的應(yīng)用程序。這樣SYSTICK存在的意義就是提供必要的時鐘節(jié)拍,為RTOS的任務(wù)調(diào)度提供一個有節(jié)奏的“心跳”。
微控制器的定時器資源一般比較豐富,比如STM32存在8個定時器,為啥還要再提供一個SYSTICK?原因就是所有基于ARM Cortex_M3內(nèi)核的控制器都帶有SysTick定時器,這樣就方便了程序在不同的器件之間的移植。而使用RTOS的第一項工作往往就是將其移植到開發(fā)人員的硬件平臺上,由于SYSTICK的存在無疑降低了移植的難度。
SysTick定時器除了能服務(wù)于操作系統(tǒng)之外,還能用于其它目的:如作為一個鬧鈴,用于測量時間等。要注意的是,當(dāng)處理器在調(diào)試期間被喊停(halt)時,則SysTick定時器亦將暫停運作。
systick的時鐘選擇:
二、SYSTICK的寄存器
、
三、SYSTICK的配置和函數(shù)解析
SysTick定時器的使用主要有HAL_SYSTICK_Config()函數(shù)和HAL_SYSTICK_CLKSourceConfig()函數(shù)。如下,
/**Configure the Systick interrupt time
*/
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);// 設(shè)置定時時間
/**Configure the Systick
*/
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);//選擇SYSTICK時鐘源,
/* SysTick_IRQn interrupt configuration */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);//設(shè)定優(yōu)先級
Systick定時時間的設(shè)定:
重裝載值=systick 時鐘頻率(Hz)X想要的定時時間(S)
如:時鐘頻率為:AHB的8分頻;AHB=72MHz那么systick的時鐘頻率為72/8MHz=9MHz;要定時1秒,則
重裝載值=9000000X1=9000000;
定時10毫秒
重狀態(tài)值=9000000X0.01=90000
//兩個時鐘源的定義
#define SYSTICK_CLKSOURCE_HCLK_DIV8 (0x00000000U)
#define SYSTICK_CLKSOURCE_HCLK (0x00000004U)
uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb)
{
return SysTick_Config(TicksNumb);
}
\brief System Tick Configuration
\details Initializes the System Timer and its interrupt, and starts the System Tick Timer.
Counter is in free running mode to generate periodic interrupts.
\param [in] ticks Number of ticks between two interrupts.
\return 0 Function succeeded.//返回0,配置成功
\return 1 Function failed.//返回1,失敗
\note When the variable __Vendor_SysTickConfig is set to 1, then the
function SysTick_Config is not included. In this case, the file device.h
must contain a vendor-specific implementation of this function.
*/
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)//超過最大定時值,返回1,SysTick_LOAD_RELOAD_Msk值為2的24方-1;即0xFFFFFF
{
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; //SysTick Current Value Register,設(shè)為0 /* 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內(nèi)部寄存器的結(jié)構(gòu)體定義,和上面圖中的寄存器一一對應(yīng)。
typedef struct
{
__IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */
__IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */
__IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */
__IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */
} SysTick_Type;
SysTick定時器的時鐘源選擇函數(shù)如下:
void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource)
{
/* Check the parameters */
assert_param(IS_SYSTICK_CLK_SOURCE(CLKSource));
if (CLKSource == SYSTICK_CLKSOURCE_HCLK)
{
SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK;//見上面的宏定義,(0x00000004U),即把CLKSOURCE控制寄存器位置1;
}
else
{
SysTick->CTRL &= ~SYSTICK_CLKSOURCE_HCLK;//把CLKSOURCE控制寄存器位置0;
}
}
systick定時器的處理函數(shù)為空,并未執(zhí)行任何動作,如下:
void SysTick_Handler(void)
{
/* USER CODE BEGIN SysTick_IRQn 0 */
/* USER CODE END SysTick_IRQn 0 */
HAL_IncTick();
HAL_SYSTICK_IRQHandler();
/* USER CODE BEGIN SysTick_IRQn 1 */
/* USER CODE END SysTick_IRQn 1 */
}
void HAL_SYSTICK_IRQHandler(void)
{
HAL_SYSTICK_Callback();
}
__weak void HAL_SYSTICK_Callback(void)
{
/* NOTE : This function Should not be modified, when the callback is needed,
the HAL_SYSTICK_Callback could be implemented in the user file
*/
}
注意:當(dāng)主芯片需使用SLEEP模式時,SYSTICK的異常請求會喚醒SLEEP模式,進(jìn)入SLEEP模式前需要把TICKINT控制器置為0。
HAL_SuspendTick();//把TICKINT控制寄存器置0;
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI);
HAL_ResumeTick();//把TICKINT控制寄存器置1;
__weak void HAL_SuspendTick(void)
{
/* Disable SysTick Interrupt */
CLEAR_BIT(SysTick->CTRL,SysTick_CTRL_TICKINT_Msk);//置0
}
__weak void HAL_ResumeTick(void)
{
/* Enable SysTick Interrupt */
SET_BIT(SysTick->CTRL,SysTick_CTRL_TICKINT_Msk);//置1
}
上一篇:STM32的系統(tǒng)滴答定時器(Systick)
下一篇:SysTick功能總結(jié)
推薦閱讀
史海拾趣
API Technologies的初創(chuàng)時期,正值電子行業(yè)的蓬勃發(fā)展期。公司面臨著激烈的市場競爭和技術(shù)革新的挑戰(zhàn)。然而,創(chuàng)始人憑借對電子技術(shù)的深刻理解和敏銳的市場洞察力,成功開發(fā)出了一系列高性能、高可靠性的電子元器件,迅速在市場中占據(jù)了一席之地。同時,公司也積極尋求與合作伙伴的合作,共同推動技術(shù)創(chuàng)新和市場拓展。
ADPOW公司始終將技術(shù)研發(fā)作為公司發(fā)展的核心驅(qū)動力。公司投入大量資源用于研發(fā)新技術(shù)、新產(chǎn)品,不斷推陳出新。同時,公司積極與高校、研究機(jī)構(gòu)等合作,引進(jìn)先進(jìn)技術(shù)和人才,為公司的持續(xù)發(fā)展注入新的活力。
格瑞寶公司致力于功率器件的研發(fā)與銷售,其產(chǎn)品線不斷豐富和完善。從最初的MOSFET產(chǎn)品系列,到后來逐漸擴(kuò)展到DIODE、BJT、IC集成電路等多個領(lǐng)域,格瑞寶始終堅持技術(shù)創(chuàng)新,不斷推出符合市場需求的新產(chǎn)品。特別是在SGT MOST工藝方面,格瑞寶達(dá)到了國內(nèi)領(lǐng)先水平,這一技術(shù)突破不僅提升了產(chǎn)品的性能和質(zhì)量,也進(jìn)一步鞏固了公司在行業(yè)內(nèi)的地位。
品質(zhì)一直是BLT Circuit Services公司的核心競爭力。公司注重品質(zhì)管理,建立了嚴(yán)格的質(zhì)量控制體系,從原材料采購到生產(chǎn)過程中的每一個環(huán)節(jié)都進(jìn)行嚴(yán)格把關(guān)。正是這種對品質(zhì)的執(zhí)著追求,使得BLT Circuit Services的產(chǎn)品在行業(yè)內(nèi)贏得了良好的口碑,為公司贏得了大量的忠實客戶。
隨著公司實力的不斷增強(qiáng),BLT Circuit Services開始積極拓展國內(nèi)外市場。公司積極參加各類行業(yè)展會,與國內(nèi)外同行進(jìn)行深入交流與合作,不斷提升公司的知名度和影響力。同時,公司還根據(jù)市場需求調(diào)整產(chǎn)品策略,推出了一系列符合市場需求的新產(chǎn)品,進(jìn)一步擴(kuò)大了市場份額。
6kV·A逆變器滯環(huán)調(diào)制與單極性SPWM倍頻調(diào)制的比較 來源:電源技術(shù)應(yīng)用 作者:梅 燁 石健將 何湘寧摘要:分析了電流型滯環(huán)調(diào)制和單極性SPWM倍頻調(diào)制逆變器的原理,然后討論了兩種調(diào)制方式下輸出濾波器的設(shè)計,并在此基礎(chǔ)上制作了兩臺6kV·A逆變器樣機(jī)并給出了輸出波形和輸出THD。通過理論分析 ...… 查看全部問答∨ |
|
手機(jī)一般怎么取得internet的數(shù)據(jù)? 手機(jī)一般怎么取得internet的數(shù)據(jù)? 比如我看很多手機(jī)導(dǎo)航地圖上的天氣預(yù)報信息等?? 是否必須建一個WAP之類的網(wǎng)站才行?還是有一個基于什么協(xié)義的接口?還是與地圖數(shù)據(jù)放在一起讓導(dǎo)航引擎去檢索???… 查看全部問答∨ |
問題描述 硬件環(huán)境:Android平臺+CDMA modem; 操作步驟:先設(shè)置APN為uniwap,再進(jìn)行撥號ATD#777,然后開始PPP協(xié)商; 相關(guān)設(shè)置:pap-secrets中內(nèi)容:CARD PDSN CARD * chap-secrets中內(nèi)容:CARD P ...… 查看全部問答∨ |
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\FontPath] "FontPath"="\\\\NandFlash" [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\FontLink\\SystemLink] "Tahoma"="\\\\NandFlash\\\\simsun.ttc,NSi ...… 查看全部問答∨ |
WINCE4.2下使用TL16554發(fā)送字符成功,但有時會出現(xiàn):我發(fā)送1,串口調(diào)試工具顯示的是F1。 但是接收卻沒有任何反應(yīng)。 我的注冊表: ;16c554 base=0x28000000 [HKEY_LOCAL_MACHINE\\Drivers\\BuiltIn\\UART3] "DeviceArrayIndex ...… 查看全部問答∨ |
附上部份代碼. USART_InitTypeDef USART_InitStructure; RCC_Configuration(); GPIO_Configuration(); NVIC_Configuration(); LcdShow_Init(); //StepperMotorInit(); // GPIO_Write(GPIOC,GPIO_ReadOutputData(GPIOC)|LED_var); /* ...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 英飛凌微控制器:以全新實惠套件和強(qiáng)大開發(fā)環(huán)境為開發(fā)者提供支持
- iTOP-i.MX6開發(fā)板設(shè)備數(shù)驅(qū)動Menuconfig的用法
- 迅為IMX6ULL開發(fā)板Qt for Android搭建開發(fā)環(huán)境
- 迅為i.MX8M mini開發(fā)板Windots QT系統(tǒng)開發(fā)環(huán)境搭建
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)使用Gstarwmra(一)
- 迅為IMX8M mini開發(fā)板Linix系統(tǒng)修改默認(rèn)屏幕
- iTOP-4412開發(fā)板支持4G以上文件系統(tǒng)擴(kuò)展
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)設(shè)置開機(jī)自啟動
- 迅為IMX6Q開發(fā)板 Buildroot文件系統(tǒng)mqtt測試
- 汽車電子芯片國產(chǎn)化加速,GS32-DSP能否替代C2000?
- 機(jī)器人行業(yè)大魚:ABB機(jī)器人業(yè)務(wù)分拆上市
- 全球首個L3級架構(gòu)誕生在中國,意味著什么?
- 汽車存儲芯片研究:大模型推動下,主機(jī)廠車用存儲芯片的選擇路徑分析
- 智駕按下急停鍵?正相反,真正的自動駕駛就要來了!
- 國內(nèi)5個固態(tài)電池項目更新動態(tài)
- 機(jī)器人如何防止碰撞?——安全探測器的技術(shù)架構(gòu)與性能突破
- 自動駕駛汽車功能安全與網(wǎng)絡(luò)安全的融合
- 車企虛假宣傳最高判刑2年!智駕、接管成禁用詞?重拳出擊砸向誰?
- 強(qiáng)監(jiān)管下的智能汽車:新規(guī)詳解
- 開關(guān)電源興趣小組招募,只為學(xué)習(xí)開關(guān)電源
- Silicon Labs BG22-EK4108A 開發(fā)套件 用科技連接未來 申請進(jìn)行時!
- 直播已結(jié)束【通過集成隔離數(shù)據(jù)和電源 IC 降低輻射】
- 來聊聊你與MP3的情緣吧!——MP3播放板等你拿
- 【傳感器,開玩啦】第一關(guān):免費申請評測運動和環(huán)境傳感器開發(fā)板
- 人人都愛易電源——轉(zhuǎn)發(fā)有禮!
- 賽靈思工業(yè)與醫(yī)療專題有獎問答
- 評論贏好禮|TI SK-AM64評估套件測評
- TE可穿戴解決方案助你打造暖心大白,答題贏TTI好禮
- 我國電力市場化改革和能源低碳轉(zhuǎn)型的關(guān)系
- 南方能源監(jiān)管局探索電力現(xiàn)貨市場監(jiān)管制度體系
- 國家電網(wǎng):發(fā)力“新基建” 特高壓建設(shè)火力全開
- 體現(xiàn)機(jī)器人的價值,機(jī)器人讓高空作業(yè)更安全
- 機(jī)器人在抗疫上也要記上一功
- 基于51單片機(jī)的大氣壓溫度檢測系統(tǒng)
- 基于51單片機(jī)智能熱水器控制系統(tǒng)設(shè)計
- 基于51單片機(jī)的銀行排隊呼叫系統(tǒng)設(shè)計
- iPhone 13和芯片需求強(qiáng)勁 臺積電第三季度營收創(chuàng)歷史新高
- 基于51單片機(jī)的光照強(qiáng)度檢測系統(tǒng)
- 電源控制芯片的外置MOS管調(diào)整電路
- 異步FIFO結(jié)構(gòu)及FPGA設(shè)計
- 51單片機(jī)之keil下載問題
- Vivado工程源碼大瘦身
- 2011如何設(shè)計小信號諧振放大討論
- 【轉(zhuǎn)帖】一文讀懂光柵式傳感器
- 請DX指導(dǎo)一二:NMAKE : U1073: don't know how to make SC2440_SDHCBase.lib
- 最近閑來無事,調(diào)試了一下時鐘芯片DS1302程序,挺好使
- 至2020年全球互聯(lián)終端達(dá)330億部
- 最后一天!有獎直播—TE Connectivity的智能建筑解決方案