基于ARM的嵌入式系統(tǒng)開發(fā)5綜述_第1頁
基于ARM的嵌入式系統(tǒng)開發(fā)5綜述_第2頁
基于ARM的嵌入式系統(tǒng)開發(fā)5綜述_第3頁
基于ARM的嵌入式系統(tǒng)開發(fā)5綜述_第4頁
基于ARM的嵌入式系統(tǒng)開發(fā)5綜述_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 1第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)-章章 I/O接口電路接口電路中斷與定時(shí)器 2第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路什么是“中斷”?中斷服務(wù)程序中斷服務(wù)程序發(fā)申請(qǐng)發(fā)申請(qǐng)中斷服務(wù)程序中斷服務(wù)程序發(fā)申請(qǐng)發(fā)申請(qǐng)外外設(shè)設(shè)CPU CPU CPU執(zhí)行程序時(shí),由于發(fā)生了某種隨機(jī)的事件執(zhí)行程序時(shí),由于發(fā)生了某種隨機(jī)的事件( (外部外部或內(nèi)部或內(nèi)部) ),引起,引起CPUCPU暫時(shí)中斷正在運(yùn)行的程序,轉(zhuǎn)去執(zhí)行暫時(shí)中斷正在運(yùn)行的程序,轉(zhuǎn)去執(zhí)行一段特殊的服務(wù)程序一段特殊的服務(wù)程序( (中斷服務(wù)子程序或中斷處理程序中斷服務(wù)子程序或中斷處理程序) ),以處理該事件,該事件處理完后又返回被中斷

2、的程序繼以處理該事件,該事件處理完后又返回被中斷的程序繼續(xù)執(zhí)行,這一過程稱為中斷。續(xù)執(zhí)行,這一過程稱為中斷。 EGEG:吃飯時(shí)突然手機(jī)鈴響:吃飯時(shí)突然手機(jī)鈴響中中斷斷示示意意圖圖 35.3 中斷 第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路 STM32(Cortex-M3) STM32(Cortex-M3)中有兩個(gè)優(yōu)先級(jí)的概念:中有兩個(gè)優(yōu)先級(jí)的概念:搶占式優(yōu)先級(jí)搶占式優(yōu)先級(jí)和和響響應(yīng)優(yōu)先級(jí)應(yīng)優(yōu)先級(jí),也把響應(yīng)優(yōu)先級(jí)稱作,也把響應(yīng)優(yōu)先級(jí)稱作“亞優(yōu)先級(jí)亞優(yōu)先級(jí)”或或“副優(yōu)先級(jí)副優(yōu)先級(jí)”,每,每個(gè)中斷源都需要被指定這兩種優(yōu)先級(jí)。個(gè)中斷源都需要被指定這兩種優(yōu)先級(jí)。1. 1. 何為占先式優(yōu)

3、先級(jí)何為占先式優(yōu)先級(jí)(pre-emption priority)(pre-emption priority) 高占先式優(yōu)先級(jí)的中斷事件會(huì)打斷當(dāng)前的主程序高占先式優(yōu)先級(jí)的中斷事件會(huì)打斷當(dāng)前的主程序/ /中斷程序運(yùn)中斷程序運(yùn)行行搶斷式優(yōu)先響應(yīng),俗稱搶斷式優(yōu)先響應(yīng),俗稱中斷嵌套中斷嵌套。2. 2. 何為副優(yōu)先級(jí)何為副優(yōu)先級(jí)(subpriority)(subpriority) 在占先式優(yōu)先級(jí)相同的情況下,高副優(yōu)先級(jí)的中斷優(yōu)先被響應(yīng);在占先式優(yōu)先級(jí)相同的情況下,高副優(yōu)先級(jí)的中斷優(yōu)先被響應(yīng); 在占先式優(yōu)先級(jí)相同的情況下,如果有低副優(yōu)先級(jí)中斷正在執(zhí)行,在占先式優(yōu)先級(jí)相同的情況下,如果有低副優(yōu)先級(jí)中斷正在執(zhí)行

