基于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ù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

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

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

6、中斷控制器根據(jù)他們的響應優(yōu)先級高低來決定先處理哪一個;如果他們的搶占式優(yōu)先級和響應優(yōu)先級都相決定先處理哪一個;如果他們的搶占式優(yōu)先級和響應優(yōu)先級都相等,則根據(jù)他們在中斷表中的排位順序決定先處理哪一個。等,則根據(jù)他們在中斷表中的排位順序決定先處理哪一個。 5第五部分第五部分 軟件設計軟件設計- I/O接口接口電路電路5. stm325. stm32中對中斷優(yōu)先級的定義中對中斷優(yōu)先級的定義 STM32STM32中指定中斷優(yōu)先級的寄存器位有中指定中斷優(yōu)先級的寄存器位有4 4位,這位,這4 4個寄存器位的分組個寄存器位的分組方式如下:方式如下: 第第0 0組:所有組:所有4 4位用于指定響應優(yōu)先級位用

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

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

9、設計軟件設計- I/O接口接口電路電路例:實現(xiàn)按鍵例:實現(xiàn)按鍵K1觸發(fā)中斷,觸發(fā)中斷,LED燈燈B1狀態(tài)反轉(zhuǎn)。狀態(tài)反轉(zhuǎn)。 8第五部分第五部分 軟件設計軟件設計- 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第五部分第五部分 軟件設計軟件設計- 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)先級組別選擇優(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_IRQCha

14、nnelPreemptionPriority = 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(&NV

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

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 / /設置為下降沿中斷設置為下降沿中斷 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第五部分第五部分 軟件設計軟件設計- 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、:中斷服務函數(shù)都包含在注意:中斷服務函數(shù)都包含在“stm32f10 x_it.cstm32f10 x_it.c”文件中,文件中, 用的時候只需添加指令即可用的時候只需添加指令即可! ! 4步步 12第五部分第五部分 軟件設計軟件設計- I/O接口接口電路電路下載完程序后,按按鍵下載完程序后,按按鍵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)? 13第五部分第五部分 軟件設計軟件設計- I/O接口接口電路電路定時器 14第五部分第

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

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

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

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

25、件設計- 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); / /設置優(yōu)先分級組設置優(yōu)先分級組 NVIC_InitStructure.NVIC_IRQChannel=

26、 NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQnTIM2_IRQn; ; / /選擇中斷通道。注意:固件庫中為選擇中斷通道。注意:固件庫中為XXX_IRQChannelXXX_IRQChannel,但該程序預定義為,但該程序預定義為 XXX_IRQn XXX_IRQn,所以要特別注意,所以要特別注意 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; / /先占優(yōu)先級先占優(yōu)先級 NV

27、IC_InitStructure.NVIC_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); / /按以上設置

28、初始化中斷向量按以上設置初始化中斷向量 27第五部分第五部分 軟件設計軟件設計- 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外設外設 TIM_DeInit(TIM2);/TIM_DeInit(TIM2);/復位時鐘復位時鐘TIM2TIM2,恢復到初始狀態(tài),恢復到初始狀態(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時鐘分頻時鐘分頻 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /計數(shù)方式計數(shù)方式 / /定時時間定時時間T T計算公式:計算公式: 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); /清除標志清除標志 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第五部分第五部分 軟件設計軟件設計- 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第五部分第五部分 軟件設計軟件設計- I/O接口接口電路電路 通過對通過對TIM1TIM1定時器進行控制,使之各通道輸出互補定時器進行控制,使之各通道輸出互補PWMPWM,各通道輸出

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

36、,中止輸入引腳為PB12PB12。將這些引腳分別接入示波器,在。將這些引腳分別接入示波器,在示波器上觀查相應通道占空比的方波。示波器上觀查相應通道占空比的方波。 30第五部分第五部分 軟件設計軟件設計- I/O接口接口電路電路 由于由于TIM1TIM1計數(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); 可以得到各通道比較可以得到各通道比較/ /捕獲寄存器的計數(shù)值。其中,通道捕獲寄存器的計數(shù)值。其中,通道1 1的的TIM1_CCR1TIM1_CCR1寄存器的值為寄存器的值為18001800,通道,通道2 2的的TIM1_CCR2TIM1_CCR2寄存器的值為寄存器的值為900900,通道,通道3 3的的TIM1_CCR3TIM1_CCR3寄存器的值為寄存器的值為450450。 具體怎樣設置在例程中詳細講解具體怎樣設置在

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

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

40、iod = 3600-1;/自動重裝載寄存器周期值自動重裝載寄存器周期值TIM1_TimeBaseStructure.TIM_ClockDivision = 0 x0;TIM1_TimeBaseStructure.TIM_ClockDivision = 0 x0;/時鐘分割值時鐘分割值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ù)數(shù)據(jù)的時間計數(shù)數(shù)據(jù) 32第五部分第五部分 軟件設計軟件設計- I/O接口接口電路電路 / /* *選擇定時器輸出比較為選擇定時器輸出比較為PWMPWM模式模式2 2。在向上計數(shù)時,當。在向上計數(shù)時,當 TIM1_CNTTIM1_CRR1TIM1_CNTTIM1_CRR1TIM1_CNTTIM1_CRR1時,通道時,通道1 1為有效電平,否則為無效電為有效電平,否則為無效電 平。如果選擇平。如果選擇PWMPWM模式模式1 1,則相反。,則相反。* */ / T

42、IM1_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; TIM1_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; /選擇輸出比較狀態(tài),以及互補輸出比較狀態(tài)選擇輸出比較狀態(tài),以及互補輸出比較狀態(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; / /設置通道設置通道1 1捕獲比較寄存器的脈沖值捕獲比較寄存器的脈沖值- -占空比為占空比為50% 50% TIM1_OCInitStructure.TIM_Pulse = CCR1_Val; TIM1_OCInitStructure.TIM_Pulse = CCR1_Val; / /輸出極性和互補極性的有效電平為低輸出極性和互補極性的有效電平為低 TIM1_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; TIM1_OCInitStructure.TIM_OCPolarity =

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論