




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、STM32STM32的中斷、定時器的中斷、定時器暨南大學(xué)電子設(shè)計大賽培訓(xùn)資料20112011年年7 7月月2424日日 彭煜彭煜目錄目錄 什么是什么是“中斷中斷”?1 STM32STM32中的優(yōu)先級概念中的優(yōu)先級概念2 STM32STM32外部中斷例程講解外部中斷例程講解3STM32STM32的定時器簡介的定時器簡介 4 STM32 STM32定時器例程講解定時器例程講解5什么是什么是“中斷中斷”?中斷服務(wù)程序中斷服務(wù)程序發(fā)申請發(fā)申請中斷服務(wù)程序中斷服務(wù)程序發(fā)申請發(fā)申請外外設(shè)設(shè)CPU CPU CPU執(zhí)行程序時,由于發(fā)生了某種隨機的事件執(zhí)行程序時,由于發(fā)生了某種隨機的事件( (外部外部或內(nèi)部或內(nèi)
2、部) ),引起,引起CPUCPU暫時中斷正在運行的程序,轉(zhuǎn)去執(zhí)行暫時中斷正在運行的程序,轉(zhuǎn)去執(zhí)行一段特殊的服務(wù)程序一段特殊的服務(wù)程序( (中斷服務(wù)子程序或中斷處理程序中斷服務(wù)子程序或中斷處理程序) ),以處理該事件,該事件處理完后又返回被中斷的程序繼以處理該事件,該事件處理完后又返回被中斷的程序繼續(xù)執(zhí)行,這一過程稱為中斷。續(xù)執(zhí)行,這一過程稱為中斷。 EGEG:吃飯時突然手機鈴響:吃飯時突然手機鈴響中中斷斷示示意意圖圖STM32STM32中的優(yōu)先級概念中的優(yōu)先級概念 STM32(Cortex-M3) STM32(Cortex-M3)中有兩個優(yōu)先級的概念:中有兩個優(yōu)先級的概念:搶占式優(yōu)先級搶占式優(yōu)
3、先級和和響響應(yīng)優(yōu)先級應(yīng)優(yōu)先級,也把響應(yīng)優(yōu)先級稱作,也把響應(yīng)優(yōu)先級稱作“亞優(yōu)先級亞優(yōu)先級”或或“副優(yōu)先級副優(yōu)先級”,每,每個中斷源都需要被指定這兩種優(yōu)先級。個中斷源都需要被指定這兩種優(yōu)先級。1. 1. 何為占先式優(yōu)先級何為占先式優(yōu)先級(pre-emption priority)(pre-emption priority) 高占先式優(yōu)先級的中斷事件會打斷當(dāng)前的主程序高占先式優(yōu)先級的中斷事件會打斷當(dāng)前的主程序/ /中斷程序運中斷程序運行行搶斷式優(yōu)先響應(yīng),俗稱搶斷式優(yōu)先響應(yīng),俗稱中斷嵌套中斷嵌套。2. 2. 何為副優(yōu)先級何為副優(yōu)先級(subpriority)(subpriority) 在占先式優(yōu)先級相
4、同的情況下,高副優(yōu)先級的中斷優(yōu)先被響應(yīng);在占先式優(yōu)先級相同的情況下,高副優(yōu)先級的中斷優(yōu)先被響應(yīng); 在占先式優(yōu)先級相同的情況下,如果有低副優(yōu)先級中斷正在執(zhí)行,在占先式優(yōu)先級相同的情況下,如果有低副優(yōu)先級中斷正在執(zhí)行,高副優(yōu)先級的中斷要等待已被響應(yīng)的低副優(yōu)先級中斷執(zhí)行結(jié)束后才高副優(yōu)先級的中斷要等待已被響應(yīng)的低副優(yōu)先級中斷執(zhí)行結(jié)束后才能得到響應(yīng)能得到響應(yīng)非搶斷式響應(yīng)非搶斷式響應(yīng)( (不能嵌套不能嵌套) )。3. 3. 判斷中斷是否會被響應(yīng)的依據(jù)判斷中斷是否會被響應(yīng)的依據(jù) 首先是占先式優(yōu)先級,其次是副優(yōu)先級;首先是占先式優(yōu)先級,其次是副優(yōu)先級; 占先式優(yōu)先級決定是否會有中斷嵌套;占先式優(yōu)先級決定是否會
5、有中斷嵌套;4. 4. 優(yōu)先級沖突的處理優(yōu)先級沖突的處理 具有高搶占式優(yōu)先級的中斷可以在具有低搶占式優(yōu)先級的中具有高搶占式優(yōu)先級的中斷可以在具有低搶占式優(yōu)先級的中斷處理過程中被響應(yīng),即斷處理過程中被響應(yīng),即中斷的嵌套中斷的嵌套,或者說高搶占式優(yōu)先級的,或者說高搶占式優(yōu)先級的中斷可以嵌套低搶占式優(yōu)先級的中斷。中斷可以嵌套低搶占式優(yōu)先級的中斷。 當(dāng)兩個中斷源的搶占式優(yōu)先級相同時,這兩個中斷將沒有嵌當(dāng)兩個中斷源的搶占式優(yōu)先級相同時,這兩個中斷將沒有嵌套關(guān)系,當(dāng)一個中斷到來后,如果正在處理另一個中斷,這個后套關(guān)系,當(dāng)一個中斷到來后,如果正在處理另一個中斷,這個后到來的中斷就要等到前一個中斷處理完之后才
6、能被處理。如果這到來的中斷就要等到前一個中斷處理完之后才能被處理。如果這兩個中斷兩個中斷同時到達(dá)同時到達(dá),則中斷控制器根據(jù)他們的響應(yīng)優(yōu)先級高低來,則中斷控制器根據(jù)他們的響應(yīng)優(yōu)先級高低來決定先處理哪一個;如果他們的搶占式優(yōu)先級和響應(yīng)優(yōu)先級都相決定先處理哪一個;如果他們的搶占式優(yōu)先級和響應(yīng)優(yōu)先級都相等,則根據(jù)他們在中斷表中的排位順序決定先處理哪一個。等,則根據(jù)他們在中斷表中的排位順序決定先處理哪一個。STM32STM32中的優(yōu)先級概念中的優(yōu)先級概念 5. stm325. stm32中對中斷優(yōu)先級的定義中對中斷優(yōu)先級的定義 STM32STM32中指定中斷優(yōu)先級的寄存器位有中指定中斷優(yōu)先級的寄存器位有
7、4 4位,這位,這4 4個寄存器位的分組個寄存器位的分組方式如下:方式如下: 第第0 0組:所有組:所有4 4位用于指定響應(yīng)優(yōu)先級位用于指定響應(yīng)優(yōu)先級第第1 1組:最高組:最高1 1位用于指定搶占式優(yōu)先級,最低位用于指定搶占式優(yōu)先級,最低3 3位用于指定響應(yīng)優(yōu)先級位用于指定響應(yīng)優(yōu)先級第第2 2組:最高組:最高2 2位用于指定搶占式優(yōu)先級,最低位用于指定搶占式優(yōu)先級,最低2 2位用于指定響應(yīng)優(yōu)先級位用于指定響應(yīng)優(yōu)先級第第3 3組:最高組:最高3 3位用于指定搶占式優(yōu)先級,最低位用于指定搶占式優(yōu)先級,最低1 1位用于指定響應(yīng)優(yōu)先級位用于指定響應(yīng)優(yōu)先級第第4 4組:所有組:所有4 4位用于指定搶占式
8、優(yōu)先級位用于指定搶占式優(yōu)先級具體怎樣具體怎樣設(shè)置在例設(shè)置在例程中詳細(xì)程中詳細(xì)講解講解! !STM32STM32中的優(yōu)先級概念中的優(yōu)先級概念 STM32STM32外部中斷外部中斷 STM32 STM32單片機單片機8080個通用個通用I/OI/O端口連端口連接到接到1919個外部中斷個外部中斷/ /事件源上。左圖事件源上。左圖為為STM32STM32單片機通用單片機通用I/OI/O與外部中斷的與外部中斷的映射關(guān)系:映射關(guān)系:PAxPAx、PBx PBx 、PCx PCx 、PDxPDx和和PExPEx端口對應(yīng)的是同一個外部中斷端口對應(yīng)的是同一個外部中斷/ /事事件源件源EXTIx(xEXTIx(
9、x:0-15)0-15)。EXTI_LineEXTI_Line值:值:P99P99NVIC_IRQChannelNVIC_IRQChannel值:值:P166P166void GPIO_Configuration(void)void GPIO_Configuration(void)/輸入輸出管腳配置輸入輸出管腳配置 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; / /配置輸出腳配置輸出腳PC0PC0控制控制LEDLED燈燈 GPIO_InitStructure.GPIO_Pin = GPIO_
10、Pin_0; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_Init(G
11、PIOC, &GPIO_InitStructure); / /配置輸入腳配置輸入腳PA0PA0控制按鍵控制按鍵 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_I
12、nit(GPIOA, &GPIO_InitStructure); STM32STM32外部中斷例程講解外部中斷例程講解 void NVIC_Configuration(void)void NVIC_Configuration(void) / /嵌套向量中斷控制器配置嵌套向量中斷控制器配置 NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig( NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1NVIC_P
13、riorityGroup_1);); / /選擇優(yōu)先級組別選擇優(yōu)先級組別 NVIC_InitStructure.NVIC_IRQChannel = NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQnEXTI0_IRQn; ; / /選擇中斷通道:選擇中斷通道:EXTIEXTI線線0 0中斷,因為按鍵連接的是中斷,因為按鍵連接的是PA0PA0腳腳 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelPreemptionPri
14、ority = 0; /0 /0級搶占式優(yōu)先級級搶占式優(yōu)先級 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /0 /0級副優(yōu)先級級副優(yōu)先級 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; / /使能引腳作為中斷源使能引腳作為中斷源 NVIC_Init(&NVIC_InitStructure)
15、; /NVIC_Init(&NVIC_InitStructure); /調(diào)用調(diào)用NVIC_InitNVIC_Init固件庫函數(shù)進行設(shè)置固件庫函數(shù)進行設(shè)置 STM32STM32外部中斷例程講解外部中斷例程講解 固件中固件中P166!P166!void EXTI_Configuration(void)void EXTI_Configuration(void) / /調(diào)用固件庫中的調(diào)用固件庫中的GPIO_EXTILineConfigGPIO_EXTILineConfig函數(shù),函數(shù), /其中兩個參數(shù)分別是中斷口和中斷口對應(yīng)的引腳號其中兩個參數(shù)分別是中斷口和中斷口對應(yīng)的引腳號 GPIO_EXTI
16、LineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); EXTI_InitStructure.EXTI_Line = EXTI_InitStructure.EXTI_Line = EXTI_Line0EXTI_Line0; ; / /將中斷映射到中斷將中斷映射到中斷/ /事件源事件源Line0Line0 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStru
17、cture.EXTI_Mode = EXTI_Mode_Interrupt; / /中斷模式中斷模式 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_FallingEXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling / /設(shè)置為下降沿中斷設(shè)置為下降沿中斷 EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_InitStructure.EXTI_LineCmd = ENABLE; / /中斷使能,即開中斷中斷使能,即開中斷 EXTI_Init(&
18、EXTI_InitStructure);EXTI_Init(&EXTI_InitStructure); / /調(diào)用調(diào)用EXTI_InitEXTI_Init固件庫函數(shù),將結(jié)構(gòu)體寫入固件庫函數(shù),將結(jié)構(gòu)體寫入EXTIEXTI相關(guān)寄存器中相關(guān)寄存器中 STM32STM32外部中斷例程講解外部中斷例程講解 固件中固件中P99!P99!void EXTI0_IRQHandler(void)void EXTI0_IRQHandler(void) if(EXTI_GetITStatus(EXTI_Line0) != RESET) if(EXTI_GetITStatus(EXTI_Line0) != R
19、ESET) / /將將LED1LED1的狀態(tài)反轉(zhuǎn)的狀態(tài)反轉(zhuǎn) GPIO_WriteBit(GPIOC, GPIO_Pin_0, (BitAction)(1- GPIO_WriteBit(GPIOC, GPIO_Pin_0, (BitAction)(1- GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_0); GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_0); / /清中斷清中斷 EXTI_ClearITPendingBit(EXTI_Line0);EXTI_ClearITPendingBit(EXTI_Line0); STM32ST
20、M32外部中斷例程講解外部中斷例程講解 注意:中斷服務(wù)函數(shù)都包含在注意:中斷服務(wù)函數(shù)都包含在“stm32f10 x_it.c”stm32f10 x_it.c”文件中,文件中, 用的時候只需添加指令即可用的時候只需添加指令即可! ! STM32STM32外部中斷下載測試外部中斷下載測試 下載完程序后,按按鍵下載完程序后,按按鍵K1K1觸發(fā)中斷,觸發(fā)中斷,LEDLED燈燈B1B1狀態(tài)反轉(zhuǎn)。狀態(tài)反轉(zhuǎn)。實際操作:實際操作:修改程序,使中斷通過按鍵修改程序,使中斷通過按鍵K3K3觸發(fā),同時觸發(fā),同時4 4個個LEDLED燈狀態(tài)反轉(zhuǎn)?燈狀態(tài)反轉(zhuǎn)?STM32STM32定時器簡介定時器簡介 STM32 STM
21、32中一共有中一共有1111個定時器,其中個定時器,其中2 2個高級控制定時器,個高級控制定時器,4 4個個普通定時器和普通定時器和2 2個基本定時器,以及個基本定時器,以及2 2個看門狗定時器和個看門狗定時器和1 1個系統(tǒng)個系統(tǒng)嘀嗒定時器。其中系統(tǒng)嘀嗒定時器是前文中所描述的嘀嗒定時器。其中系統(tǒng)嘀嗒定時器是前文中所描述的SysTickSysTick。主要講普通定時器定時器。主要講普通定時器定時器。定時器定時器計數(shù)器分計數(shù)器分辨率辨率計數(shù)器類計數(shù)器類型型預(yù)分頻系預(yù)分頻系數(shù)數(shù)產(chǎn)生產(chǎn)生DMADMA請求請求捕獲捕獲/ /比比較通道較通道互補輸出互補輸出TIM1TIM1TIM8TIM81616位位向上,
22、向向上,向下,向上下,向上/ /向下向下1-655361-65536之間的任之間的任意數(shù)意數(shù)可以可以4 4有有TIM2TIM2TIM3TIM3TIM4TIM4TIM5TIM51616位位向上,向向上,向下,向上下,向上/ /向下向下1-655361-65536之間的任之間的任意數(shù)意數(shù)可以可以4 4沒有沒有TIM6TIM6TIM7TIM71616位位向上向上1-655361-65536之間的任之間的任意數(shù)意數(shù)可以可以0 0沒有沒有TIM2-TIM5TIM2-TIM5是普通定時器,是普通定時器,TIM6TIM6和和TIM7TIM7是基本定時器,其時鐘由是基本定時器,其時鐘由APB1APB1輸出產(chǎn)生
23、。輸出產(chǎn)生。 2.12.1 時鐘來源時鐘來源計數(shù)器時鐘可以由下列時鐘源提供:計數(shù)器時鐘可以由下列時鐘源提供: 內(nèi)部時鐘內(nèi)部時鐘(CK_INT)(CK_INT) 外部時鐘模式外部時鐘模式1 1:外部輸入腳:外部輸入腳(TIx)(TIx) 外部時鐘模式外部時鐘模式2 2:外部觸發(fā)輸入:外部觸發(fā)輸入(ETR)(ETR) 內(nèi)部觸發(fā)輸入內(nèi)部觸發(fā)輸入(ITRx)(ITRx):使用一個定時器作為另一個定時器的預(yù)分:使用一個定時器作為另一個定時器的預(yù)分頻器,如可以配置一個定時器頻器,如可以配置一個定時器Timer1Timer1而作為另一個定時器而作為另一個定時器Timer2Timer2的預(yù)分頻的預(yù)分頻器。器。
24、 由于今天的學(xué)習(xí)是最基本的定時功能,所以采用由于今天的學(xué)習(xí)是最基本的定時功能,所以采用內(nèi)部時鐘內(nèi)部時鐘。TIM2-TIM2-TIM5TIM5的時鐘不是直接來自于的時鐘不是直接來自于APB1APB1,而是來自于,而是來自于輸入為輸入為APB1APB1的一個倍頻器的一個倍頻器。這個倍頻器的作用是:當(dāng)這個倍頻器的作用是:當(dāng)APB1APB1的預(yù)分頻系數(shù)為的預(yù)分頻系數(shù)為1 1時,這個倍頻器不起作用,時,這個倍頻器不起作用,定時器的時鐘頻率等于定時器的時鐘頻率等于APB1APB1的頻率;當(dāng)?shù)念l率;當(dāng)APB1APB1的預(yù)分頻系數(shù)為其他數(shù)值時的預(yù)分頻系數(shù)為其他數(shù)值時(即預(yù)分頻系數(shù)為(即預(yù)分頻系數(shù)為2 2、4
25、4、8 8或或1616),這個倍頻器起作用,定時器的時鐘頻率),這個倍頻器起作用,定時器的時鐘頻率等于等于APB1APB1的頻率的的頻率的2 2倍。通過倍頻器給定時器時鐘的好處是:倍。通過倍頻器給定時器時鐘的好處是:APB1APB1不但要給不但要給TIM2-TIM5TIM2-TIM5提供時鐘,還要為其他的外設(shè)提供時鐘;設(shè)置這個倍頻器可以保提供時鐘,還要為其他的外設(shè)提供時鐘;設(shè)置這個倍頻器可以保證在其他外設(shè)使用較低時鐘頻率時,證在其他外設(shè)使用較低時鐘頻率時,TIM2-TIM5TIM2-TIM5仍然可以得到較高的時鐘頻仍然可以得到較高的時鐘頻率。率。 STM32STM32定時器簡介定時器簡介 2.
26、22.2 計數(shù)器模式計數(shù)器模式 TIM2-TIM5 TIM2-TIM5可以由向上計數(shù)、向下計數(shù)、向上向下雙向計數(shù)??梢杂上蛏嫌嫈?shù)、向下計數(shù)、向上向下雙向計數(shù)。向向上計數(shù)模式上計數(shù)模式中,計數(shù)器從中,計數(shù)器從0 0計數(shù)到自動加載值計數(shù)到自動加載值(TIMx_ARR(TIMx_ARR計數(shù)器內(nèi)容計數(shù)器內(nèi)容) ),然后重新從然后重新從0 0開始計數(shù)并且產(chǎn)生一個計數(shù)器溢出事件。在開始計數(shù)并且產(chǎn)生一個計數(shù)器溢出事件。在向下模式向下模式中,中,計數(shù)器從自動裝入的值計數(shù)器從自動裝入的值(TIMx_ARR)(TIMx_ARR)開始向下計數(shù)到開始向下計數(shù)到0 0,然后從自動裝入,然后從自動裝入的值重新開始,并產(chǎn)生
27、一個計數(shù)器向下溢出事件。而中央對齊模式的值重新開始,并產(chǎn)生一個計數(shù)器向下溢出事件。而中央對齊模式(向上向上/ /向下計數(shù)向下計數(shù))是計數(shù)器從)是計數(shù)器從0 0開始計數(shù)到自動裝入的值開始計數(shù)到自動裝入的值-1-1,產(chǎn)生一,產(chǎn)生一個計數(shù)器溢出事件,然后向下計數(shù)到個計數(shù)器溢出事件,然后向下計數(shù)到1 1并且產(chǎn)生一個計數(shù)器溢出事件;并且產(chǎn)生一個計數(shù)器溢出事件;然后再從然后再從0 0開始重新計數(shù)。開始重新計數(shù)。STM32STM32定時器簡介定時器簡介 void GPIO_Config(void)void GPIO_Config(void) GPIO_InitTypeDef GPIO_InitStructu
28、re; GPIO_InitTypeDef GPIO_InitStructure; / /定義固件函數(shù)庫中已經(jīng)定義好的數(shù)據(jù)結(jié)構(gòu)的變量定義固件函數(shù)庫中已經(jīng)定義好的數(shù)據(jù)結(jié)構(gòu)的變量 / /變量類型:變量類型:GPIO_InitTypeDefGPIO_InitTypeDef、變量名、變量名 :GPIO_InitStructureGPIO_InitStructure / /使能各端口時鐘,和利用端口使能各端口時鐘,和利用端口AFIOAFIO時鐘時鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph
29、_ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_ GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO, ENABLE); GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2
30、|GPIO_Pin_3; GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; / /選擇端口位選擇端口位 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; / /選擇端口時鐘選擇端口時鐘 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Mode = GPIO
31、_Mode_Out_PP; / /選擇端口輸出方式選擇端口輸出方式 GPIO_Init(GPIOC, &GPIO_InitStructure);GPIO_Init(GPIOC, &GPIO_InitStructure);/按以上設(shè)置初始化該端口按以上設(shè)置初始化該端口 GPIO_ResetBits(GPIOC,GPIO_Pin_0);GPIO_ResetBits(GPIOC,GPIO_Pin_0); /C /C端口的端口的0 0,1 1,2 2,3 3 管腳輸出管腳輸出0 0 GPIO_ResetBits(GPIOC,GPIO_Pin_1); GPIO_ResetBits(GPI
32、OC,GPIO_Pin_1); GPIO_ResetBits(GPIOC,GPIO_Pin_2); GPIO_ResetBits(GPIOC,GPIO_Pin_2); GPIO_ResetBits(GPIOC,GPIO_Pin_3); GPIO_ResetBits(GPIOC,GPIO_Pin_3); STM32STM32定時器例程講解定時器例程講解( (查詢方式查詢方式) ) void Timer_Config(void)void Timer_Config(void) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseIni
33、tTypeDef TIM_TimeBaseStructure; / /定義定義TIMTIM結(jié)構(gòu)體變量結(jié)構(gòu)體變量 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); / /使能使能TIM2TIM2外設(shè)外設(shè) TIM_DeInit(TIM2);/TIM_DeInit(TIM2);/復(fù)位時鐘復(fù)位時鐘TIM2TIM2,恢復(fù)到初始狀態(tài),恢復(fù)到初始狀態(tài) TIM_TimeBaseStructure.TIM_Period=35999; TIM_TimeBase
34、Structure.TIM_Period=35999; TIM_TimeBaseStructure.TIM_Prescaler=1999; TIM_TimeBaseStructure.TIM_Prescaler=1999; TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; /TIM2 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; /TIM2時鐘分頻時鐘分頻 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /T
35、IM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /計數(shù)方式計數(shù)方式 / /定時時間定時時間T T計算公式:計算公式: T=(TIM_Period+1)T=(TIM_Period+1)* *(TIM_Prescaler+1)/TIMxCLK=(35999+1)(TIM_Prescaler+1)/TIMxCLK=(35999+1)* *(1999+1)/72MHz=1s(1999+1)/72MHz=1s TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); / TIM_TimeBase
36、Init(TIM2,&TIM_TimeBaseStructure); /初始化初始化 TIM_ClearFlag(TIM2,TIM_FLAG_Update); / TIM_ClearFlag(TIM2,TIM_FLAG_Update); /清除標(biāo)志清除標(biāo)志 TIM_Cmd(TIM2,ENABLE); / TIM_Cmd(TIM2,ENABLE); /使能使能TIM2TIM2 STM32STM32定時器例程講解定時器例程講解( (查詢方式查詢方式) ) /程序主循環(huán)程序主循環(huán) while(1)while(1) if(TIM_GetFlagStatus(TIM2,TIM_FLAG_Upda
37、te)!=RESET) if(TIM_GetFlagStatus(TIM2,TIM_FLAG_Update)!=RESET) / /查詢查詢TIM_FLAG_UpdateTIM_FLAG_Update標(biāo)志置位了就清除標(biāo)志標(biāo)志置位了就清除標(biāo)志 TIM_ClearFlag(TIM2,TIM_FLAG_Update);TIM_ClearFlag(TIM2,TIM_FLAG_Update);/清標(biāo)志清標(biāo)志switch(state)switch(state) case 0: GPIO_SetBits(GPIOC,GPIO_Pin_0); case 0: GPIO_SetBits(GPIOC,GPIO_P
38、in_0); GPIO_ResetBits(GPIOC,GPIO_Pin_1); GPIO_ResetBits(GPIOC,GPIO_Pin_1); GPIO_ResetBits(GPIOC,GPIO_Pin_2); GPIO_ResetBits(GPIOC,GPIO_Pin_2); default: default: break; break; if(+state=5) state=0; if(+state=5) state=0; STM32STM32定時器例程講解定時器例程講解( (查詢方式查詢方式) ) STM32STM32定時器例程講解定時器例程講解( (中斷方式中斷方式) ) voi
39、d NVIC_Config(void)void NVIC_Config(void) NVIC_InitTypeDef NVIC_InitStructure;/ NVIC_InitTypeDef NVIC_InitStructure;/定義結(jié)構(gòu)體變量定義結(jié)構(gòu)體變量 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); / /設(shè)置優(yōu)先分級組設(shè)置優(yōu)先分級組 NVIC_InitStructure.NVIC_IRQChannel= NVIC_InitStructure
40、.NVIC_IRQChannel=TIM2_IRQnTIM2_IRQn; ; / /選擇中斷通道。注意:固件庫中為選擇中斷通道。注意:固件庫中為XXX_IRQChannelXXX_IRQChannel,但該程序預(yù)定義為,但該程序預(yù)定義為 XXX_IRQn XXX_IRQn,所以要特別注意,所以要特別注意 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; / /先占優(yōu)先級先占優(yōu)先級 NVIC_InitStructure.NV
41、IC_IRQChannelSubPriority=0; NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; / /從優(yōu)先級從優(yōu)先級 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; / /使能中斷向量配置使能中斷向量配置 NVIC_Init(&NVIC_InitStructure); NVIC_Init(&NVIC_InitStructure); / /按以上設(shè)置初始化中斷向量按以上設(shè)置初始化中斷向量
42、 固件中固件中P166!P166!void Timer_Config(void)void Timer_Config(void) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; / /定義定義TIMTIM結(jié)構(gòu)體變量結(jié)構(gòu)體變量 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); / /使能使能TIM2TIM2
43、外設(shè)外設(shè) TIM_DeInit(TIM2);/TIM_DeInit(TIM2);/復(fù)位時鐘復(fù)位時鐘TIM2TIM2,恢復(fù)到初始狀態(tài),恢復(fù)到初始狀態(tài) TIM_TimeBaseStructure.TIM_Period=35999; TIM_TimeBaseStructure.TIM_Period=35999; TIM_TimeBaseStructure.TIM_Prescaler=1999; TIM_TimeBaseStructure.TIM_Prescaler=1999; TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; /TIM2 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; /TIM2時鐘分頻時鐘分頻 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /計數(shù)方式計數(shù)方式 / /定時時間定時時間T T計算公式:計算公式: T=(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廢玻璃混凝土火后殘余性能及TRC加固機理研究
- 基于深度學(xué)習(xí)的橋梁故障預(yù)測診斷研究
- 健康教案:變色龍主題教學(xué)設(shè)計
- 金融系統(tǒng)核心業(yè)務(wù)流程架構(gòu)
- 痔瘡的護理查房
- 腦出血康復(fù)健康指導(dǎo)
- 頸腰椎病健康講座課件
- 婦科護理知識年度總結(jié)
- 幼兒園家長工作案例培訓(xùn)
- 《網(wǎng)頁設(shè)計與制作》課件-第4Fireworks綜合應(yīng)用
- 2025年廣東高考政治試卷真題答案詳解講評(課件)
- 卡口及道路交通智能監(jiān)控系統(tǒng)方案設(shè)計
- 2025年家庭照護師職業(yè)資格考試試題及答案
- 呼吸機相關(guān)性肺炎的預(yù)防和護理
- 2025年綏化市中考化學(xué)試題卷(含答案解析)
- 門診口腔院感基礎(chǔ)知識培訓(xùn)
- 論詠嘆調(diào)《媽媽不在》的形象刻畫與唱段處理
- 危重病人觀察和護理要點
- 砌體工程培訓(xùn)課件
- GB/T 45719-2025半導(dǎo)體器件金屬氧化物半導(dǎo)體(MOS)晶體管的熱載流子試驗
- 2025-2030中國醫(yī)藥商業(yè)行業(yè)盈利態(tài)勢與投資潛力分析報告
評論
0/150
提交評論