4、,高副優(yōu)先級(jí)的中斷要等待已被響應(yīng)的低副優(yōu)先級(jí)中斷執(zhí)行結(jié)束后才高副優(yōu)先級(jí)的中斷要等待已被響應(yīng)的低副優(yōu)先級(jí)中斷執(zhí)行結(jié)束后才能得到響應(yīng)能得到響應(yīng)非搶斷式響應(yīng)非搶斷式響應(yīng)( (不能嵌套不能嵌套) )。3. 3. 判斷中斷是否會(huì)被響應(yīng)的依據(jù)判斷中斷是否會(huì)被響應(yīng)的依據(jù) 首先是占先式優(yōu)先級(jí),其次是副優(yōu)先級(jí);首先是占先式優(yōu)先級(jí),其次是副優(yōu)先級(jí); 占先式優(yōu)先級(jí)決定是否會(huì)有中斷嵌套;占先式優(yōu)先級(jí)決定是否會(huì)有中斷嵌套; 4第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路4. 4. 優(yōu)先級(jí)沖突的處理優(yōu)先級(jí)沖突的處理 具有高搶占式優(yōu)先級(jí)的中斷可以在具有低搶占式優(yōu)先級(jí)的中具有高搶占式優(yōu)先級(jí)的中斷可以在具有低搶

5、占式優(yōu)先級(jí)的中斷處理過程中被響應(yīng),即斷處理過程中被響應(yīng),即中斷的嵌套中斷的嵌套,或者說高搶占式優(yōu)先級(jí)的,或者說高搶占式優(yōu)先級(jí)的中斷可以嵌套低搶占式優(yōu)先級(jí)的中斷。中斷可以嵌套低搶占式優(yōu)先級(jí)的中斷。 當(dāng)兩個(gè)中斷源的搶占式優(yōu)先級(jí)相同時(shí),這兩個(gè)中斷將沒有嵌當(dāng)兩個(gè)中斷源的搶占式優(yōu)先級(jí)相同時(shí),這兩個(gè)中斷將沒有嵌套關(guān)系,當(dāng)一個(gè)中斷到來后,如果正在處理另一個(gè)中斷,這個(gè)后套關(guān)系,當(dāng)一個(gè)中斷到來后,如果正在處理另一個(gè)中斷,這個(gè)后到來的中斷就要等到前一個(gè)中斷處理完之后才能被處理。如果這到來的中斷就要等到前一個(gè)中斷處理完之后才能被處理。如果這兩個(gè)中斷兩個(gè)中斷同時(shí)到達(dá)同時(shí)到達(dá),則中斷控制器根據(jù)他們的響應(yīng)優(yōu)先級(jí)高低來,則

6、中斷控制器根據(jù)他們的響應(yīng)優(yōu)先級(jí)高低來決定先處理哪一個(gè);如果他們的搶占式優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)都相決定先處理哪一個(gè);如果他們的搶占式優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)都相等,則根據(jù)他們?cè)谥袛啾碇械呐盼豁樞驔Q定先處理哪一個(gè)。等,則根據(jù)他們?cè)谥袛啾碇械呐盼豁樞驔Q定先處理哪一個(gè)。 5第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路5. stm325. stm32中對(duì)中斷優(yōu)先級(jí)的定義中對(duì)中斷優(yōu)先級(jí)的定義 STM32STM32中指定中斷優(yōu)先級(jí)的寄存器位有中指定中斷優(yōu)先級(jí)的寄存器位有4 4位,這位,這4 4個(gè)寄存器位的分組個(gè)寄存器位的分組方式如下:方式如下: 第第0 0組:所有組:所有4 4位用于指定響應(yīng)優(yōu)先級(jí)位用

