一、SysTick
Sys-系統(tǒng),Tick-滴答聲,系統(tǒng)滴答滴答很形象地表示了它是一個(gè)系統(tǒng)節(jié)拍器。SysTick 是一個(gè)集成在Cortex內(nèi)核里的24位的倒計(jì)數(shù)定時(shí)器,當(dāng)計(jì)到0時(shí),將從RELOAD 寄存器中自動(dòng)重裝載定時(shí)初值。只要不把它在SysTick 控制及狀態(tài)寄存器中的使能位清除,就永不停息。
SysTick的作用。
SysTick主要有以下幾個(gè)作用:
1、產(chǎn)生操作系統(tǒng)的時(shí)鐘節(jié)拍;
當(dāng)RTOS以并行的架構(gòu)處理任務(wù),單一任務(wù)的崩潰并不會(huì)牽連到整個(gè)系統(tǒng)。這樣用戶(hù)出于可靠性的考慮可能就會(huì)基于RTOS來(lái)設(shè)計(jì)自己的應(yīng)用程序。這樣SYSTICK存在的意義就是提供必要的時(shí)鐘節(jié)拍,為RTOS的任務(wù)調(diào)度提供一個(gè)有節(jié)奏的“心跳”。
2、便于不同處理器之間程序移植
因?yàn)樗械腃M3芯片都帶有這個(gè)定時(shí)器,軟件在不同 CM3器件間的移植工作得以化簡(jiǎn)。
3、作為一個(gè)鬧鈴測(cè)量時(shí)間
可以用作鬧鐘,作為啟動(dòng)一個(gè)特定任務(wù)的時(shí)間依據(jù)。它作為一個(gè)鬧鈴,用于測(cè)量時(shí)間。要注意的是,當(dāng)處理器在調(diào)試期間被喊停(halt)時(shí),則SysTick定時(shí)器亦將暫停運(yùn)作。
二、項(xiàng)目配置
該項(xiàng)目以https://blog.csdn.net/fanxp66/article/details/80227611為基礎(chǔ),對(duì)程序中的延時(shí)替換為使用SysTick來(lái)實(shí)現(xiàn)精準(zhǔn)延時(shí)。
1、將庫(kù)函數(shù)庫(kù)中的"misc.h"頭文件復(fù)制到項(xiàng)目的Libinc文件夾下,將"misc.c"程序文件復(fù)制到Libsrc文件夾下;
2、將"misc.c"文件添加到項(xiàng)目的"Lib"組中;
3、在項(xiàng)目文件夾下新建一個(gè)"Public"文件夾,在項(xiàng)目中添加"Public"組;
4、新建"SysTick.h"文件和"SysTick.c"文件,將"SysTick.c"文件添加到項(xiàng)目的"Public"組中;
5、修改項(xiàng)目配置,將路徑"Public"添加到"C/C++"的"Include Paths"中。
三、編程
在本程序中,利用SysTick進(jìn)行精準(zhǔn)1秒定時(shí),系統(tǒng)時(shí)鐘初始為72MHz,選擇SYSCLK/8分頻后得到的9MHz作為SysTick的輸入計(jì)時(shí)時(shí)鐘,當(dāng)設(shè)置計(jì)數(shù)值為9000000時(shí),實(shí)現(xiàn)1秒定時(shí)。
在使用SysTick時(shí)有查詢(xún)式和中斷方式兩種,使用查詢(xún)方式時(shí),首先為SysTick選擇時(shí)鐘源和設(shè)置計(jì)數(shù)值并啟動(dòng)計(jì)數(shù),然后查詢(xún)計(jì)數(shù)完成狀態(tài)位,狀態(tài)位為1時(shí)表示計(jì)數(shù)完成;使用中斷方式時(shí)要為15號(hào)異常設(shè)置中斷服務(wù)程序處理。這里使用查詢(xún)方式。
SysTick編程用到以下寄存器:
CTRL SysTick 控制和狀態(tài)寄存器
LOAD SysTick 重裝載值寄存器
VAL SysTick 當(dāng)前值寄存器
CALIB SysTick 校準(zhǔn)值寄存器
在"core_cm3.h"文件中定義了:
typedef struct
{
__IO uint32_t CTRL; /*地址偏移: 0x00 SysTick 控制和狀態(tài)寄存器*/
__IO uint32_t LOAD; /*地址偏移: 0x04 SysTick 裝載計(jì)數(shù)值寄存器*/
__IO uint32_t VAL; /*地址偏移: 0x08 SysTick當(dāng)前計(jì)數(shù)值寄存器*/
__I uint32_t CALIB; /*地址偏移: 0x0C SysTick 校準(zhǔn)值寄存器*/
} SysTick_Type;
#define SysTick ((SysTick_Type *)SysTick_BASE) /*SysTick 配置結(jié)構(gòu)體 */
以后就可以通過(guò)對(duì)SysTick結(jié)構(gòu)體指針操作SysTick的寄存器。
1、SysTick編程步驟。
① 為SysTick設(shè)置時(shí)鐘源
在STM32的庫(kù)函數(shù)文件中有"misc.h"頭文件和"misc.c"程序文件定義了相應(yīng)的宏和庫(kù)函數(shù)。
在"misc.h"頭文件有定義:
#define SysTick_CLKSource_HCLK_Div8 ((uint32_t)0xFFFFFFFB)
#define SysTick_CLKSource_HCLK ((uint32_t)0x00000004)
在"misc.c"程序文件定義函數(shù)
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
{
assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));
if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
{
SysTick->CTRL |= SysTick_CLKSource_HCLK; /*將CTRL寄存器的位2設(shè)為1*/
}
else
{
SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8; /*將CTRL寄存器的位2設(shè)為0*/
}
}
在本程序中使用8分頻的系統(tǒng)時(shí)鐘,所以調(diào)用函數(shù)如下:
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
② 為SysTick 裝載計(jì)數(shù)值寄存器設(shè)置計(jì)數(shù)值;
③ 對(duì)SysTick當(dāng)前計(jì)數(shù)值寄存器置0;
④ 通過(guò)對(duì)SysTick的CTRL寄存器的位0置位使能SysTick定時(shí)器。
2、編程實(shí)現(xiàn)
在程序中,為了方便使用,定義了"SysTick.h"頭文件和"SysTick.c"程序文件(這兩個(gè)文件已經(jīng)在前面“項(xiàng)目配置”部分創(chuàng)建)。
"SysTick.h"頭文件內(nèi)容如下:
#ifndef __SysTick__H
#define __SysTick__H
#include "stm32f10x.h"
void SysTick_Init(u8 SYSCLK);
void delay_us(u32 nus);
void delay_ms(u16 nms);
"SysTick.c"程序文件內(nèi)容如下:
#include "SysTick.h"
#include "misc.h"
u8 fac_us = 0;
u16 fac_ms = 0;
void SysTick_Init(u8 SYSCLK)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
fac_us = SYSCLK / 8;
fac_ms = (u16)fac_us*1000;
}
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD = nus * fac_us;
SysTick->VAL = 0;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
do{
temp = SysTick->CTRL;
}while((temp&0x01)&&(!(temp&(1<<16))));
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL = 0;
}
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD = nms * fac_ms;
SysTick->VAL = 0;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
do{
temp = SysTick->CTRL;
}while((temp&0x01)&&(!(temp&(1<<16))));
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL = 0;
}
3、在主函數(shù)中使用定時(shí)
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "led.h"
#include "SysTick.h"
int main()
{
u32 i,j;
//共陽(yáng)數(shù)碼管'0'-'9'顯示碼
u32 LED[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
LED_Init();
SysTick_Init(72); //系統(tǒng)時(shí)鐘72MHz
while(1)
{
for(i=0;i<10;i++)
{
//根據(jù)LED[n]數(shù)組的值決定數(shù)碼管各個(gè)段位的顯示
for(j=0; j<8; j++)
if( ~(LED[i]) & 0x1< PCout(j) = 0; else PCout(j) = 1; delay_ms(1000); } } }
上一篇:使用STM32GPIO讀取按鍵實(shí)現(xiàn)按鍵操作(STM32_08)
下一篇:通過(guò)位帶地址操作GPIO在數(shù)碼管顯示數(shù)字(STM32_05)
推薦閱讀
史海拾趣
在電子行業(yè)快速發(fā)展的同時(shí),AE公司也面臨著來(lái)自市場(chǎng)競(jìng)爭(zhēng)、技術(shù)更新等多方面的挑戰(zhàn)。然而,AE公司憑借其敏銳的市場(chǎng)洞察力和強(qiáng)大的研發(fā)實(shí)力,成功應(yīng)對(duì)了這些挑戰(zhàn)。公司不斷調(diào)整戰(zhàn)略方向,優(yōu)化產(chǎn)品結(jié)構(gòu),提升服務(wù)質(zhì)量,以適應(yīng)市場(chǎng)的變化。同時(shí),AE公司也積極關(guān)注未來(lái)技術(shù)的發(fā)展趨勢(shì),加大在新興領(lǐng)域的投入,為公司的未來(lái)發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。
以上只是AE公司在電子行業(yè)中的部分發(fā)展故事概述,每個(gè)故事都體現(xiàn)了AE公司在技術(shù)創(chuàng)新、市場(chǎng)拓展、合作伙伴關(guān)系等方面的努力和成就。這些故事不僅展示了AE公司的成長(zhǎng)歷程,也反映了整個(gè)電子行業(yè)的發(fā)展變遷。
DLP精工科技公司,一直秉承“品質(zhì)至上”的經(jīng)營(yíng)理念,在DLP技術(shù)產(chǎn)品的設(shè)計(jì)和制造過(guò)程中嚴(yán)格把控品質(zhì)。公司擁有一支專(zhuān)業(yè)的研發(fā)團(tuán)隊(duì)和先進(jìn)的生產(chǎn)設(shè)備,確保每一件產(chǎn)品都符合高標(biāo)準(zhǔn)的質(zhì)量要求。通過(guò)不斷的技術(shù)創(chuàng)新和產(chǎn)品升級(jí),DLP精工科技在電子行業(yè)中樹(shù)立了良好的品牌形象,贏得了消費(fèi)者的信賴(lài)和認(rèn)可。
Delus Corp公司深知持續(xù)創(chuàng)新對(duì)于公司發(fā)展的重要性。因此,公司投入大量資源進(jìn)行研發(fā),并不斷探索新技術(shù)和新材料。同時(shí),公司也高度重視產(chǎn)品質(zhì)量,建立了嚴(yán)格的質(zhì)量管理體系,確保每一件產(chǎn)品都符合高標(biāo)準(zhǔn)的質(zhì)量要求。這些努力使得公司的產(chǎn)品線不斷豐富,產(chǎn)品質(zhì)量得到了廣大客戶(hù)的認(rèn)可。
在發(fā)展過(guò)程中,APLUS Products公司注重與上下游企業(yè)的合作與共贏。公司積極與供應(yīng)商建立良好的合作關(guān)系,確保原材料的質(zhì)量和供應(yīng)的穩(wěn)定性;同時(shí),也與多家知名企業(yè)建立了戰(zhàn)略合作關(guān)系,共同開(kāi)拓市場(chǎng)、分享資源。這些合作不僅提高了公司的運(yùn)營(yíng)效率,也增強(qiáng)了其市場(chǎng)競(jìng)爭(zhēng)力。
隨著國(guó)內(nèi)市場(chǎng)的不斷飽和,APLUS Products公司開(kāi)始尋求國(guó)際化發(fā)展的道路。在XXXX年,公司成功打入歐洲市場(chǎng),并在當(dāng)?shù)亟⒘朔种C(jī)構(gòu)。通過(guò)深入了解歐洲消費(fèi)者的需求和偏好,公司不斷優(yōu)化產(chǎn)品設(shè)計(jì)和營(yíng)銷(xiāo)策略,逐漸贏得了歐洲消費(fèi)者的認(rèn)可和喜愛(ài)。
Quenching the thirst of RF power amps and extending the life Battery life or rather runtime is crucial in portable wireless systems such as cell phones, PDAs, laptop computers, and so on because it ultimately defines the device\'\'s mobility. With decreasing form factors and increasing func ...… 查看全部問(wèn)答∨ |
針對(duì)DCS 對(duì)其供電電源的嚴(yán)格要求,通過(guò)分析在線式靜態(tài)交流不停電電源系統(tǒng)UPS 的性能和工作方式,闡明了選用在線式UPS 是DCS 系統(tǒng)的最優(yōu)電源保證,并結(jié)合曲線圖說(shuō)明了如何選擇UPS 及其配套電池的容量,最后介紹了UPS的日常維護(hù)方法和注意事項(xiàng)。… 查看全部問(wèn)答∨ |
一種輸出電壓4~16V開(kāi)關(guān)穩(wěn)壓電源的設(shè)計(jì) 摘 要: 介 紹 一 種 采 用 半 橋 電 路 的 開(kāi) 關(guān) 電 源 , 其 輸 入 電 壓 為 交 流 220V± 20% , 輸 出 電 壓 為 直 流 4~ 16V, 最 大 電 流 40A, 工 作 頻 率 50kHz。 重 點(diǎn) 介 紹 了 該 電 源 的 設(shè) 計(jì) 思 想 , 工 作 原 理 及 特 ...… 查看全部問(wèn)答∨ |
關(guān)于RS485電能表通訊協(xié)議DL645的探討! 小弟這段時(shí)間在學(xué)習(xí)單片機(jī)的通訊RS485,實(shí)現(xiàn)DL645電能表通訊協(xié)議的程序。畫(huà)了很多流程圖都沒(méi)畫(huà)好(小弟使用匯編編寫(xiě)程序)。請(qǐng)做個(gè)DL645協(xié)議的前輩來(lái)討論下。… 查看全部問(wèn)答∨ |
橋式整流電路中用兩個(gè)二極管串聯(lián)作為一個(gè)任一橋臂中的二極管。請(qǐng)問(wèn)這樣的做法有什么可取之處?… 查看全部問(wèn)答∨ |
有誰(shuí)解決沒(méi)解決winpcap for wince的"Windows CE failed to load the packet capture driver"問(wèn)題啊?… 查看全部問(wèn)答∨ |
本公司為新成立的公司,有了強(qiáng)大的市場(chǎng),現(xiàn)缺乏一批有經(jīng)驗(yàn)和激情的有創(chuàng)業(yè)精神的技術(shù)人員加盟。 我們將給開(kāi)發(fā)人員極大的自由發(fā)揮空間。 深圳市數(shù)訊新通通信有限公司“ShuXun XinTong Communication Equipment Co.,Ltd.” ...… 查看全部問(wèn)答∨ |
|
花了好長(zhǎng)時(shí)間去看系統(tǒng)任務(wù) 但是有一事不明,就是在用quartus 進(jìn)行仿真的時(shí)候 系統(tǒng)任務(wù)起到什么作用 可否將程序中的系統(tǒng)任務(wù)注釋掉 請(qǐng)大俠點(diǎn)亮燈明路!… 查看全部問(wèn)答∨ |
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- 人形機(jī)器人馬拉松背后的思考,兆易創(chuàng)新如何賦能機(jī)器人產(chǎn)業(yè)
- 一種基于STM32的智能柜控制器設(shè)計(jì)
- 小型傾轉(zhuǎn)旋翼機(jī)的無(wú)刷直流電機(jī)驅(qū)動(dòng)器設(shè)計(jì)
- 超高速攝影機(jī)電控系統(tǒng)設(shè)計(jì)
- 基于GPS自動(dòng)授時(shí)的無(wú)線智能控制器的設(shè)計(jì)
- 基于PTR2000的無(wú)線氣象信息采集系統(tǒng)設(shè)計(jì)
- Microchip推出MEC175xB系列器件,為嵌入式控制器引入硬件 抗量子攻擊能力
- 無(wú)人飛行器機(jī)載穩(wěn)定云臺(tái)控制系統(tǒng)的設(shè)計(jì)
- 匠芯創(chuàng)推出面向具身智能高性能實(shí)時(shí)處理器M7000
- 小鵬純視覺(jué)方案:技術(shù)突圍與市場(chǎng)下沉的雙重博弈
- 為什么無(wú)人出租車(chē)能“零”事故,而智能駕駛輔助卻事故頻發(fā)?
- 重磅!一顆要顛覆全球智駕的芯片點(diǎn)亮了!
- 3D視覺(jué)技術(shù)為工業(yè)自動(dòng)化帶來(lái)新“視界”
- 第9講:SiC的加工工藝(1)離子注入
- 直流電機(jī)驅(qū)動(dòng)設(shè)計(jì)初探
- 電動(dòng)農(nóng)機(jī)驅(qū)動(dòng)農(nóng)業(yè)4.0
- 馬斯克:特斯拉人形機(jī)器人明年搭星艦去火星,2028 年上真人
- 直流電機(jī)(DC Motors)
- 適用工業(yè)以太網(wǎng)平臺(tái)開(kāi)發(fā)的一流微處理器
- 英特爾FPGA可編程加速平臺(tái)介紹,走近AI、數(shù)據(jù)中心、基因工程等大咖工程
- “搜器件”小程序又添新功能!
- 直播|基于英特爾® Agilex™ FPGA F-Tile的以太網(wǎng)硬核IP詳解及如何使用oneAPI對(duì)FPGA編程
- 報(bào)名抽取京東卡|2021慕尼黑華南電子展觀眾注冊(cè)進(jìn)行中
- 下載有禮|終于找到秘籍,示波器探頭的選擇和使用就靠它了!
- 愛(ài)“拼”才會(huì)贏 英飛凌柵極驅(qū)動(dòng)IC拼圖闖關(guān) 活動(dòng)開(kāi)始啦!
- Littelfuse 新品賦能電子產(chǎn)品安全可靠并高效, 10+挑戰(zhàn)等你探索!
- 速度與激情,為你私人訂制。R&S攜多功能基礎(chǔ)示波器帶你身臨其境!
- 樂(lè)享愜意春天,TI A8開(kāi)源硬件平臺(tái)體驗(yàn)季!
- 【STM32】中斷和中斷優(yōu)先級(jí)理解
- 東芝推出低功耗有刷直流電機(jī)驅(qū)動(dòng)器IC
- 中國(guó)大陸將成為康寧最大的玻璃基板生產(chǎn)基地
- 推動(dòng)智能手機(jī)對(duì)汽車(chē)連接解決方案發(fā)展 ST加入全球車(chē)聯(lián)聯(lián)盟
- STM32中斷優(yōu)先級(jí)--學(xué)習(xí)心得
- 深圳手機(jī)/ODM公司聯(lián)代美股上市:兩日股價(jià)暴漲2700%市值超50億
- 3月發(fā)布新品一覽:新機(jī)扎堆,缺芯不影響產(chǎn)品上市
- 集微指數(shù)上漲0.55% SK海力士為德國(guó)博世開(kāi)發(fā)存儲(chǔ)芯片
- 諾基亞與聯(lián)想達(dá)成交叉授權(quán)協(xié)議 已經(jīng)就專(zhuān)利訴訟糾紛和解
- 又一家MCU廠商敏矽微宣布漲價(jià)了