https://m.toutiao.com/is/F2RmKMr/?=51單片機(jī)入門(mén)教程 https://m.toutiao.com/is/F2RmKMr/?=51單片機(jī)入門(mén)教程 中斷是為使單片機(jī)具有對(duì)外部或者內(nèi)部隨機(jī)發(fā)生的事件實(shí)時(shí)處理而設(shè)置的。 把自己想象成單片機(jī)的CPU,你正在洗衣服,但是忽然快遞小哥給你打電話(huà)讓你去拿快遞,于是你停下洗衣服去拿快遞了??爝f小哥的電話(huà)就是中斷信號(hào),告訴你有其他的事情須要先去做,其次你去拿快遞就相當(dāng)于中斷之后要去處理的事情。 51單片機(jī)有五個(gè)中斷源 一.INT0——外部中斷0 二.INT1——外部中斷1 三.T0——定時(shí)器/計(jì)數(shù)器0中斷 四.T1——定時(shí)器/計(jì)數(shù)器1中斷
文章相對(duì)比較長(zhǎng),字?jǐn)?shù)比較多,大家可以先打開(kāi)頭像關(guān)注我,之后慢慢看,///插播一條:我自己在今年年初錄制了一套還比較系統(tǒng)的入門(mén)單片機(jī)教程,想要的同學(xué)找我拿就行了免費(fèi)的,私信我就可以哦~點(diǎn)我頭像左下角黑色字體加我也能領(lǐng)取哦。最近比較閑,帶做畢設(shè),帶學(xué)生參加省級(jí)或以上比賽/// 定時(shí)器的定時(shí)計(jì)算 時(shí)鐘周期定義為時(shí)鐘脈沖的倒數(shù)(時(shí)鐘周期就是單片機(jī)外接晶振的倒數(shù),例如12M的晶振,它的時(shí)長(zhǎng)周期就是1/12000000),是計(jì)算機(jī)中最根本的、最小的時(shí)長(zhǎng)單位。 機(jī)器周期是指完成一個(gè)根本操作所須要的時(shí)長(zhǎng)。機(jī)器周期主要針對(duì)匯編語(yǔ)言而言,在匯編語(yǔ)言下程序的每一條語(yǔ)句執(zhí)行所運(yùn)用的時(shí)長(zhǎng)都是機(jī)器周期的整數(shù)倍,而且語(yǔ)句占用的時(shí)長(zhǎng)是能夠計(jì)算出來(lái),而C語(yǔ)言一條語(yǔ)句的時(shí)長(zhǎng)是確定的。51單片機(jī)系列在其規(guī)范架構(gòu)下一個(gè)機(jī)器周期是12個(gè)時(shí)鐘周期,也就是12/11059200秒。此時(shí)有不少增強(qiáng)型的51單片機(jī),其速度都比快速,有的1個(gè)機(jī)器周期即是4個(gè)時(shí)鐘周期,有的1個(gè)機(jī)器周期就即是1個(gè)時(shí)鐘周期,也就是說(shuō)大體上其速度能夠到達(dá)規(guī)范51架構(gòu)的3倍或12倍。由于項(xiàng)目中運(yùn)用的是規(guī)范的51單片機(jī),機(jī)器周期是12個(gè)時(shí)鐘周期。 再講解下定時(shí)器和計(jì)數(shù)器這兩個(gè)概念。定時(shí)器和計(jì)數(shù)器是單片機(jī)內(nèi)部的同一個(gè)模塊,通過(guò)配置SFR(特殊功能寄存器)能夠達(dá)到兩種不同的功能,大部分情況下是運(yùn)用定時(shí)器功能,因此也主要來(lái)講定時(shí)器功能,計(jì)數(shù)器功能大家自己了解下即可 配套的單片機(jī)進(jìn)修版采用的12M的沒(méi)源晶振,那么時(shí)鐘周期為1/12000000,機(jī)器周期為12/12000000,假設(shè)定時(shí)20ms,那么須要的機(jī)器周期為0.02/(12/12000000)=20000個(gè),依據(jù)二.1小結(jié)講解的須要在定時(shí)器預(yù)裝65536-20000=45536個(gè)值,由于采用的定時(shí)模式1,將45536化為十六進(jìn)制裝載到寄存器TH0和TL0中,45536 / 256=177,45536 % 256=244,將177轉(zhuǎn)化為十六進(jìn)制0XB1裝載到TH0,將244轉(zhuǎn)化為十六進(jìn)制0XF4裝載到TL0。 同理能夠計(jì)算得16位寄存器最大能定時(shí)65536*(12/12000000)≈65ms,一般來(lái)說(shuō)定時(shí)的時(shí)長(zhǎng)盡量取在0~65ms中間值,如本例中定時(shí)器配置的定時(shí)20ms,如需定時(shí)1s,只有定時(shí)循環(huán)50次即可。讀者能夠計(jì)算下定時(shí)50ms須要多大的裝載初值。 注意:當(dāng)采用1一.0592M晶振時(shí),采用類(lèi)似的計(jì)算方式! 定時(shí)器中斷編程 STM32F1的定時(shí)器系統(tǒng)由2個(gè)基本定時(shí)器(TIM6、TIM7)、4個(gè)通用定時(shí)器(TIM2~TIM5)和2個(gè)高級(jí)定時(shí)器(TIM1、TIM8)所組成?;径〞r(shí)器同51單片機(jī)內(nèi)的定時(shí)器類(lèi)似,功能較為簡(jiǎn)單;通用定時(shí)器在其基礎(chǔ)上增加了輸入捕獲與輸出比較功能;高級(jí)定時(shí)器又在通用定時(shí)器基礎(chǔ)上增加了可編程死去互補(bǔ)輸出、重復(fù)計(jì)數(shù)、帶剎車(chē)(斷路)的功能主要針對(duì)于工業(yè)電機(jī)的控制。 2.1 通用定時(shí)器 STM32F1的通用定時(shí)器內(nèi)有一個(gè)16位自動(dòng)重載計(jì)數(shù)器(CNT)由可編程預(yù)分頻器(PSC)驅(qū)動(dòng),其可用于測(cè)量輸入信號(hào)的脈沖寬度(輸入捕獲)或者生產(chǎn)輸出波形(輸出比較和PWM)。使用定時(shí)器預(yù)分頻器和RCC時(shí)鐘控制器預(yù)分頻器,脈沖長(zhǎng)度和波形周期可以在幾微秒到幾毫秒之間調(diào)整,此外每一個(gè)定時(shí)器都是獨(dú)立的,之間不互相共享任何資源。通用定時(shí)器TIM2~TIM5具備如下功能: 16位向上、向下、向上/向下自動(dòng)裝載計(jì)數(shù)器(TIMx_CNT); 16位可編程預(yù)分頻器,計(jì)數(shù)器時(shí)鐘頻率的分頻系數(shù)為1~65535; 4個(gè)獨(dú)立通道(TIMx_CH1~4),通道可以被用作輸入捕獲、輸出比較、PWM生成和單脈沖模式輸出功能; 可以使用外部信號(hào)(TIMx_ETR)控制定時(shí)器,可實(shí)現(xiàn)多個(gè)定時(shí)器互連的同步電路; 發(fā)生更新(計(jì)數(shù)器溢出、初始化)、觸發(fā)時(shí)間(計(jì)數(shù)器啟動(dòng)、停止、初始化或者由內(nèi)部/外部觸發(fā)計(jì)數(shù))、輸入捕獲以及輸出比較事件時(shí)會(huì)產(chǎn)生中斷/DMA請(qǐng)求; 支持針對(duì)定位的增量(正交)編碼器和霍爾傳感器電路; 觸發(fā)輸入作為外部時(shí)鐘或者按周期的電流管理。 2.2 定時(shí)器配置步驟 定時(shí)器相關(guān)的庫(kù)函數(shù)在stm32f10x_tim,c和stm32f10x_tim.h文件中,使用庫(kù)函數(shù)對(duì)定時(shí)器進(jìn)行配置的詳細(xì)步驟如下: 使能定時(shí)器時(shí)鐘; 定時(shí)器是掛載在A(yíng)PB1總線(xiàn)上的設(shè)備,因此使能定時(shí)器可以調(diào)用函數(shù): RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIMx, ENABLE); 初始化定時(shí)器參數(shù),包含了自動(dòng)重裝值,分頻系數(shù),計(jì)數(shù)方式等; 調(diào)用函數(shù):void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); TIM_TimeBaseInitTypeDef為一個(gè)結(jié)構(gòu)體類(lèi)型,包含了定時(shí)器初始化的成員變量: TIM_Prescaler: 時(shí)鐘源經(jīng)過(guò)該預(yù)分頻器后輸出的是定時(shí)器時(shí)鐘,設(shè)置范圍為0~65535; TIM_CouterMode: 可設(shè)置為T(mén)IM_CounterMode_Up(向上)、TIM_CounterMode_Down(向下)以及中心對(duì)齊計(jì)數(shù)模式; TIM_Period:設(shè)置定時(shí)器自動(dòng)重載計(jì)數(shù)值,范圍為0~65536; TIM_ClockDivision: 時(shí)鐘分頻因子,設(shè)置定時(shí)器時(shí)鐘CK_INT頻率與數(shù)字濾波器采樣時(shí)鐘頻率分頻比; TIM_RepetitionCounter: 重復(fù)計(jì)數(shù)器,簡(jiǎn)單的控制PWM輸出個(gè)數(shù)。 設(shè)置定時(shí)器中斷類(lèi)型,使能定時(shí)器; 調(diào)用函數(shù):void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState); TIM_IT 用來(lái)設(shè)置定時(shí)器中斷類(lèi)型,包含TIM_IT_Update(更新中斷)、TIM_IT_Trigger(觸發(fā)中斷)以及輸入捕獲中斷等等; FunctionalState 用來(lái)使能或使能定時(shí)器中斷,ENABLE和DISABLE。 設(shè)置定時(shí)器中斷優(yōu)先級(jí),使能定時(shí)器中斷通道; 對(duì)NVIC初始化,如前一節(jié)中所示。 開(kāi)啟定時(shí)器; 調(diào)用函數(shù):void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState); 編寫(xiě)定時(shí)器中斷服務(wù)函數(shù) 由于定時(shí)器中斷類(lèi)型有很多,因此在中斷服務(wù)函數(shù)中需要通過(guò)狀態(tài)寄存器的值來(lái)判斷此次中斷屬于哪一種類(lèi)型,然后再執(zhí)行相應(yīng)的用戶(hù)程序。 2.3 應(yīng)用示例 本次實(shí)驗(yàn)通過(guò)TIM4定時(shí)器的更新中斷控制LED燈實(shí)現(xiàn)不斷閃爍的功能,詳細(xì)的代碼如下所示; time.h time.c main.c 對(duì)單片機(jī)感興趣的朋友可以找我,我錄制了一些關(guān)于單片機(jī)的入門(mén)教程,有需要的童鞋找我拿就像,免費(fèi)的,私信我“林老師”就可以拿~點(diǎn)擊打開(kāi)我的頭像就能領(lǐng)取 |
|