7、于指定響應(yīng)優(yōu)先級(jí)第第1 1組:最高組:最高1 1位用于指定搶占式優(yōu)先級(jí),最低位用于指定搶占式優(yōu)先級(jí),最低3 3位用于指定響應(yīng)優(yōu)先級(jí)位用于指定響應(yīng)優(yōu)先級(jí)第第2 2組:最高組:最高2 2位用于指定搶占式優(yōu)先級(jí),最低位用于指定搶占式優(yōu)先級(jí),最低2 2位用于指定響應(yīng)優(yōu)先級(jí)位用于指定響應(yīng)優(yōu)先級(jí)第第3 3組:最高組:最高3 3位用于指定搶占式優(yōu)先級(jí),最低位用于指定搶占式優(yōu)先級(jí),最低1 1位用于指定響應(yīng)優(yōu)先級(jí)位用于指定響應(yīng)優(yōu)先級(jí)第第4 4組:所有組:所有4 4位用于指定搶占式優(yōu)先級(jí)位用于指定搶占式優(yōu)先級(jí)具體怎樣具體怎樣設(shè)置在例設(shè)置在例程中詳細(xì)程中詳細(xì)講解講解! ! 6第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I

8、/O接口接口電路電路 STM32 STM32單片機(jī)單片機(jī)8080個(gè)通用個(gè)通用I/OI/O端口連端口連接到接到1919個(gè)外部中斷個(gè)外部中斷/ /事件源上。左圖事件源上。左圖為為STM32STM32單片機(jī)通用單片機(jī)通用I/OI/O與外部中斷的與外部中斷的映射關(guān)系:映射關(guān)系:PAxPAx、PBx PBx 、PCx PCx 、PDxPDx和和PExPEx端口對(duì)應(yīng)的是同一個(gè)外部中斷端口對(duì)應(yīng)的是同一個(gè)外部中斷/ /事事件源件源EXTIx(xEXTIx(x:0-15)0-15)。EXTI_LineEXTI_Line值值NVIC_IRQChannelNVIC_IRQChannel值值 7第五部分第五部分 軟件

9、設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路例:實(shí)現(xiàn)按鍵例:實(shí)現(xiàn)按鍵K1觸發(fā)中斷,觸發(fā)中斷,LED燈燈B1狀態(tài)反轉(zhuǎn)。狀態(tài)反轉(zhuǎn)。 8第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路void GPIO_Configuration(void)void GPIO_Configuration(void)/輸入輸出管腳配置輸入輸出管腳配置 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; / /配置輸出腳配置輸出腳PC0PC0控制控制LEDLED燈燈 GPIO_InitStructure.GPIO_Pi

10、n = GPIO_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); GP

11、IO_Init(GPIOC, &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

12、); GPIO_Init(GPIOA, &GPIO_InitStructure); 1步步 9第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路void NVIC_Configuration(void)void NVIC_Configuration(void) / /嵌套向量中斷控制器配置嵌套向量中斷控制器配置 NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig( NVIC_PriorityGroupConfig(NVIC_Prio

13、rityGroup_1NVIC_PriorityGroup_1);); / /選擇優(yōu)先級(jí)組別選擇優(yōu)先級(jí)組別 NVIC_InitStructure.NVIC_IRQChannel = NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQnEXTI0_IRQn; ; / /選擇中斷通道:選擇中斷通道:EXTIEXTI線線0 0中斷,因?yàn)榘存I連接的是中斷,因?yàn)榘存I連接的是PA0PA0腳腳 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQCha

