/****************************************************************************
* STM32單片機(jī)SysTick系統(tǒng)滴答定時(shí)器實(shí)驗(yàn)程序
*
*
*
*****************************************************************************/
#ifndef _SYSTICK_H
#define _SYSTICK_H
#include "SysTick.h"
#define SYSTICK_CSR (*((volatile unsigned long *) 0xE000E010))//控制寄存器
#define SYSTICK_LOAD (*((volatile unsigned long *) 0xE000E014))//重載寄存器
#define SYSTICK_VAL (*((volatile unsigned long *) 0xE000E018))//當(dāng)前值寄存器
#define SYSTICK_CALRB (*((volatile unsigned long *) 0xE000E01C)) //校準(zhǔn)值寄存器
unsigned long SysTick_Delay;//全局變量
//配置寄存器
void SysTick_InitStructReadCmd(void)
{
SYSTICK_VAL = 0; //當(dāng)前值寄存器清零
SYSTICK_LOAD = SystemCoreClock / 1000000; //重要部分就在這里 系統(tǒng)72000000 / 100000
SYSTICK_CSR |= 0x06; //先關(guān)閉SysTick使能用的時(shí)候在打開
}
//中斷服務(wù)程序
void SysTick_Hangler(void)
{
SYSTICK_VAL = 0; //當(dāng)前值寄存器清零
if(SysTick_Delay != 0x00)//判斷延時(shí)SysTick_Delay 是否等于0
{
SysTick_Delay--;//減到0結(jié)束
}
}
//延時(shí)函數(shù)
void Delay_10us(unsigned long Countlinef)
{
SYSTICK_CSR |= 0x07; //啟動(dòng)SysTick使能
SysTick_Delay = Countlinef; //把延時(shí)變量賦值SysTick_Delay全局變量
while(SysTick_Delay != 0); //判斷延時(shí)時(shí)間是否到
SYSTICK_CSR |= 0x06; //時(shí)間到關(guān)閉 SysTick使能用的時(shí)候在打開
}
int main(void)
{
SystemInit(); //注意這么是把系統(tǒng)時(shí)鐘設(shè)初始化為 72M主頻,這里是必須的
SysTick_InitStructReadCmd();
while(1)
{
GPIOD->BSRR = 0x00000100;
Delay_10us(1000000) ; //實(shí)現(xiàn)1ms延時(shí)
GPIOD->BRR = 0x00000100;
}
}
//====================================END=============================================//
/* 好了我們開始講解程序1us是怎么實(shí)現(xiàn)的,我們使用時(shí)鐘源為APB時(shí)鐘,APB系統(tǒng)頻率陪配置為72MHZ
SYSTICK_LOAD = SystemCoreClock / 1000000; SysTick重載初值重要的地方就在這里
1:SystemCoreClock 這個(gè)是什么意思,跟蹤庫函數(shù)找到如下:
#ifdef SYSCLK_FREQ_HSE
uint32_t SystemCoreClock = SYSCLK_FREQ_HSE;
#elif defined SYSCLK_FREQ_24MHz
uint32_t SystemCoreClock = SYSCLK_FREQ_24MHz;
#elif defined SYSCLK_FREQ_36MHz
uint32_t SystemCoreClock = SYSCLK_FREQ_36MHz;
#elif defined SYSCLK_FREQ_48MHz
uint32_t SystemCoreClock = SYSCLK_FREQ_48MHz;
#elif defined SYSCLK_FREQ_56MHz
uint32_t SystemCoreClock = SYSCLK_FREQ_56MHz;
#elif defined SYSCLK_FREQ_72MHz
uint32_t SystemCoreClock = SYSCLK_FREQ_72MHz;
#else /*!< HSI Selected as System Clock source */
// uint32_t SystemCoreClock = HSI_VALUE;
/*這里不難看出,我們初始化SystemInit(); 是系統(tǒng)已經(jīng)把SystemCoreClock配置成72M下面就不難理解了,
先看一下計(jì)算公式:T = TICKS * (1/f);
T : 為要計(jì)時(shí)的總時(shí)間。
TICKS :為SYSTICK_LOAD 的輸入?yún)?shù)。
(1/f)為使用時(shí)鐘源的時(shí)鐘周期,f為時(shí)鐘源的時(shí)鐘頻率
使用時(shí)鐘源為AHB時(shí)鐘, 頻率被配置72M;
把SYSTICK_LOAD重載寄存器賦值為 SystemCoreClock / 1000000;呵呵呵大家
發(fā)現(xiàn)了什么,就是72000000 / 1000000 = 72;大家都應(yīng)該知道了72個(gè)時(shí)鐘周期
中斷一次,大家接著看(1/f)是時(shí)鐘周期的時(shí)間。1/72M = 0.13888888888888888888888888888889;
1us誕生了,0.13888888888888888888888888888889*72 = 1;1us哈哈哈大家明白了吧。
//野火資料出問題的地方 ticks=SystemFrequency / 10 000 =720,相當(dāng)于:72000000 / 10000 ;這里少了一個(gè)0 結(jié)果等于 = 7200 不等于720看資料看的糾結(jié)哈哈哈。
這個(gè)程序折磨我1個(gè)星期,沒有吃好睡好,搞明白后我就馬上做上筆記那給大家分享。
*/
//講得簡單易懂,當(dāng)然精確定時(shí)還是要定時(shí)器的
上一篇:使用SysTick的普通計(jì)數(shù)模式對延遲進(jìn)行管理
下一篇:STM32 在RVMDK下簡單延時(shí)計(jì)算
推薦閱讀
史海拾趣
對于27MHz晶體振蕩器電路,網(wǎng)友可能會(huì)提出多種問題,以下是一些常見問題及其詳細(xì)回答:
一、電路設(shè)計(jì)相關(guān)問題
- 如何設(shè)計(jì)一個(gè)簡單的27MHz晶體振蕩器電路?
- 回答:設(shè)計(jì)一個(gè)簡單的27MHz晶體振蕩器電路通常包括晶體本身、兩個(gè)反饋電容、一個(gè)或多個(gè)電阻以及可能的放大元件(如晶體管或集成電路中的振蕩器部分)。例如,可以使用一個(gè)并聯(lián)型晶體振蕩器電路,其中晶體與兩個(gè)電容形成諧振電路,并通過一個(gè)放大元件(如CMOS反相器)提供正反饋以維持振蕩。具體設(shè)計(jì)可參考技術(shù)資料(如華強(qiáng)電子網(wǎng))提供的電路圖,并根據(jù)實(shí)際需要進(jìn)行調(diào)整。
- 如何選擇合適的反饋電容和電阻值?
- 回答:反饋電容和電阻的選擇對振蕩器的穩(wěn)定性和頻率精度至關(guān)重要。電容值通常根據(jù)晶體的規(guī)格和所需的振蕩頻率來確定,而電阻值則用于限制放大器的增益,以防止振蕩器過度放大并產(chǎn)生不穩(wěn)定現(xiàn)象。選擇時(shí),建議參考晶體振蕩器的數(shù)據(jù)手冊或相關(guān)設(shè)計(jì)指南,并結(jié)合實(shí)驗(yàn)測試來找到最佳值。
二、電路性能相關(guān)問題
- 如何減少27MHz晶體振蕩器的諧波失真?
- 回答:諧波失真通常是由于電路中的非線性元件或設(shè)計(jì)不當(dāng)引起的。為了減少諧波失真,可以采取以下措施:
- 選擇低諧波失真的晶體振蕩器。
- 在電路中添加低通濾波器以濾除高頻諧波。
- 優(yōu)化電路設(shè)計(jì),減少非線性元件的使用,并確保電路元件的匹配性。
- 回答:諧波失真通常是由于電路中的非線性元件或設(shè)計(jì)不當(dāng)引起的。為了減少諧波失真,可以采取以下措施:
- 如何提高27MHz晶體振蕩器的頻率穩(wěn)定性?
- 回答:頻率穩(wěn)定性受多種因素影響,包括晶體的物理特性、環(huán)境溫度、電源電壓波動(dòng)等。提高頻率穩(wěn)定性的方法包括:
- 選擇高質(zhì)量的晶體振蕩器,確保其具有較低的頻率漂移和溫度系數(shù)。
- 在電路中添加溫度補(bǔ)償電路,以抵消溫度變化對頻率的影響。
- 使用穩(wěn)定的電源電壓,并在必要時(shí)添加電壓穩(wěn)壓器。
- 優(yōu)化電路布局和接地設(shè)計(jì),減少電磁干擾和噪聲。
- 回答:頻率穩(wěn)定性受多種因素影響,包括晶體的物理特性、環(huán)境溫度、電源電壓波動(dòng)等。提高頻率穩(wěn)定性的方法包括:
三、電路調(diào)試與測試相關(guān)問題
- 如何調(diào)試27MHz晶體振蕩器電路以確保其正常工作?
- 回答:調(diào)試晶體振蕩器電路時(shí),可以按照以下步驟進(jìn)行:
- 檢查電路連接是否正確,確保所有元件都已正確安裝。
- 使用示波器觀察振蕩波形,確認(rèn)其頻率和幅度是否符合要求。
- 調(diào)整反饋電容和電阻值,以優(yōu)化振蕩器的性能和穩(wěn)定性。
- 檢查電源電壓和電流是否穩(wěn)定,并調(diào)整至推薦值。
- 如果發(fā)現(xiàn)諧波失真或其他問題,根據(jù)具體情況采取相應(yīng)的解決措施。
- 回答:調(diào)試晶體振蕩器電路時(shí),可以按照以下步驟進(jìn)行:
- 如何測試27MHz晶體振蕩器的輸出頻率和相位噪聲?
- 回答:測試晶體振蕩器的輸出頻率和相位噪聲通常需要使用專業(yè)的測試設(shè)備,如頻率計(jì)和相位噪聲分析儀。測試時(shí),將振蕩器的輸出連接到測試設(shè)備的輸入端,并設(shè)置適當(dāng)?shù)臏y試參數(shù)。通過測試設(shè)備可以準(zhǔn)確測量振蕩器的輸出頻率和相位噪聲水平,從而評估其性能是否符合要求。
四、其他常見問題
- 27MHz晶體振蕩器適用于哪些應(yīng)用場景?
- 回答:27MHz晶體振蕩器由于其較高的頻率和較好的穩(wěn)定性,廣泛應(yīng)用于無線通信、雷達(dá)系統(tǒng)、電子測量儀器等領(lǐng)域。在這些應(yīng)用場景中,晶體振蕩器作為時(shí)鐘源或頻率基準(zhǔn),為系統(tǒng)提供穩(wěn)定的頻率信號。
- 如何延長27MHz晶體振蕩器的使用壽命?
- 回答:延長晶體振蕩器的使用壽命需要注意以下幾點(diǎn):
- 避免在極端溫度或濕度條件下使用。
- 保持電源電壓穩(wěn)定,避免頻繁波動(dòng)。
- 定期檢查電路連接和元件狀態(tài),及時(shí)更換損壞的元件。
- 避免機(jī)械沖擊和振動(dòng)對晶體振蕩器的影響。
- 選擇質(zhì)量可靠、性能穩(wěn)定的晶體振蕩器產(chǎn)品。
- 回答:延長晶體振蕩器的使用壽命需要注意以下幾點(diǎn):
機(jī)頂盒,全稱為數(shù)字視頻變換盒,是現(xiàn)代家庭娛樂中不可或缺的重要設(shè)備。從廣義上講,機(jī)頂盒是指任何能與電視機(jī)連接的網(wǎng)絡(luò)終端設(shè)備,它不僅是傳統(tǒng)電視信號的接收與轉(zhuǎn)換裝置,更是連接電視與互聯(lián)網(wǎng)的橋梁。
機(jī)頂盒的核心功能在于接收并處理來自各種傳輸介質(zhì)的數(shù)字信號,包括有線電視、衛(wèi)星廣播、地面廣播以及寬帶網(wǎng)絡(luò)等,然后將這些信號轉(zhuǎn)換成電視機(jī)能夠識別的視頻和音頻格式。這一過程涉及信號的接收、解碼和顯示三大環(huán)節(jié),確保了用戶能夠享受到高清乃至超高清的電視節(jié)目。
隨著技術(shù)的不斷進(jìn)步,機(jī)頂盒的功能日益豐富。除了基本的電視播放功能外,現(xiàn)代機(jī)頂盒還具備了網(wǎng)絡(luò)交互能力,支持在線購物、瀏覽網(wǎng)頁、觀看網(wǎng)絡(luò)視頻、玩游戲等多種應(yīng)用。此外,一些先進(jìn)的機(jī)頂盒還集成了人工智能技術(shù),實(shí)現(xiàn)了語音助手、智能推薦等便捷功能,極大地提升了用戶體驗(yàn)。
總的來說,機(jī)頂盒作為家庭娛樂的重要組成部分,不僅豐富了人們的觀看選擇,還通過其強(qiáng)大的網(wǎng)絡(luò)交互能力,為用戶提供了更為廣泛的內(nèi)容和娛樂體驗(yàn)。隨著技術(shù)的不斷升級和市場需求的不斷變化,機(jī)頂盒的未來發(fā)展將更加值得期待。
EVER-WAY公司成立于XX世紀(jì)初,當(dāng)時(shí)電子行業(yè)正處于蓬勃發(fā)展的階段。創(chuàng)始人李明看準(zhǔn)了市場機(jī)遇,決定創(chuàng)立一家專注于電子元器件制造的公司。他帶領(lǐng)一支由幾名工程師組成的小團(tuán)隊(duì),開始了艱苦的創(chuàng)業(yè)之路。初期,公司面臨著資金短缺、技術(shù)落后和市場競爭激烈等多重挑戰(zhàn)。然而,李明和他的團(tuán)隊(duì)?wèi){借堅(jiān)定的信念和不懈的努力,逐漸在市場中站穩(wěn)腳跟。他們不斷優(yōu)化產(chǎn)品性能,提高生產(chǎn)效率,同時(shí)積極拓展國內(nèi)外市場,逐步擴(kuò)大了公司的知名度和影響力。
隨著公司規(guī)模的擴(kuò)大和業(yè)績的增長,安國國際的產(chǎn)品線逐漸從計(jì)算機(jī)外設(shè)產(chǎn)品拓展至消費(fèi)型電子產(chǎn)品和手持便攜裝置。為滿足市場需求,公司不斷推出創(chuàng)新產(chǎn)品,如輸出入裝置暨多媒體圖像處理裝置應(yīng)用控制芯片、網(wǎng)橋控制芯片、網(wǎng)絡(luò)安全保護(hù)裝置等。同時(shí),為提升運(yùn)營效率和靈活性,安國在2015年進(jìn)行了組織調(diào)整和專業(yè)分工,將不同業(yè)務(wù)線分割為多家子公司,使得各業(yè)務(wù)領(lǐng)域能夠更加專注和高效地發(fā)展。
隨著技術(shù)產(chǎn)品的成功推出,Horizon開始積極拓展市場。公司首先在國內(nèi)市場建立了完善的銷售和服務(wù)網(wǎng)絡(luò),通過參加行業(yè)展會(huì)、舉辦技術(shù)研討會(huì)等方式提升品牌知名度。同時(shí),Horizon也意識到國際市場的巨大潛力,逐步在海外設(shè)立分支機(jī)構(gòu),將產(chǎn)品推向全球市場。通過持續(xù)的市場推廣和優(yōu)質(zhì)的客戶服務(wù),Horizon的品牌影響力逐漸增強(qiáng),成為電子行業(yè)內(nèi)備受矚目的新興企業(yè)。
為了尋找新的增長點(diǎn),F(xiàn)iltran Ltd開始探索跨界合作的可能性。公司與一家領(lǐng)先的物聯(lián)網(wǎng)解決方案提供商建立了戰(zhàn)略合作關(guān)系,共同開發(fā)面向智能家居市場的無線連接模塊。這一合作不僅將Filtran Ltd的濾波器技術(shù)應(yīng)用于新的領(lǐng)域,還為公司帶來了全新的市場機(jī)遇。通過跨界合作,F(xiàn)iltran Ltd成功實(shí)現(xiàn)了從單一產(chǎn)品供應(yīng)商向綜合解決方案提供商的轉(zhuǎn)變。
1) 以一種有效的方式學(xué)習(xí)一種編程語言。 2) 快速有效的調(diào)試你的代碼。 3) 時(shí)刻不但學(xué)習(xí)的心態(tài),保持知識的更新。 下面我具體的講一講: 第一步: 以一種有效的方式學(xué)習(xí)一種編程語言 下面我要講的是一種專業(yè)有效的方法來習(xí) ...… 查看全部問答∨ |
|
許多人認(rèn)為,可移植性就是軟件從一個(gè)平臺換到另一個(gè)硬件平臺,仍然能正常運(yùn)行的能力。這種說法是很籠統(tǒng)的,我們在細(xì)想一下,其中至少存在以下幾個(gè)層面: 是否需要修改代碼。 是否需要修改配置。 是否需要重新編譯。 是否能夠 ...… 查看全部問答∨ |
EBOOT中在初始化DM9000之前讀取其ID一直返回錯(cuò)誤,下面是程序: uint8 ReadReg(uint8 offset) { *((volatile uint8 *)(IOBase)) = (uint8)(offset); return ((uint8 ...… 查看全部問答∨ |
如果有時(shí)間的話,考慮做一個(gè)簡化版的TCP/IP TO CAN的網(wǎng)關(guān),畢竟成本優(yōu)勢太明顯了 [ 本帖最后由 dyc1229 于 2010-10-15 13:27 編輯 ]… 查看全部問答∨ |
【低功耗】Altera發(fā)布具有安全特性的低功耗新系列Cyclone III LS FPGA 繼續(xù)擴(kuò)大在低功耗解決方案上的領(lǐng)先優(yōu)勢,Altera公司今天發(fā)布了具有安全特性的低功耗新系列FPGA。新的Altera Cyclone III LS FPGA在單位面積電路板上具有密度最大的邏輯、存儲器和DSP資源。這些器件是功耗最低的FPGA,200K邏輯單元(LE)的靜態(tài)功耗小 ...… 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 神經(jīng)形態(tài)芯片可能是革新機(jī)器人實(shí)時(shí)電機(jī)控制的未來
- 從三個(gè)方面理解ARM嵌入式系統(tǒng)
- 自動(dòng)報(bào)警 基于MCU的家庭防盜報(bào)警系統(tǒng)的設(shè)計(jì)
- 存儲控制器及其訪問外設(shè)的原理
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- 有獎(jiǎng)電源小課堂 | PI 1250V高壓氮化鎵芯片
- 逛村田在線云展廳,了解通信、移動(dòng)、工業(yè)+環(huán)境、健康四大領(lǐng)域的應(yīng)用干貨!
- 答題贏好禮 | TDK專題報(bào)道只等你來(第3期)
- 免費(fèi)申請 | SFH 4713B紅外LED樣片,體驗(yàn)革新性IR:6技術(shù)
- ST有獎(jiǎng)直播 | 75V降壓控制器和隔離降壓方案
- 【搶樓贏禮】聊聊“我眼中的ADI實(shí)驗(yàn)室電路”
- ADI有獎(jiǎng)下載活動(dòng)之19:ADI可編程邏輯控制器(PLC)解決方案(更新版)
- 免費(fèi)申請測評 | Sipeed MAix BiT AIoT 開發(fā)套件,搭載K210、屏幕和攝像頭
- 有獎(jiǎng)直播|ADI電機(jī)控制解決方案
- 古有曹植七步成詩,今有AI三步識人!
- 三舉措齊頭并進(jìn),我國無人機(jī)產(chǎn)業(yè)全速向前!
- 機(jī)器人行業(yè)一周動(dòng)態(tài)速覽(7月13-19日)
- 戴森推出智能吸塵機(jī)器人Dyson 360 Heurist
- 改造升級傳統(tǒng)設(shè)備,機(jī)器視覺領(lǐng)域何時(shí)能夠融入 5G?
- STM8S003F3 使用定時(shí)器來計(jì)算方波周期的方法
- STM8S003F3 內(nèi)部時(shí)鐘初始化以及定時(shí)器做延時(shí)的使用
- STM8S003F3 PWM的使用
- STM8S003F3 內(nèi)部flash調(diào)試
- STM8S003F3 uart的使用