




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)例一:控制燈的亮滅(或者蜂鳴器響,只要連接相應(yīng)端口就可以了):#include "stm8s.h"/頭文件#define ulong unsigned long/void delay(ulong i) ulong j; for(j=0;j<i;j+) ; /延時(shí)函數(shù)void main(void)/主函數(shù) GPIO_DeInit(GPIOD); GPIO_Init(GPIOD, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST); while(1) GPIO_WriteHigh(GPIOD, GPIO_PIN_1); delay(10000)
2、; delay(10000); delay(10000); GPIO_WriteLow(GPIOD, GPIO_PIN_1); delay(10000); delay(10000); delay(10000); 第二步:控制燈按照一定的頻率閃爍:頻率可以使用時(shí)鐘!Stm8啟動(dòng)時(shí),主時(shí)鐘默認(rèn)為HSIRC時(shí)鐘的8分頻,HSIRC是可以提供一個(gè)低成本的16MHz時(shí)鐘源,#include "stm8s.h"/頭文件void CLK_Configuration(void);void main(void)/主函數(shù) GPIO_DeInit(GPIOD); GPIO_Init(GPIOD,
3、 GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST); CLK_Configuration(); while(1) GPIO_WriteReverse(GPIOD, GPIO_PIN_1); void CLK_Configuration(void) /* Fmaster = 16MHz */ CLK_HSIPrescalerConfig( CLK_PRESCALER_HISDIV1);例題三:燈閃亮的同時(shí)蜂鳴器響#include "stm8s.h"/頭文件#define ulong unsigned long/void delay(ulong i)
4、 ulong j; for(j=0;j<i;j+) ; /延時(shí)函數(shù));void main(void)/主函數(shù) GPIO_DeInit(GPIOD); GPIO_DeInit(GPIOB); GPIO_Init(GPIOD, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST); GPIO_Init(GPIOB, GPIO_PIN_0,GPIO_MODE_OUT_PP_LOW_FAST ); while(1) GPIO_WriteHigh(GPIOD, GPIO_PIN_1); delay(10000); delay(10000); GPIO_WriteLow(GP
5、IOD, GPIO_PIN_1); delay(10000); delay(10000); GPIO_WriteHigh(GPIOB, GPIO_PIN_0); delay(10000); delay(10000); GPIO_WriteLow(GPIOB, GPIO_PIN_0); delay(10000); delay(10000); 時(shí)鐘控制器功能強(qiáng)大而且靈活易用。其目的在于使用用戶在獲得最好性能的同時(shí),亦能保證消耗的功率最低。用戶可以獨(dú)立管理各個(gè)時(shí)鐘源,并將它們分配到CPU或者各個(gè)外設(shè)。主時(shí)鐘和CPU的時(shí)鐘均帶有分頻器。主時(shí)鐘源:四種時(shí)鐘源可以作為主時(shí)鐘源:1.124MHz高速外部晶體
6、振蕩器(HSE)2.最大24MHz高速外部時(shí)鐘信號(hào)(HSE user-ext)3.16MHz高速內(nèi)部RC振蕩器(HSI)4.128KHz低速內(nèi)部RC(LSI)各個(gè)時(shí)鐘源可獨(dú)立打開或者關(guān)閉,從而優(yōu)化功耗。HSE:高速外部時(shí)鐘信號(hào),由兩個(gè)時(shí)鐘源產(chǎn)生:HSE外部晶體/陶瓷諧振器;HSE用戶外部有源時(shí)鐘。(為了最大限度的減少輸出失真和減少啟動(dòng)失真的穩(wěn)定時(shí)間,諧振器和負(fù)載電容應(yīng)盡可能的靠近諧振器引腳。負(fù)載電容值應(yīng)根據(jù)所選的諧振器進(jìn)行調(diào)整。)外部1至24MHz的振蕩器其優(yōu)點(diǎn)在于能夠產(chǎn)生精確的占空比為50%的主時(shí)鐘信號(hào)。 為使系統(tǒng)快速啟動(dòng),復(fù)位后時(shí)鐘控制器自動(dòng)使用HSI的8分頻(HSI/8)做為主時(shí)鐘。其原
7、因?yàn)镠SI的穩(wěn)定時(shí)間短,而8分頻可保證系統(tǒng)在較差的VDD條件下安全啟動(dòng)。 時(shí)鐘設(shè)置的目的到底是什么?時(shí)鐘設(shè)置肯定會(huì)出現(xiàn)中斷?貌似是這樣的:運(yùn)用合適的時(shí)鐘配置可以使得功耗降低,有時(shí)候計(jì)數(shù)頻率很大,需要很大的計(jì)數(shù)或者怎么樣時(shí),需要使用其他的時(shí)鐘,即非默認(rèn)的時(shí)鐘!暫且這樣解釋!例題四:利用中斷按鍵控制燈的亮滅。#include "stm8s.h"/頭文件void main(void)/主函數(shù) GPIO_DeInit(GPIOD); GPIO_DeInit(GPIOB); GPIO_Init(GPIOD, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST)
8、; GPIO_Init(GPIOB, GPIO_PIN_0, GPIO_MODE_IN_FL_IT); EXTI_DeInit(); EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB , EXTI_SENSITIVITY_FALL_ONLY );/定義端口的外部中斷 enableInterrupts();/這個(gè)一定不能丟,中斷使能 while(1) #pragma vector=6/中斷編號(hào)+2_interrupt void EXIT_PORTB_IRQHander(void) if(GPIO_ReadInputData(GPIOB)&GPIO_PIN
9、_0)=0x00)/檢查是否按下GPIO_WriteReverse(GPIOD,GPIO_PIN_1);/默認(rèn)的時(shí)鐘為HSI的8分頻,即上電默認(rèn)的頻率。中斷設(shè)置為上升沿觸發(fā):則程序會(huì)有微小的變化:#include "stm8s.h"/頭文件void main(void)/主函數(shù) GPIO_DeInit(GPIOD); GPIO_DeInit(GPIOB); GPIO_Init(GPIOD, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST); GPIO_Init(GPIOB, GPIO_PIN_0, GPIO_MODE_IN_FL_IT); EXT
10、I_DeInit(); EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB ,EXTI_SENSITIVITY_RISE_ONLY );/定義端口的外部中斷 enableInterrupts();/這個(gè)一定不能丟,中斷使能 while(1) #pragma vector=6/中斷編號(hào)+2_interrupt void EXIT_PORTB_IRQHander(void) if(GPIO_ReadInputData(GPIOB)&GPIO_PIN_0)=0x01)/檢查是否按下GPIO_WriteReverse(GPIOD,GPIO_PIN_1);時(shí)鐘這里
11、到底是怎么回事???LSI等如何配置,配置時(shí)鐘做什么用的?例題五:設(shè)計(jì)一個(gè)程序使得當(dāng)按鍵按下后發(fā)光二極管按照不同的頻率閃爍。分析:不同的頻率閃爍,可以設(shè)置為按照100,500,1000,2000Hz的頻率閃爍。定時(shí)器timer4的使用:該定時(shí)器由一個(gè)帶可編程預(yù)分頻器的8位可位自動(dòng)重載的向上計(jì)數(shù)器所組成,它可以用來做時(shí)基發(fā)生器,具有溢出中斷功能。Timer6同時(shí)鐘/觸發(fā)信號(hào)控制器一起用于定時(shí)器同步和級(jí)聯(lián)。Time4的主要功能包括:1.8位向上計(jì)數(shù)的自動(dòng)重載計(jì)數(shù)器(既然是向上計(jì)數(shù),那么計(jì)算初值時(shí)?)2.3位可編程的與分配器(可在運(yùn)行中修改),提供1,2,4,8,16,32,64,和128這8種分頻比
12、例。3.中斷產(chǎn)生在計(jì)數(shù)器更新時(shí):計(jì)數(shù)器溢出。Timer6的主要功能:1.8位向上計(jì)數(shù)的自動(dòng)重載計(jì)數(shù)器2.3位可編程的與分配器(可在運(yùn)行中修改),提供1,2,4,8,16,32,64,和128這8種分頻比例。3.用于和外部信號(hào)相連和定時(shí)器級(jí)聯(lián)的同步電路4.中斷產(chǎn)生:在計(jì)數(shù)器更新時(shí):計(jì)數(shù)器溢出在觸發(fā)信號(hào)輸入時(shí)。Timer4和timer6中斷:該定時(shí)器的時(shí)鐘源是內(nèi)部時(shí)鐘(Fmaster)。該時(shí)鐘源是直接連接到CK_PSC時(shí)鐘的,CK_PSC時(shí)鐘通過預(yù)分頻器分頻后給定時(shí)器提供CK_CNT時(shí)鐘。預(yù)分頻器功能如下:1. 預(yù)分頻器是基于由一個(gè)3位寄存器(在TIMX_PSCR寄存器中)來控制的一個(gè)7位的計(jì)數(shù)器
13、。由于該控制寄存器是帶緩沖的所以它可以在系統(tǒng)運(yùn)行中被改變??梢苑诸l計(jì)速器的時(shí)鐘頻率為1到128之間的2的任意次冪。預(yù)分頻器的值是通過一個(gè)預(yù)裝載寄存器來載入的。一旦LS字節(jié)被寫入時(shí),保存當(dāng)前要被使用值影子寄存器的值就被立即載入。對(duì)TIMX_PSCR寄存器的讀操作是訪問預(yù)裝載寄存器,因此在讀的過程中沒有什么特別要注意的地方。中斷使能寄存器:TIMx_IER位7:保留,須保持清零位6:TIE:觸發(fā)中斷使能:0:觸發(fā)中斷禁止;1:觸發(fā)中斷使能;位5:1 保留,須保持清零位0:UIE:更新中斷使能:0:更新中斷禁止;1:更新中斷使能狀態(tài)寄存器1(TIMX_SR1)位7:保留,須保持清零位6:TIF:觸發(fā)
14、中斷標(biāo)志位(此位在觸發(fā)事件發(fā)生時(shí)(檢測(cè)到TRGI信號(hào)的有效沿,在選擇門控模式時(shí)硬件置位??梢杂绍浖辶?。 )0:無觸發(fā)事件產(chǎn)生;1:觸發(fā)事件發(fā)生,此位當(dāng)寄存器更新時(shí)由硬件置位(在timer4中該位保留)位5:1 保留,須保持清零位0:UIF:更新中斷標(biāo)志(此位在更新事件發(fā)生時(shí)由硬件置位??梢杂绍浖辶悖?:無更新事件產(chǎn)生;1:跟新事件發(fā)生。此位當(dāng)寄存器更新時(shí)由硬件置位。1. 如果TIM4_CR1中的UDIS=0,則發(fā)生在計(jì)數(shù)器溢出時(shí)。2. 如果TIM4_CR1中的UDIS=0和URS=0,則發(fā)生在通過設(shè)置TIM4_EGR的UG位產(chǎn)生軟件重新初始化計(jì)數(shù)時(shí)。時(shí)間產(chǎn)生寄存器(TIM4_EGR)位7:
15、保留,須保持清零位0:TG:觸發(fā)事件產(chǎn)生:可用軟件對(duì)該位置位以產(chǎn)生一個(gè)觸發(fā)事件。該位由硬件自動(dòng)清零。0:無觸發(fā)發(fā)生;1:TIM4_SR1中TIF標(biāo)志被置1.如果TIE位為1則產(chǎn)生中斷。(注意:在TIM4中該位保留)位5:1保留,須保持清零位0:UG更新事件產(chǎn)生 0:無更新事件產(chǎn)生;1:計(jì)數(shù)器重新初始化并產(chǎn)生寄存器更新。(注意:分頻計(jì)數(shù)器也同時(shí)清零)計(jì)數(shù)器(TIMX_CNTR)位7:0 計(jì)數(shù)器值預(yù)分頻寄存器(TIMX_PSCR)位7:3 保留,須保持清零位2:0 PSC 分頻器值 分頻器的值除分頻時(shí)鐘CLK_PSC 計(jì)數(shù)器時(shí)鐘頻率: PSC中包含了每次更新事件(包含當(dāng)通過TIM4_EGR寄存器的
16、UG產(chǎn)生的更新事件)需要加載到實(shí)際分頻寄存器的值。這就意味著為了使新的分頻器值啟用,必須產(chǎn)生一個(gè)更新事件。自動(dòng)重裝載寄存器(TIMX_ARR)位7:0 自動(dòng)重裝載的值一、16位通用定時(shí)器(TIM2,TIM3,TIM5)1通用定時(shí)器TIM2有3個(gè)通道,TIM3有2個(gè)通道,TIM5與TIM2類似但是帶有兩個(gè)額外的寄存器,用于定時(shí)器的同步和級(jí)聯(lián)。通用寄存器由帶有可編程預(yù)分頻器的16位自動(dòng)裝載計(jì)數(shù)器構(gòu)成。2適合的場(chǎng)合: 基本的定時(shí);測(cè)量輸入信號(hào)的脈沖長度(輸入捕獲);產(chǎn)生輸出波形(輸出比較,PWM和單脈沖);與其他定時(shí)器或者外部信號(hào)同步(外部時(shí)鐘,復(fù)位,觸發(fā)和使能信號(hào))(僅針對(duì)帶有TIM5的芯片)定時(shí)
17、器可由內(nèi)部時(shí)鐘驅(qū)動(dòng)。3TIM2和TIM3的主要功能:16位向上計(jì)數(shù)和自動(dòng)裝載計(jì)數(shù)器;4位可編程預(yù)分頻器,計(jì)數(shù)器時(shí)鐘頻率的分頻系數(shù)為132768之間2的冪3個(gè)獨(dú)立通道:輸入捕獲,輸出比較,PWM生成(邊緣對(duì)齊模式),單脈沖模式輸出如下事件發(fā)生時(shí)產(chǎn)生中斷:更新:計(jì)數(shù)器向上溢出,計(jì)數(shù)器初始化(通過軟件);輸入捕獲;輸出比較;4TIM5的主要功能: 16位向上計(jì)數(shù)和自動(dòng)裝載計(jì)數(shù)器;4位可編程預(yù)分頻器,計(jì)數(shù)器時(shí)鐘頻率的分頻系數(shù)值為132768之間2的冪;3個(gè)獨(dú)立通道:輸入捕獲;輸出比較;PWM生成(邊緣對(duì)齊模式);但脈沖模式輸出;如下事件發(fā)生時(shí)產(chǎn)生中斷:更新:計(jì)數(shù)器向上溢出,計(jì)數(shù)器初始化(通過軟件)輸入
18、捕獲;輸出比較;5時(shí)基單元包含:16位向上計(jì)數(shù)器;預(yù)分頻器;16位自動(dòng)裝載寄存器沒有重復(fù)寄存器。計(jì)數(shù)器使用內(nèi)部時(shí)鐘Fmaster,它由CK_PSC提供,并經(jīng)過預(yù)分頻器分頻產(chǎn)生計(jì)數(shù)器時(shí)鐘CK_CNT。預(yù)分頻器的實(shí)現(xiàn):預(yù)分頻器基于4位寄存器的16位計(jì)數(shù)器,由于寄存器帶有緩沖器所有可以隨時(shí)修改預(yù)分頻的數(shù)值。計(jì)數(shù)器可以取值為1到32768質(zhì)檢單餓2的冪進(jìn)行分頻。計(jì)數(shù)器時(shí)鐘頻率的計(jì)算公式: fCK_CNT = fCK_PSC/2(PSCR3:0) 預(yù)分頻器的值由預(yù)裝載寄存器寫入。一旦寫入預(yù)裝載寄存器的LS字節(jié)時(shí),帶有當(dāng)前使用值的影子寄存器就被寫入了新的值。 新的預(yù)分頻值在下一個(gè)周期時(shí)生效(在下一個(gè)更新事
19、件之后)。對(duì)TIMX_PSCR寄存器的讀操作通過預(yù)裝載寄存器實(shí)現(xiàn),因此可以隨時(shí)讀取而不受限制。5.計(jì)數(shù)器的操作時(shí)鐘/觸發(fā)控制器(這個(gè)以及相應(yīng)的TIMX_CR2和TIMX_SMCR寄存器僅僅存在于TIM5中)捕獲/比較通道:輸入部分:定時(shí)器有兩個(gè)輸入通道,通道1在內(nèi)部鏈接到比較器。6.中斷:通用定時(shí)器包括4個(gè)中斷源:捕獲/比較3中斷;捕獲/比較2中斷;捕獲/比較1中斷;更新中斷使用中斷功能時(shí),需要先設(shè)置TIMX_IER寄存器的CC3IE位或CC2IE或者CC1IE位使能中斷請(qǐng)求。通過軟件設(shè)置TIMX_EGR寄存器的相應(yīng)位也能產(chǎn)生不同的中斷源。7.TIM2,3,5寄存器控制寄存器1(TIMX_CR
20、1)位7 ARPE 自動(dòng)重裝載允許位 0:TIMX_ARR寄存器沒有預(yù)裝載寄存器可以緩沖;可以直接對(duì)其進(jìn)行寫操作;1:TIMX_ARR寄存器通過預(yù)裝載寄存器可以緩沖。位3 OPM 單脈沖模式 0:在發(fā)生更新事件時(shí),計(jì)數(shù)器不停止;1:當(dāng)發(fā)生下一次更新事件時(shí)(清除CNE),計(jì)數(shù)器停止;位2 URS 更新請(qǐng)求源 0:當(dāng)更新請(qǐng)求源使能時(shí),只要寄存器被更新了就產(chǎn)生更新中斷;1 當(dāng)更新請(qǐng)求使能時(shí),只有計(jì)數(shù)器溢出才產(chǎn)生更新中斷。位1 UDIS 禁止更新 軟件通過該位允許或者禁止UEV事件的產(chǎn)生 0:只要計(jì)數(shù)器溢出,或者產(chǎn)生了軟件更新,或者通過時(shí)鐘/觸發(fā)模式控制器產(chǎn)生了硬件復(fù)位,就產(chǎn)生更新事件。 1:不產(chǎn)生更
21、新事件,影子寄存器(ARR,PSC,CRRX)保持它們的值,如果設(shè)置了UG則計(jì)數(shù)器和預(yù)分頻器被重新初始化。位0 CEN 使能計(jì)數(shù)器 0:禁止計(jì)數(shù)器 1:使能計(jì)數(shù)器8.控制寄存器2(TIM5_CR2)該寄存器只有TIM5中才有。觸發(fā)從模式控制寄存器(TIM5_SMCR)中斷使能寄存器(TIMX_IER)位7 TIE 觸發(fā)中斷使能 0:觸發(fā)中斷禁用 1:觸發(fā)中斷使能 位5:4 保留位3 CC3IE 允許捕獲/比較3中斷 0:禁止捕獲/比較3中斷;1:允許捕獲/比較3中斷位2 CC2IE 允許捕獲/比較2中斷 0:禁止捕獲/比較2中斷;1:允許捕獲/比較2中斷位1 CC1IE 允許捕獲/比較1中斷
22、0:禁止捕獲/比較1中斷;1:允許捕獲/比較1中斷位0 UIE 允許更新中斷 0:禁止更新中斷;1:允許更新中斷;狀態(tài)寄存器1(TIMX_SR1)位7 保留位6 TIF 觸發(fā)中斷標(biāo)志 當(dāng)發(fā)生觸發(fā)事件時(shí)該位由硬件設(shè)置置1(在TRGI信號(hào)上檢測(cè)到有效的觸發(fā)沿,當(dāng)選擇門控模式時(shí),上升及下降沿都有效)。它由軟件清0.0:沒有觸發(fā)事件發(fā)生;1:觸發(fā)中斷懸掛 注意在TIM2和TIM3中該位保留。位5:4 保留位3 CC3IF 捕獲/比較3中斷標(biāo)志 位2 CC2IF 捕獲/比較2中斷標(biāo)志位1 CC1IF 捕獲/比較1中斷標(biāo)志 如果通道CC1配置位輸出模式,當(dāng)計(jì)數(shù)器值與比較值匹配時(shí)該位由硬件置1,由軟件清零。
23、0:無匹配發(fā)生;1:TIMX_CNT的值與TIMX_CCR1的值匹配如果通道CC1配置位輸入模式,它由軟件清零或通過讀TIMX_CCR1L清零0:無輸入捕獲產(chǎn)生;1:計(jì)數(shù)器值已被捕獲(拷貝)到TIMX_CCR1(在IC1上檢測(cè)到所選極性相同的邊沿)。位0 UIF 更新中斷標(biāo)志 當(dāng)產(chǎn)生更新事件該位由硬件置1,軟件清零。0:無更新事件發(fā)生;1:更新事件等待響應(yīng)。當(dāng)寄存器更新時(shí)該位由硬件置1;若TIMX_CR1寄存器的UDIS=0.計(jì)數(shù)器溢出;若TIMX_CR1寄存器的UDIS=0,URS=0,當(dāng)TIMX_EGR寄存器的UG=1時(shí)產(chǎn)生更新事件(軟件對(duì)計(jì)數(shù)器CNT重新初始化)狀態(tài)寄存器2(TIMX_S
24、R2)位7:4 保留位3 CC3OF 捕獲/比較3過捕獲標(biāo)志位2 CC2OF 捕獲/比較2過捕獲標(biāo)志位1 CC1OF 捕獲/比較1過捕獲標(biāo)志 只有當(dāng)對(duì)應(yīng)通道設(shè)置為輸入捕獲模式下,才會(huì)被硬件置位;軟件寫0清除該位。0:沒有檢測(cè)到過捕獲;1:CC1IF標(biāo)志已經(jīng)置位的情況下,計(jì)數(shù)器的值又被捕獲到TIMX_CCR1寄存器中。位0 保留 硬件強(qiáng)制為0事件發(fā)生寄存器(TIMX_EGR)位7 保留位6 TG 產(chǎn)生觸發(fā)事件 該位由軟件置1,用于產(chǎn)生一個(gè)觸發(fā)事件,由硬件自動(dòng)清00:無動(dòng)作;1:TIMX_SR1的TIF標(biāo)志被置1.如果TIE為1則產(chǎn)生一個(gè)中斷。注意在TIM2和TIM3中,該位保留位5:4 保留位3
25、 CC3G 產(chǎn)生捕獲/比較3事件位2 CC2G 產(chǎn)生捕獲/比較2事件位1 CC1G 產(chǎn)生捕獲/比較1事件 該位由軟件置1,用于產(chǎn)生一個(gè)捕獲/比較事件,由硬件自動(dòng)清零。0:無動(dòng)作;1:在通道CC1上產(chǎn)生一個(gè)捕獲/比較事件若通道CC1設(shè)置位輸出:設(shè)置CC1IF=1,若開啟對(duì)應(yīng)的中斷,則產(chǎn)生相應(yīng)的中斷。若通道CC1配置位輸入:當(dāng)前的計(jì)數(shù)器值捕獲至TIMX_CCR1寄存器,設(shè)置CC1IF=1,若開啟對(duì)應(yīng)的中斷,則產(chǎn)生相應(yīng)的中斷。若CC1IF已經(jīng)為1,則設(shè)置CC1OF=1.位0 UG 產(chǎn)生更新事件 該位由軟件置1,由硬件自動(dòng)清零0:無動(dòng)作;1:重新初始化計(jì)數(shù)器,并產(chǎn)生一個(gè)更新事件。注意預(yù)分頻器的計(jì)數(shù)器也
26、被清零。計(jì)數(shù)器高位(TIMX_CNTRH)位7:0 CNT 計(jì)數(shù)器的值(MSB)計(jì)數(shù)器低位(TIMX_CNTRL)位7:0 CNT 計(jì)數(shù)器的值(LSB)預(yù)分頻器(TIMX_PSCR)位7:4 保留位3:0 PSC 預(yù)分頻器的值 預(yù)分頻器對(duì)輸入的CK_PSC時(shí)鐘進(jìn)行分頻 計(jì)數(shù)器的時(shí)鐘頻率Fck_cnt等于Fck_psc/2的(PSC3:0).PSC7:4由硬件清零。PSC包含了當(dāng)更新事件產(chǎn)生時(shí)裝入當(dāng)前預(yù)分頻器的值(包括由于清除TIMX_EGR寄存器的UG位產(chǎn)生的計(jì)數(shù)器清除事件)。這意味著如要新的預(yù)分頻值生效,必須產(chǎn)生更新事件。自動(dòng)裝載寄存器高位(TIMX_ARRH)位7:0 ARR 自動(dòng)裝載值(
27、MSB)ARR是自動(dòng)裝載的值,擋自動(dòng)裝載的值為0時(shí),計(jì)數(shù)器不工作。自動(dòng)裝載寄存器低位(TIMX_ARRL)位7:0 ARR 自動(dòng)裝載值(LSB)例題:利用定時(shí)器定時(shí)使得燈閃亮,按鍵按下就停止閃亮,再次按下,又閃亮:#include "stm8s.h"#define uchar unsigned char#define uint unsigned int#define ulong unsigned longunsigned int temp;void delay(ulong i) ulong j; for(j=0;j<i;j+) ;void CLK_Configurat
28、ion(void);void GPIO_Configuration(void);void TIM2_Configuration(void);void EXIT_Configuration(void);void main(void) CLK_Configuration(); GPIO_Configuration(); EXIT_Configuration(); TIM2_Configuration(); enableInterrupts(); while (1) void CLK_Configuration(void)/* Fmaster = 16MHz */ CLK_HSIPrescalerC
29、onfig(CLK_PRESCALER_HSIDIV1);void GPIO_Configuration(void) /* GPIOD reset */ GPIO_DeInit(GPIOB); GPIO_DeInit(GPIOD); /* Configure PD1 (LED1) as output push-pull low (led switched on)10MHZ */ GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST); GPIO_Init(GPIOB, GPIO_PIN_1, GPIO_MODE_IN_FL_IT);voi
30、d TIM2_Configuration(void) TIM2_DeInit();/設(shè)置timer2定時(shí)器 TIM2_TimeBaseInit( TIM2_PRESCALER_2048 ,8000); /*對(duì)TIM2時(shí)鐘進(jìn)行預(yù)分頻得到計(jì)數(shù)時(shí)鐘 */ TIM2_ITConfig(TIM2_IT_UPDATE ,ENABLE); /*允許更新中斷使能*/ / TIM2_GenerateEvent(TIM2_EVENTSOURCE_UPDATE); /*設(shè)置事件源為更新事件*/ / TIM2_UpdateRequestConfig(TIM2_UPDATESOURCE_REGULAR );/*更新請(qǐng)求
31、使能,只有當(dāng)計(jì)數(shù)器溢出時(shí)產(chǎn)生更新中斷*/ / TIM2_SelectOnePulseMode( TIM2_OPMODE_REPETITIVE ); /*發(fā)生更新事件時(shí)計(jì)數(shù)器不停止*/ TIM2_SetCounter(65536-8000); /*16位向上計(jì)數(shù)器初值*/ TIM2_Cmd(ENABLE); /*使能計(jì)數(shù)器*/ void EXIT_Configuration(void) EXTI_DeInit(); EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB, EXTI_SENSITIVITY_FALL_ONLY);/*TIM2定時(shí)/向上溢出中斷編號(hào)為13
32、,中斷編號(hào)+2*/ #pragma vector=15 _interrupt void TIM2_UPD_OVF_BRK_IRQHandler (void) GPIO_WriteReverse(GPIOD, GPIO_PIN_2); TIM2_ClearITPendingBit(TIM2_IT_UPDATE);/通用寄存器TIM2,3,5既然這樣應(yīng)該沒有太大的區(qū)別#pragma vector=6_interrupt void EXIT_PORTB_IRQHander(void)if(GPIO_ReadInputData(GPIOB)&GPIO_PIN_1)=0x00) temp+; i
33、f(temp%2=0) TIM2_Cmd(ENABLE); else TIM2_Cmd(DISABLE); /*程序?qū)崿F(xiàn)功能:按鍵控制燈以不同的頻率閃動(dòng)*/*即實(shí)現(xiàn)功能為,發(fā)光二極管分別以1S,2S,3S的周期閃爍*/#include "stm8s.h"#define uchar unsigned char#define uint unsigned int#define ulong unsigned longunsigned int temp;void delay(ulong i) ulong j; for(j=0;j<i;j+) ;void CLK_Configur
34、ation(void);void GPIO_Configuration(void);void TIM2_Configuration(void);void EXIT_Configuration(void);void main(void) CLK_Configuration(); GPIO_Configuration(); EXIT_Configuration(); TIM2_Configuration(); enableInterrupts(); while (1) void CLK_Configuration(void) CLK_HSIPrescalerConfig(CLK_PRESCALER
35、_HSIDIV1);void GPIO_Configuration(void) GPIO_DeInit(GPIOB); GPIO_DeInit(GPIOD); GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST); GPIO_Init(GPIOB, GPIO_PIN_1, GPIO_MODE_IN_FL_IT);void TIM2_Configuration(void) TIM2_DeInit();/設(shè)置timer2定時(shí)器 TIM2_TimeBaseInit( TIM2_PRESCALER_2048 ,8000); /*對(duì)TIM2時(shí)鐘進(jìn)
36、行預(yù)分頻得到計(jì)數(shù)時(shí)鐘 */ TIM2_ITConfig(TIM2_IT_UPDATE ,ENABLE); /*允許更新中斷使能*/ / TIM2_GenerateEvent(TIM2_EVENTSOURCE_UPDATE); /*設(shè)置事件源為更新事件*/ / TIM2_UpdateRequestConfig(TIM2_UPDATESOURCE_REGULAR );/*更新請(qǐng)求使能,只有當(dāng)計(jì)數(shù)器溢出時(shí)產(chǎn)生更新中斷*/ / TIM2_SelectOnePulseMode( TIM2_OPMODE_REPETITIVE ); /*發(fā)生更新事件時(shí)計(jì)數(shù)器不停止*/ TIM2_SetCounter(655
37、36-8000); /*16位向上計(jì)數(shù)器初值*/ TIM2_Cmd(ENABLE); /*使能計(jì)數(shù)器*/ void EXIT_Configuration(void) EXTI_DeInit(); EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB, EXTI_SENSITIVITY_FALL_ONLY);/*TIM2定時(shí)/向上溢出中斷編號(hào)為13,中斷編號(hào)+2*/ #pragma vector=15 _interrupt void TIM2_UPD_OVF_BRK_IRQHandler (void) GPIO_WriteReverse(GPIOD, GPIO_PI
38、N_2); TIM2_ClearITPendingBit(TIM2_IT_UPDATE);/通用寄存器TIM2,3,5既然這樣應(yīng)該沒有太大的區(qū)別#pragma vector=6_interrupt void EXIT_PORTB_IRQHander(void)if(GPIO_ReadInputData(GPIOB)&GPIO_PIN_1)=0x00) temp+; if(temp%2!=0) TIM2_Cmd(DISABLE); else TIM2_Cmd(ENABLE);/注意使能位的開通一定不要丟掉了 switch(temp) case 2:TIM2_TimeBaseInit( T
39、IM2_PRESCALER_2048 ,8000);break; case 4:TIM2_TimeBaseInit( TIM2_PRESCALER_4096 ,8000);break; case 6:TIM2_TimeBaseInit( TIM2_PRESCALER_8192 ,8000);break; default:TIM2_TimeBaseInit( TIM2_PRESCALER_2048 ,8000),temp=1; 以下這個(gè)程序與上相同:/*程序?qū)崿F(xiàn)功能:按鍵控制燈以不同的頻率閃動(dòng)*/#include "stm8s.h"#define uchar unsigned
40、 char#define uint unsigned int#define ulong unsigned longunsigned int temp;void delay(ulong i) ulong j; for(j=0;j<i;j+) ;void CLK_Configuration(void);void GPIO_Configuration(void);void TIM2_Configuration(void);void EXIT_Configuration(void);void main(void) CLK_Configuration(); GPIO_Configuration()
41、; EXIT_Configuration(); TIM2_Configuration(); enableInterrupts(); while (1) void CLK_Configuration(void)/* Fmaster = 16MHz */ CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);void GPIO_Configuration(void) /* GPIOD reset */ GPIO_DeInit(GPIOB); GPIO_DeInit(GPIOD); /* Configure PD1 (LED1) as output push-p
42、ull low (led switched on)10MHZ */ GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST); GPIO_Init(GPIOB, GPIO_PIN_1, GPIO_MODE_IN_FL_IT);void TIM2_Configuration(void) TIM2_DeInit();/設(shè)置timer2定時(shí)器 TIM2_TimeBaseInit( TIM2_PRESCALER_2048 ,8000); /*對(duì)TIM2時(shí)鐘進(jìn)行預(yù)分頻得到計(jì)數(shù)時(shí)鐘 */ TIM2_ITConfig(TIM2_IT_UPDATE ,EN
43、ABLE); /*允許更新中斷使能*/ /TIM2_GenerateEvent(TIM2_EVENTSOURCE_UPDATE); /*設(shè)置事件源為更新事件*/ / TIM2_UpdateRequestConfig(TIM2_UPDATESOURCE_REGULAR );/*更新請(qǐng)求使能,只有當(dāng)計(jì)數(shù)器溢出時(shí)產(chǎn)生更新中斷*/ / TIM2_SelectOnePulseMode( TIM2_OPMODE_REPETITIVE ); /*發(fā)生更新事件時(shí)計(jì)數(shù)器不停止*/ TIM2_SetCounter(65536-8000); /*16位向上計(jì)數(shù)器初值*/ TIM2_Cmd(ENABLE); /*使能
44、計(jì)數(shù)器*/ void EXIT_Configuration(void) EXTI_DeInit(); EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB, EXTI_SENSITIVITY_FALL_ONLY);/*TIM2定時(shí)/向上溢出中斷編號(hào)為13,中斷編號(hào)+2*/ #pragma vector=15 _interrupt void TIM2_UPD_OVF_BRK_IRQHandler (void) GPIO_WriteReverse(GPIOD, GPIO_PIN_2); TIM2_ClearITPendingBit(TIM2_IT_UPDATE);/通
45、用寄存器TIM2,3,5既然這樣應(yīng)該沒有太大的區(qū)別#pragma vector=6_interrupt void EXIT_PORTB_IRQHander(void)if(GPIO_ReadInputData(GPIOB)&GPIO_PIN_1)=0x00) temp+; switch(temp) case 1:TIM2_TimeBaseInit( TIM2_PRESCALER_256 ,8000);break; case 2:TIM2_TimeBaseInit( TIM2_PRESCALER_512 ,8000);break; case 3:TIM2_TimeBaseInit( TI
46、M2_PRESCALER_1024 ,8000);break; case 4:TIM2_TimeBaseInit( TIM2_PRESCALER_2048 ,8000);break; case 5:TIM2_TimeBaseInit( TIM2_PRESCALER_4096 ,8000);break; case 6:TIM2_TimeBaseInit( TIM2_PRESCALER_8192 ,8000);break; default:TIM2_TimeBaseInit( TIM2_PRESCALER_2048 ,8000),temp=1; 此例子中,即使不適用更新事件也是可以使用的,就是單純
47、的作為定時(shí)器使用。但是什么時(shí)候用更新事件呢?更新事件包括溢出中斷和初始化中斷等,這個(gè)到底怎么回事?TIME1與TIM2,3,5與TIM4,6不同:STM8S提供三種類型的TIM定時(shí)器:高級(jí)控制型(TIM1),通用型(TIM2,TIM3,TIM5)和基本型定時(shí)器(TIM4和TIM6)。TIM1,2,3,5都是16位,TIM4,6是8位。TIM1(高級(jí)控制定時(shí)器)由一個(gè)16位的自動(dòng)裝載計(jì)數(shù)器組成,它由一個(gè)可編程的預(yù)分頻器驅(qū)動(dòng)。包括四個(gè)不同的捕獲/比較通道。高級(jí)控制定時(shí)器用途:1. 基本的定時(shí);2. 測(cè)量輸入信號(hào)的脈沖寬度;3. 產(chǎn)生輸出波形(輸出比較,PWM和單脈沖模式);4. 對(duì)應(yīng)不同事件(捕獲
48、,比較,溢出,剎車,觸發(fā))的中斷;5. 與TIM5/TIM6或者外部信號(hào)(外部時(shí)鐘,復(fù)位信號(hào),觸發(fā)和使能信號(hào))同步;高級(jí)控制定時(shí)器廣泛的適用于各種控制應(yīng)用中,包括哪些需要中間對(duì)齊模式PWM的應(yīng)用,該模式支持互補(bǔ)輸出和死區(qū)時(shí)間控制。高級(jí)控制定時(shí)器的時(shí)鐘源可以是內(nèi)部時(shí)鐘也可以使外部時(shí)鐘的信號(hào),可以通過配置寄存器選擇。主要特性:1.16位向上/向下,向上,向下自動(dòng)裝載計(jì)數(shù)器;2.允許在指定數(shù)目的計(jì)數(shù)器周期之后更新定時(shí)器寄存器的重復(fù)計(jì)數(shù)器;3.16位可編程(可以實(shí)現(xiàn)修改)預(yù)分頻器,計(jì)數(shù)器時(shí)鐘頻率的分頻系數(shù)位165536之間任意數(shù)值;4同步電路,用于使用外部信號(hào)控制定時(shí)器以及定時(shí)器互聯(lián)(某些型號(hào)的芯片沒
49、有此功能);5.多達(dá)4個(gè)獨(dú)立通道可以配置成:輸入捕獲;輸出比較;PWM生成(邊緣或者中間對(duì)齊模式);六步PWM輸出;單脈沖模式輸出;三個(gè)支持帶互補(bǔ)輸出,并且死區(qū)時(shí)間可編程的通道;剎車輸入信號(hào)可以將定時(shí)器輸出信號(hào)置于復(fù)位狀態(tài)或者一個(gè)已知狀態(tài)。產(chǎn)生中斷的事件包括:更新:計(jì)數(shù)器向上溢出/向下溢出,計(jì)數(shù)器初始化(通過軟件或者外部/內(nèi)部觸發(fā))觸發(fā)事件(計(jì)數(shù)器啟動(dòng),停止,初始化或者由外部/內(nèi)部觸發(fā)計(jì)數(shù))輸入捕獲;輸出比較;剎車信號(hào)輸入;時(shí)基單元:16位向上/向下計(jì)數(shù)器;16位自動(dòng)重載寄存器;重復(fù)計(jì)數(shù)器;預(yù)分頻器16位計(jì)數(shù)器,預(yù)分頻器,自動(dòng)重載寄存器和重復(fù)計(jì)數(shù)器寄存器都可以通過軟件進(jìn)行讀寫操作。 自動(dòng)重載寄
50、存器由預(yù)裝載寄存器和影子寄存器組成。 什么是影子寄存器?自動(dòng)預(yù)裝載已使能(TIM1_CR1寄存器的ARPE位置位)。在此模式下,寫入自動(dòng)重載寄存器的數(shù)據(jù)將被保存在預(yù)裝載寄存器中,并在下一個(gè)更新事件(UEV)時(shí)傳送到影子寄存器。 自動(dòng)預(yù)裝載已禁止(TIM1_CR1寄存器的ARPE位清除)。在此模式下,寫入自動(dòng)重載寄存器的數(shù)據(jù)將立即寫入影子寄存器。 更新事件的產(chǎn)生:1. 計(jì)數(shù)器向上或向下溢出;2. 軟件置位了TIM1_EGR寄存器的UG(更新事件發(fā)生)位;3. 時(shí)鐘/觸發(fā)控制器產(chǎn)生了觸發(fā)事件;置位TIM1_CR1寄存器的UDIS位將禁止更新事件(UEV)。 計(jì)數(shù)器由預(yù)分頻器的輸出CK_CNT驅(qū)動(dòng),而CK_CNT僅在IM1_CR1寄存器的計(jì)數(shù)器使能位(CEN)被置位時(shí)才有效。 (在使能了CEN位的一個(gè)時(shí)鐘周期后,計(jì)數(shù)器才開始計(jì)數(shù))(好好看一下時(shí)鐘各種周期之間關(guān)系)寫計(jì)數(shù)器的操作沒有緩存,并且可以在任何時(shí)候?qū)慣IM1_CNTRH和TIM1_CNTRL寄存器,因此我們建議不要在計(jì)數(shù)器運(yùn)行時(shí)寫入新的數(shù)值,以免寫入了錯(cuò)誤的數(shù)值。 注意:不要使用LDW指令來讀取16位計(jì)數(shù)器的值,因?yàn)榇酥噶钕茸x低位(LS)字節(jié),這樣讀出的數(shù)值是錯(cuò)誤的預(yù)分頻器的實(shí)現(xiàn):TIM1的預(yù)分頻器基于一個(gè)由16位寄存器(TIM1_PSCR控制的16位計(jì)數(shù)器。由于這個(gè)控制器帶有緩沖器,因此它能夠在運(yùn)行時(shí)被改變。預(yù)分頻器可
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)生課題申報(bào)書范例
- 醫(yī)藥集采合同范例
- 廠車出租合同范例
- 課題申報(bào)書如何排版
- 劇本轉(zhuǎn)讓合同范本
- 伐樹合同范本
- 合同范本工程延期
- 完善老舊農(nóng)機(jī)報(bào)廢更新機(jī)制的措施
- 發(fā)票附帶合同范本
- 后增補(bǔ)合同范例
- 金屬的電化學(xué)腐蝕與防護(hù) 完整版課件
- 保密風(fēng)險(xiǎn)評(píng)估報(bào)告
- 09式 新擒敵拳 教學(xué)教案 教學(xué)法 圖解
- CAD術(shù)語對(duì)照表
- 《橋梁工程計(jì)算書》word版
- 學(xué)術(shù)論文的寫作與規(guī)范課件
- 香港牛津新魔法Newmagic3AUnit4Mycalendar單元檢測(cè)試卷
- 中考《紅星照耀中國》各篇章練習(xí)題及答案(1-12)
- 中華人民共和國特種設(shè)備安全法(節(jié)選)
- 長RP心動(dòng)過速的心電圖鑒別診斷
- 施工現(xiàn)場(chǎng)安全隱患檢查(附標(biāo)準(zhǔn)規(guī)范)
評(píng)論
0/150
提交評(píng)論