14、nnelPreemptionPriority = 0; /0 /0級(jí)搶占式優(yōu)先級(jí)級(jí)搶占式優(yōu)先級(jí) NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /0 /0級(jí)副優(yōu)先級(jí)級(jí)副優(yōu)先級(jí) NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; / /使能引腳作為中斷源使能引腳作為中斷源 NVIC_Init(&NV

15、IC_InitStructure); /NVIC_Init(&NVIC_InitStructure); /調(diào)用調(diào)用NVIC_InitNVIC_Init固件庫函數(shù)進(jìn)行設(shè)置固件庫函數(shù)進(jìn)行設(shè)置 2步步 10第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路void EXTI_Configuration(void)void EXTI_Configuration(void) / /調(diào)用固件庫中的調(diào)用固件庫中的GPIO_EXTILineConfigGPIO_EXTILineConfig函數(shù),函數(shù), /其中兩個(gè)參數(shù)分別是中斷口和中斷口對(duì)應(yīng)的引腳號(hào)其中兩個(gè)參數(shù)分別是中斷口和中斷口對(duì)應(yīng)的引腳號(hào)

16、 GPIO_EXTILineConfig(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; EXT

17、I_InitStructure.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_

18、Init(&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)寄存器中 3步步 11第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路void EXTI0_IRQHandler(void)void EXTI0_IRQHandler(void) if(EXTI_GetITStatus(EXTI_Line0) != RESET) if(EXTI_GetITStatus(EXTI_Line0)

19、 != RESET) / /將將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); 注意

20、:中斷服務(wù)函數(shù)都包含在注意:中斷服務(wù)函數(shù)都包含在“stm32f10 x_it.cstm32f10 x_it.c”文件中,文件中, 用的時(shí)候只需添加指令即可用的時(shí)候只需添加指令即可! ! 4步步 12第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路下載完程序后,按按鍵下載完程序后,按按鍵K1K1觸發(fā)中斷,觸發(fā)中斷,LEDLED燈燈B1B1狀態(tài)反轉(zhuǎn)。狀態(tài)反轉(zhuǎn)。實(shí)際操作:實(shí)際操作:修改程序,使中斷通過按鍵修改程序,使中斷通過按鍵K3K3觸發(fā),同時(shí)觸發(fā),同時(shí)4 4個(gè)個(gè)LEDLED燈狀態(tài)反轉(zhuǎn)?燈狀態(tài)反轉(zhuǎn)? 13第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路定時(shí)器 14第五部分第

21、五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路由此我們知道對(duì)于一個(gè)定時(shí)器而言要做到精由此我們知道對(duì)于一個(gè)定時(shí)器而言要做到精確定時(shí)需要關(guān)注確定時(shí)需要關(guān)注2個(gè)內(nèi)容個(gè)內(nèi)容1.分頻器分頻器(分頻比分頻比)2.定時(shí)計(jì)數(shù)器的值定時(shí)計(jì)數(shù)器的值 15第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路n按功能劃分按功能劃分 2個(gè)高級(jí)控制定時(shí)器個(gè)高級(jí)控制定時(shí)器 TIM1 TIM8可分配可分配6個(gè)通道的三相個(gè)通道的三相PWM發(fā)生器(多用于發(fā)生器(多用于電機(jī)控制)電機(jī)控制) 4個(gè)普通定時(shí)器個(gè)普通定時(shí)器 TIM2 TIM3 TIM4 TIM5每個(gè)定時(shí)器有每個(gè)定時(shí)器有4個(gè)輸入捕獲個(gè)輸入捕獲/輸出比較輸出比較

22、/PWM/脈沖計(jì)數(shù)脈沖計(jì)數(shù) 16第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路 2個(gè)基本定時(shí)器個(gè)基本定時(shí)器 TIM6 TIM7 主要用于主要用于產(chǎn)生產(chǎn)生DAC觸發(fā)信號(hào)觸發(fā)信號(hào) 2個(gè)看門狗定時(shí)器個(gè)看門狗定時(shí)器 獨(dú)立看門狗獨(dú)立看門狗 窗口窗口看門狗看門狗 系統(tǒng)時(shí)基定時(shí)器系統(tǒng)時(shí)基定時(shí)器 SysTick24位遞減計(jì)數(shù)器位遞減計(jì)數(shù)器自動(dòng)重加載自動(dòng)重加載常用于產(chǎn)生延時(shí)常用于產(chǎn)生延時(shí) us級(jí)級(jí) ms級(jí)級(jí) 17第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路nCK_CNT 表示定時(shí)器工作頻率表示定時(shí)器工作頻率nTIMx_PSC 表示分頻系數(shù)表示分頻系數(shù)則定時(shí)器的工作頻率計(jì)算公式為則定

23、時(shí)器的工作頻率計(jì)算公式為CK_CNT=定時(shí)器時(shí)鐘定時(shí)器時(shí)鐘/ (TIMx_PSC +1)由此我們可得到由此我們可得到STM32單片機(jī)單片機(jī)1個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期為:為: T=1/ CK_CNT 18第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路n例如普通定時(shí)器模塊的時(shí)鐘為例如普通定時(shí)器模塊的時(shí)鐘為72MHz,分分頻比位頻比位7199,那么我們想要得到一個(gè),那么我們想要得到一個(gè)1秒秒鐘的定時(shí),定時(shí)計(jì)數(shù)器的值需要設(shè)定為鐘的定時(shí),定時(shí)計(jì)數(shù)器的值需要設(shè)定為nTIMx_ARR = 10 000n因?yàn)橐驗(yàn)?2 000 000 / 7200 = 10KHzn時(shí)鐘周期時(shí)鐘周期T=1/10KHz=

24、100usn100us 10 000 = 1S結(jié)論結(jié)論 :分頻比:分頻比7199 定時(shí)計(jì)數(shù)器的值定時(shí)計(jì)數(shù)器的值 10 000 19第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路寄存器操作編程寄存器操作編程nvoid Timer3_Init(u16 arr,u16 psc)nnRCC-APB1ENR |= 1 ARR = arr;/設(shè)置重裝載值設(shè)置重裝載值nTIM3-PSC = psc;/設(shè)置分頻系數(shù)設(shè)置分頻系數(shù)nTIM3-DIER |= 1 DIER |= 1 CR1 |= 1 =5) state=0; if(+state=5) state=0; 26第五部分第五部分 軟件設(shè)計(jì)軟

25、件設(shè)計(jì)- I/O接口接口電路電路void 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)先分級(jí)組設(shè)置優(yōu)先分級(jí)組 NVIC_InitStructure.NVIC_IRQChannel=

26、 NVIC_InitStructure.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)先級(jí)先占優(yōu)先級(jí) NV

27、IC_InitStructure.NVIC_IRQChannelSubPriority=0; NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; / /從優(yōu)先級(jí)從優(yōu)先級(jí) NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; / /使能中斷向量配置使能中斷向量配置 NVIC_Init(&NVIC_InitStructure); NVIC_Init(&NVIC_InitStructure); / /按以上設(shè)置

28、初始化中斷向量按以上設(shè)置初始化中斷向量 27第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路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_APB1P

29、eriph_TIM2,ENABLE); / /使能使能TIM2TIM2外設(shè)外設(shè) TIM_DeInit(TIM2);/TIM_DeInit(TIM2);/復(fù)位時(shí)鐘復(fù)位時(shí)鐘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_C

30、lockDivision=TIM_CKD_DIV1; /TIM2 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; /TIM2時(shí)鐘分頻時(shí)鐘分頻 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /計(jì)數(shù)方式計(jì)數(shù)方式 / /定時(shí)時(shí)間定時(shí)時(shí)間T T計(jì)算公式:計(jì)算公式: T=(TIM_Period+1)T=(TIM_Period+1)* *(TIM_Prescal

31、er+1)/TIMxCLK=(35999+1)(TIM_Prescaler+1)/TIMxCLK=(35999+1)* *(1999+1)/72MHz=1s(1999+1)/72MHz=1s TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); / TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); /初始化初始化 TIM_ClearFlag(TIM2,TIM_FLAG_Update); / TIM_ClearFlag(TIM2,TIM_FLAG_Update); /清除標(biāo)志清除標(biāo)志 TIM_IT

32、Config(TIM2,TIM_IT_Update,ENABLE); /TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); /使能中斷源使能中斷源 TIM_Cmd(TIM2,ENABLE); / TIM_Cmd(TIM2,ENABLE); /使能使能TIM2TIM2 28第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路void TIM2_IRQHandler(void)void TIM2_IRQHandler(void) if(TIM_GetITStatus(TIM2,TIM_IT_Update)=SET) if(TIM_GetITStatus(TIM

33、2,TIM_IT_Update)=SET) TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update); TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update); /清中斷清中斷 switch(state)switch(state) case 0: GPIO_SetBits(GPIOC,GPIO_Pin_0); case 0: GPIO_SetBits(GPIOC,GPIO_Pin_0); GPIO_ResetBits(GPIOC,GPIO_Pin_1); GPIO_ResetBits(GPIOC,GPIO_Pin_1); GPIO_

34、ResetBits(GPIOC,GPIO_Pin_2); GPIO_ResetBits(GPIOC,GPIO_Pin_2); GPIO_ResetBits(GPIOC,GPIO_Pin_3); GPIO_ResetBits(GPIOC,GPIO_Pin_3); default: default: break; break; if(+state=5) state=0; if(+state=5) state=0; 29第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路 通過對(duì)通過對(duì)TIM1TIM1定時(shí)器進(jìn)行控制,使之各通道輸出互補(bǔ)定時(shí)器進(jìn)行控制,使之各通道輸出互補(bǔ)PWMPWM,各通道輸出

35、頻率均為各通道輸出頻率均為20KHz20KHz。其中,通道。其中,通道1 1輸出的占空比為輸出的占空比為 50%50%,通道通道2 2輸出的占空比為輸出的占空比為25%25%,通道,通道3 3輸出的占空比為輸出的占空比為12.5%12.5%。各通。各通道互補(bǔ)輸出為反相輸出。道互補(bǔ)輸出為反相輸出。 TIM1TIM1定時(shí)器的通道定時(shí)器的通道1 1到到4 4的輸出分別對(duì)應(yīng)的輸出分別對(duì)應(yīng)PA8PA8、PA9PA9、PA10PA10和和PA11PA11引腳,而通道引腳,而通道1 1到到3 3的互補(bǔ)輸出分別對(duì)應(yīng)的互補(bǔ)輸出分別對(duì)應(yīng)PB13PB13、PB14PB14和和PB15PB15引腳,中止輸入引腳為引腳

36、,中止輸入引腳為PB12PB12。將這些引腳分別接入示波器,在。將這些引腳分別接入示波器,在示波器上觀查相應(yīng)通道占空比的方波。示波器上觀查相應(yīng)通道占空比的方波。 30第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路 由于由于TIM1TIM1計(jì)數(shù)器的時(shí)鐘頻率為計(jì)數(shù)器的時(shí)鐘頻率為72MHz72MHz,要想得到各通道,要想得到各通道PWMPWM輸輸出頻率為出頻率為20KHz20KHz,根據(jù)公式:,根據(jù)公式: TIM1TIM1頻率頻率=TIM1CLK/(TIM1_Period+1)=TIM1CLK/(TIM1_Period+1), 則則TIM1_PeriodTIM1_Period為為360

37、0-13600-1。 由于通道輸出占空比等于由于通道輸出占空比等于: :TIM1_CCRx/(TIM1_Period+1);TIM1_CCRx/(TIM1_Period+1); 可以得到各通道比較可以得到各通道比較/ /捕獲寄存器的計(jì)數(shù)值。其中,通道捕獲寄存器的計(jì)數(shù)值。其中,通道1 1的的TIM1_CCR1TIM1_CCR1寄存器的值為寄存器的值為18001800,通道,通道2 2的的TIM1_CCR2TIM1_CCR2寄存器的值為寄存器的值為900900,通道,通道3 3的的TIM1_CCR3TIM1_CCR3寄存器的值為寄存器的值為450450。 具體怎樣設(shè)置在例程中詳細(xì)講解具體怎樣設(shè)置在

38、例程中詳細(xì)講解! ! 31第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路u16 CCR1_Val = 1800; /u16 CCR1_Val = 1800; /設(shè)置設(shè)置TIM1TIM1通道通道1 1輸出占空比輸出占空比50%50%u16 CCR2_Val = 900; /u16 CCR2_Val = 900; /設(shè)置設(shè)置TIM1TIM1通道通道1 1輸出占空比輸出占空比2525% %u16 CCR3_Val = 450; /u16 CCR3_Val = 450; /設(shè)置設(shè)置TIM1TIM1通道通道1 1輸出占空比輸出占空比12.512.5% %TIM1_TimeBaseStruc

39、ture.TIM_Prescaler = 0 x0;TIM1_TimeBaseStructure.TIM_Prescaler = 0 x0;/TIM1/TIM1時(shí)鐘頻率的預(yù)分頻值時(shí)鐘頻率的預(yù)分頻值TIM1_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM1_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;/向上計(jì)數(shù)向上計(jì)數(shù)TIM1_TimeBaseStructure.TIM_Period = 3600-1;TIM1_TimeBaseStructure.TIM_Per

40、iod = 3600-1;/自動(dòng)重裝載寄存器周期值自動(dòng)重裝載寄存器周期值TIM1_TimeBaseStructure.TIM_ClockDivision = 0 x0;TIM1_TimeBaseStructure.TIM_ClockDivision = 0 x0;/時(shí)鐘分割值時(shí)鐘分割值TIM1_TimeBaseStructure.TIM_RepetitionCounter = 0 x0;TIM1_TimeBaseStructure.TIM_RepetitionCounter = 0 x0;TIM_TimeBaseInit(TIM1,&TIM1_TimeBaseStructure);TI

41、M_TimeBaseInit(TIM1,&TIM1_TimeBaseStructure);/初始化初始化TIM1TIM1的時(shí)間計(jì)數(shù)數(shù)據(jù)的時(shí)間計(jì)數(shù)數(shù)據(jù) 32第五部分第五部分 軟件設(shè)計(jì)軟件設(shè)計(jì)- I/O接口接口電路電路 / /* *選擇定時(shí)器輸出比較為選擇定時(shí)器輸出比較為PWMPWM模式模式2 2。在向上計(jì)數(shù)時(shí),當(dāng)。在向上計(jì)數(shù)時(shí),當(dāng) TIM1_CNTTIM1_CRR1TIM1_CNTTIM1_CRR1TIM1_CNTTIM1_CRR1時(shí),通道時(shí),通道1 1為有效電平,否則為無效電為有效電平,否則為無效電 平。如果選擇平。如果選擇PWMPWM模式模式1 1,則相反。,則相反。* */ / T

42、IM1_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; TIM1_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; /選擇輸出比較狀態(tài),以及互補(bǔ)輸出比較狀態(tài)選擇輸出比較狀態(tài),以及互補(bǔ)輸出比較狀態(tài) TIM1_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM1_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM1_OCInitStructure.TIM_OutputNS

43、tate = TIM_OutputNState_Enable; TIM1_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; / /設(shè)置通道設(shè)置通道1 1捕獲比較寄存器的脈沖值捕獲比較寄存器的脈沖值- -占空比為占空比為50% 50% TIM1_OCInitStructure.TIM_Pulse = CCR1_Val; TIM1_OCInitStructure.TIM_Pulse = CCR1_Val; / /輸出極性和互補(bǔ)極性的有效電平為低輸出極性和互補(bǔ)極性的有效電平為低 TIM1_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; TIM1_OCInitStructure.TIM_OCPolarity =

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論