《STM32Cube嵌入式系統(tǒng)應(yīng)用》 習(xí)題及答案_第1頁
《STM32Cube嵌入式系統(tǒng)應(yīng)用》 習(xí)題及答案_第2頁
《STM32Cube嵌入式系統(tǒng)應(yīng)用》 習(xí)題及答案_第3頁
《STM32Cube嵌入式系統(tǒng)應(yīng)用》 習(xí)題及答案_第4頁
《STM32Cube嵌入式系統(tǒng)應(yīng)用》 習(xí)題及答案_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

《STM32Cube嵌入式系統(tǒng)應(yīng)用》標(biāo)準(zhǔn)庫習(xí)題答案第1章【答案】2.簡述馮·諾依曼結(jié)構(gòu)和哈佛結(jié)構(gòu)的區(qū)別?!敬鸢浮俊敬鸢浮?.什么是嵌入式系統(tǒng)?【答案】5.嵌入式系統(tǒng)與通用計(jì)算機(jī)系統(tǒng)的異同點(diǎn)?【答案】6.嵌入式系統(tǒng)的特點(diǎn)主要有哪些?【答案】7.常見的嵌入式操作系統(tǒng)有哪幾種?【答案】8.ARM處理器有什么特點(diǎn)?【答案】因?yàn)锳RM處理器采用RISC結(jié)構(gòu),所以它具有RISC架構(gòu)的一些經(jīng)典特點(diǎn)。(1)體積小、功耗低、成本低、性能高。(2)支持Thumb(16位)/ARM(32位)雙指令集,能很好地兼容8位/16位器件。(3)大量使用寄存器,指令執(zhí)行速度更快。(4)大多數(shù)數(shù)據(jù)操作都在寄存器中完成。(5)尋址方式靈活簡單,執(zhí)行效率高。內(nèi)含嵌入式在線仿真器。9.簡述ARM處理器的應(yīng)用領(lǐng)域。【答案】ARM處理器可廣泛應(yīng)用于以下領(lǐng)域。(1)為通信、消費(fèi)電子、成像設(shè)備等產(chǎn)品,提供可運(yùn)行復(fù)雜操作系統(tǒng)的開放應(yīng)用平臺。(2)在海量存儲、汽車電子、工業(yè)控制和網(wǎng)絡(luò)應(yīng)用等領(lǐng)域,提供實(shí)時(shí)嵌入式應(yīng)用。在軍事、航天等領(lǐng)域,提供寬溫、抗電磁干擾、耐腐蝕的復(fù)雜嵌入式應(yīng)用。10.什么嵌入式微處理器分類?!敬鸢浮壳度胧轿⑻幚砥?、嵌入式微控制器、嵌入式DSP、嵌入式SoCCortex-M系列處理器有哪些特征?【答案】Cortex-M系列處理器的特征如下:第2章【答案】【答案】【答案】如果HSE晶體振蕩器失效,HSI時(shí)鐘會(huì)被作為備用時(shí)鐘源?!敬鸢浮縇SI校準(zhǔn)的分四步進(jìn)行:【答案】【答案】【答案】第3章1.STM32CubeMX軟件是什么?【答案】STM32CubeMX軟件是ST有限公司為STM32系列微控制器快速建立工程,并快速初始化使用到的外設(shè)、GPIO等而設(shè)計(jì)的,大大縮短了開發(fā)時(shí)間。2.STM32CubeMX軟件的特點(diǎn)是什么?【答案】(1)集成了ST有限公司的每一款型號的MCU/MPU的可配置的圖形界面,能夠自動(dòng)提示IO沖突并且對于復(fù)用IO可自動(dòng)分配。(2)具有動(dòng)態(tài)驗(yàn)證的時(shí)鐘樹。(3)能夠很方便的使用所集成的中間件。(4)能夠估算MCU/MPU在不同主頻運(yùn)行下的功耗。(5)能夠輸出不同編譯器的工程,比如能夠直接生成MDK、EWARM、STM32CubeIDE、MakeFile等工程。3.STM32CubeMX軟件的工作區(qū)有哪4個(gè)界面?(1)Pinout&Configuration(引腳與配置)界面,這是對MCU的系統(tǒng)內(nèi)核、外設(shè)、中間件和引腳進(jìn)行配置的界面,是主要的工作界面。(2)ClockConfiguration(時(shí)鐘配置)界面,通過圖形化的時(shí)鐘樹對MCU的各個(gè)時(shí)鐘信號頻率進(jìn)行配置的界面。(3)ProjectManager(項(xiàng)目管理)界面,對項(xiàng)目進(jìn)行各種設(shè)置的界面。(4)Tools(工具)界面,進(jìn)行功耗計(jì)算、DDRSDRAM適用性分析(僅用于STM32MP1系列)的操作界面。第4章1.STM32CubeIDE軟件是什么?【答案】STM32CubeIDE是STM32Cube生態(tài)系統(tǒng)中的一個(gè)重要軟件工具,是ST官方免費(fèi)提供的STM32MCU/MPU程序開發(fā)IDE軟件。2.STM32CubeIDE有什么特點(diǎn)?【答案】STM32CubeIDE就是在TrueSTUDIO基礎(chǔ)上改進(jìn)和升級得來的,有如下一些特點(diǎn)。(1)STM32CubeIDE使用的是EclipseIDE環(huán)境,具有強(qiáng)大的編輯功能,其使用習(xí)慣與TrueSTUDIO相同。(2)STM32CubeIDE使用的是GNUC/C++編譯器,支持在STM32項(xiàng)目開發(fā)中使用C++編程。(3)STM32CubeIDE內(nèi)部集成了STM32CubeMX,在STM32CubeIDE里就可以進(jìn)行MCU圖形化配置和代碼生成,然后在初始代碼基礎(chǔ)上繼續(xù)編程。當(dāng)然,STM32CubeIDE也可以和獨(dú)立的STM32CubeMX配合使用。3.STM32CubeProgrammer軟件有什么特色?(1)可對片內(nèi)Flash進(jìn)行擦除或編程以及查看Flash內(nèi)容。

(2)支持s19、hex、elf和bin等格式的文件。

(3)支持調(diào)試接口或bootloader接口。=1\*GB3①STLINK調(diào)試接口(JTAG/SWD)=2\*GB3②UART或USBDFUbootloader接口

(4)支持對外部的存儲器的擦除或編程。

(5)支持STM32芯片的自動(dòng)編程(擦除、校驗(yàn)、編程、選項(xiàng)字配置)。

(6)支持對STM32片內(nèi)OTP區(qū)域的編程。

(7)既支持圖形化界面操作也支持命令行操作。

(8)支持對ST-Link調(diào)試器的在線固件升級。

(9)配合STM32TrustedPackageCreatortool實(shí)現(xiàn)固件加密操作。

(10)支持Windows、Linux和MacOS多種操作系統(tǒng)。第5章1.列舉GPIO的工作模式?!敬鸢浮浚?)輸入浮空模式。(2)輸入上拉模式。(3)輸入下拉模式。(4)模擬功能模式。(5)具有上拉/下拉功能的開漏輸出模式。(6)具有上拉/下拉功能的推挽輸出模式。(7)具有上拉/下拉功能的復(fù)用功能推挽模式。(8)具有上拉/下拉功能的復(fù)用功能開漏模式。2.STM32F407系列微控制器每個(gè)GPIO端口有__16個(gè)__引腳。3.當(dāng)引腳被配置為模擬功能模式時(shí),上拉/下拉功能應(yīng)被_禁止_。4.當(dāng)引腳被配置為輸出模式,而輸出類型被配置為開漏時(shí),引腳要輸出高電平,需要__使能引腳上拉功能____。5.控制引腳輸出電平時(shí),需要操作__ODR____寄存器;獲取引腳狀態(tài)需要操作__IDR____寄存器。6.在stm32f407的庫函數(shù)中,使能GPIOA時(shí)鐘,使用的庫函數(shù)是_voidRCC_AHB2PeriphClockCmd(uint32_tRCC_AHB2Periph,FunctionalStateNewState)____。7.在stm32f407的庫函數(shù)中,初始化GPIO功能,使用的庫函數(shù)是voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct)____。8.當(dāng)要同時(shí)初始化某個(gè)GPIO的1號、2號引腳,賦給GPIO_InitTypeDef結(jié)構(gòu)體類型成員GPIO_Pin的值是__GPIO_Pin_1|GPIO_Pin_2____。9.在stm32f407的庫函數(shù)中,讀取某個(gè)特定GPIO引腳狀態(tài),使用的庫函數(shù)是GPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)____。10.在stm32f407的庫函數(shù)中,設(shè)定某些特定GPIO引腳輸出狀態(tài),使用的庫函數(shù)是voidGPIO_WriteBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,BitActionBitVal)。11.結(jié)合電路說明推挽輸出和開漏輸出的區(qū)別?!敬鸢浮吭谕仆燧敵鱿拢敵鲭娐分杏蠵MOS和NMOS管組成的推挽結(jié)構(gòu)電路,當(dāng)ODR寄存器中對應(yīng)位寫‘1’時(shí),NMOS管截止,PMOS管導(dǎo)通,引腳輸出高電平。當(dāng)ODR寄存器中對應(yīng)位寫‘0’時(shí),NMOS管導(dǎo)通,PMOS管截止,引腳輸出低電平。在開漏輸出下,輸出電路中有只有NMOS管,當(dāng)ODR寄存器中對應(yīng)位寫‘1’時(shí),NMOS管截止,這是引腳處于浮空狀態(tài),必須通過上拉電阻使引腳輸出高電平。當(dāng)ODR寄存器中對應(yīng)位寫‘0’時(shí),NMOS管導(dǎo)通,PMOS管截止,引腳輸出低電平。12.當(dāng)把引腳配置為模擬輸入模式時(shí),那么它是否還具備耐5V功能?【答案】不具備耐5V功能。此時(shí),引腳輸入通道和數(shù)字電路隔離,處于模擬電路狀態(tài)13.簡述片上外設(shè)使用初始化流程。【答案】(1)使能GPIO的時(shí)鐘(非常重要),涉及以下文件。(2)設(shè)置對應(yīng)于片上外設(shè)使用的GPIO工作模式。(3)如果使用復(fù)用功能,需要單獨(dú)設(shè)置每一個(gè)GPIO引腳的復(fù)用功能。(4)在應(yīng)用程序中讀取引腳狀態(tài)、控制引腳輸出狀態(tài)或使用復(fù)用功能完成特定功能。14.編寫程序,將GPIOD的1號、3號、5號、7號、9號引腳配置為推挽輸出模式,速度為50MHz,將0、2號、4號、6號、8號引腳配置為上拉輸入模式?!敬鸢浮縂PIO_InitTypeDefGPIO_InitStructure;RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_GPIOD,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_6|GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOD,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOD,&GPIO_InitStructure);15.編寫程序,將GPIOD的1號、5號、7號引腳輸出高電平,3號、9號引腳輸出低電平,并將引腳2號、6號、8號上的狀態(tài)讀到處理器中?!敬鸢浮縰nsignedshortinta,b,c;GPIO_SetBits(GPIOD,GPIO_Pin_1|GPIO_Pin_5|GPIO_Pin_7);GPIO_ResetBits(GPIOD,GPIO_Pin_3|GPIO_Pin_9);a=GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_2);b=GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_6);c=GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_8);16.有獨(dú)立按鍵電路,連接在STM32F407ZGT6微控制器的GPIOE的5號引腳,要求在每次按鍵后將連接GPIOB的2號引腳上的LED燈反轉(zhuǎn),電路如圖所示。請編寫程序?qū)崿F(xiàn)按鍵動(dòng)作的檢測,編寫以下程序。(1)主程序。(2)連接按鍵引腳和LED引腳的初始化程序。(3)按鍵檢測程序。假設(shè)已有延時(shí)函數(shù)voiddelay_ms(u16nms);,此函數(shù)可直接調(diào)用。【答案】#defineKEY_ON 1#defineKEY_OFF 0GPIO_TogglePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin){if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin))GPIO_ResetBits(GPIOx,GPIO_Pin);elseGPIO_SetBits(GPIOx,GPIO_Pin);}(1)intmain(void){delay_init(168);//初始化延時(shí)函數(shù) LED_GPIO_Config(); Key_GPIO_Config(); while(1) { if(Key_Scan(GPIOE,GPIO_Pin_5)==KEY_ON) { GPIO_TogglePin(GPIOB,GPIO_Pin_2); }}}(2)voidKey_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_GPIOE,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOE,&GPIO_InitStructure);}voidLED_GPIO_Config(void){ GPIO_InitTypeDefGPIO_InitStructure;RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);}(3)uint8_tKey_Scan(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin){ if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON) { delay_ms(100);//去抖動(dòng) if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON) return KEY_ON; else returnKEY_OFF; } else returnKEY_OFF;}17.有矩陣按鍵,其電路如圖所示。(1)矩陣按鍵掃描原理和流程圖。(2)編寫程序?qū)崿F(xiàn)矩陣按鍵控制,按鍵S1~S4分別對應(yīng)數(shù)字1~4(引腳初始化程序和按鍵控制程序)?!敬鸢浮浚?)①將列線設(shè)置為輸出模式(圖中PB0和PB1),并分別在PB0和PB1上輸出低電平。行線設(shè)置為輸入模式(圖中PB2和PB3)。都使能上拉。②讀取PB2和PB3狀態(tài),判斷是否有按鍵按下。(判斷原則:PB2和PB3都是高電平時(shí),沒有按鍵按下。PB2和PB3有任何一個(gè)為低電平是,有按鍵按下。判斷原理:在沒有按鍵按下去的時(shí)候,由于上拉電阻的存在,PB2和PB3都是高電平,讀取狀態(tài)時(shí),PB2=1,PB3=1。如果有按鍵按下去的話,摸一個(gè)行線和列線連接在一起。由于PB0和PB1都為低電平,因此連接在一起的行線會(huì)被列線下拉到低電平。這時(shí),在讀取PB2和PB3狀態(tài)時(shí),就不會(huì)全是高電平。例如:當(dāng)按下S1時(shí),PB1和PB2連在一起,PB2被PB1拉低到低電平。讀取PB2和PB3狀態(tài)時(shí),PB2=0,PB3=1。)有按鍵按下則繼續(xù)③,反之則結(jié)束。③延時(shí)去抖動(dòng)。典型值是延時(shí)10ms,不同的按鍵類型,時(shí)間長度不一樣。④在此判斷是否有按鍵按下,原理同步驟②②④都判斷有按鍵按下時(shí),繼續(xù)⑤。反之則結(jié)束。⑤保存讀取的PB2和PB3的狀態(tài),作為判別行號的依據(jù)。⑥將行線設(shè)置為輸出模式(圖中PB2和PB3),并分別在PB2和PB3上輸出低電平。列線設(shè)置為輸入模式(圖中PB0和PB1)。都使能上拉。⑦讀取PB0和PB1的狀態(tài),并保存。作為判別列線的依據(jù)。⑧根據(jù)⑤⑦兩個(gè)步得到的信息,算出是哪一個(gè)按鍵被按下去了。矩陣鍵盤掃描流程圖:(2)/*將列設(shè)置為輸入,行設(shè)置為輸出*/voidGPIO_LieIN_HangOUT(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOB,&GPIO_InitStructure);}/*將列設(shè)置為輸出,行設(shè)置為輸入*/voidGPIO_LieOUT_HangIN(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOB,&GPIO_InitStructure);}voidKEY_SCAN(void){u8Lie_Data,Hang_Data;GPIO_LieOUT_HangIN();GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1);//將列設(shè)置為低電平,掃描行if((GPIO_ReadInputData(GPIOB)&0x0a)!=0x0a){ delay_ms(100);//去抖動(dòng) if((GPIO_ReadInputData(GPIOB)&0x0a)!=0x0a) { Hang_Data=GPIO_ReadInputData(GPIOB)&0x0a;//保存行掃描結(jié)果 GPIO_LieIN_HangOUT(); GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1);//將行設(shè)置為低電平,掃描列 Lie_Data=GPIO_ReadInputData(GPIOB)&0x0a;//保存列掃描結(jié)果 switch(Hang_Data|Lie_Data) { case0x09:// return(1); break; case0xa:// return(2); break; case0x05:// return(3); break; case0x06:// return(4); break; default: break; } } } else return(0); }第6章1.簡述STM32F407微控制器中的NVIC中斷管理方法?!敬鸢浮緾ortex-M4內(nèi)核中定義了兩個(gè)優(yōu)先級的概念:搶占優(yōu)先級和響應(yīng)優(yōu)先級,每個(gè)中斷源都需要被指定這兩種優(yōu)先級,由兩者的組合得到中斷的優(yōu)先級別。NVIC對中斷優(yōu)先級的管理方法如下。(1)搶占優(yōu)先級較高的中斷可以打斷正在進(jìn)行的搶占優(yōu)先級較低的中斷,不同搶占優(yōu)先級的中斷可以實(shí)現(xiàn)中斷的嵌套。(2)搶占優(yōu)先級相同的中斷,響應(yīng)優(yōu)先級高的不可以打斷響應(yīng)優(yōu)先級低的中斷。(3)當(dāng)兩個(gè)搶占優(yōu)先級相同的中斷同時(shí)發(fā)生的情況下,哪個(gè)中斷響應(yīng)優(yōu)先級高,哪個(gè)中斷就先執(zhí)行。(4)(5)如果兩個(gè)中斷的搶占優(yōu)先級和響應(yīng)優(yōu)先級都一樣,且同時(shí)請求,則根據(jù)異常中斷向量表中的排位順序決定哪個(gè)中斷先執(zhí)行。2.中斷優(yōu)先級編號越小,則其優(yōu)先級越高。3.中斷搶占優(yōu)先級高的是否可以搶占優(yōu)先級低的中斷流程?可以。4.響應(yīng)搶占優(yōu)先級高的是否可以搶占優(yōu)先級低的中斷流程?在搶占優(yōu)先級一致時(shí),不可以。5.兩個(gè)中斷搶占優(yōu)先級和響應(yīng)優(yōu)先級都相同,同時(shí)向內(nèi)核申請中斷,怎么響應(yīng)中斷?【答案】按照兩個(gè)中斷在中斷向量表中的位置決定。向量表中位置靠前的先被響應(yīng)。6.假定設(shè)置中斷優(yōu)先級組為1,然后設(shè)置:中斷3(RTC中斷)的搶占優(yōu)先級為1,響應(yīng)優(yōu)先級為1;中斷6(外部中斷0)的搶占優(yōu)先級為3,響應(yīng)優(yōu)先級為0;中斷7(外部中斷1)的搶占優(yōu)先級為1,響應(yīng)優(yōu)先級為6。那么,這3個(gè)中斷的優(yōu)先級順序?yàn)椋ㄓ筛叩降祝褐袛?、中斷7、中斷6。7.設(shè)置結(jié)構(gòu)體變量NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority和NVIC_InitStructure.NVIC_IRQChannelSubPriority,并初始化結(jié)構(gòu)體NVIC_Init(&NVIC_InitStructure);用于設(shè)置中斷搶占優(yōu)先級和子優(yōu)先級。8.設(shè)置結(jié)構(gòu)體NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE,并初始化結(jié)構(gòu)體NVIC_Init(&NVIC_InitStructure);用于使能中斷。9.voidNVIC_PriorityGroupConfig(uint32_tNVIC_PriorityGroup)函數(shù)用來配置中斷優(yōu)先級組。10.在頭文件stm32f4xx.h中定義的中斷編號,是以枚舉類型定義的。請問外部中斷0的編號是____6____。11.當(dāng)中斷優(yōu)先級組設(shè)置為2組時(shí),搶占優(yōu)先級和響應(yīng)優(yōu)先級可以分別設(shè)置為哪些優(yōu)先級?【答案】搶占優(yōu)先級:0~3響應(yīng)優(yōu)先級:0~312.編寫NVIC中斷初始化程序?qū)崿F(xiàn)如下功能。(1)設(shè)置中斷優(yōu)先級組為2組。(2)設(shè)置外部中斷2的搶占優(yōu)先級為0,響應(yīng)優(yōu)先級為2。(3)設(shè)置定時(shí)器2中斷的搶占優(yōu)先級為2,響應(yīng)優(yōu)先級為1。(4)設(shè)置USART2的中斷搶占優(yōu)先級為3,響應(yīng)優(yōu)先級為3。并說明當(dāng)同時(shí)出現(xiàn)以上3個(gè)中斷請求時(shí),中斷服務(wù)程序執(zhí)行的順序?!敬鸢浮縮taticvoidMX_NVIC_Init(void){NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDefNVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);NVIC_InitTypeDefNVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);NVIC_InitTypeDefNVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);}//初始化函數(shù)結(jié)束外部中斷2、定時(shí)器2中斷、USART2的中斷13.外部中斷的中斷請求信號可以是控制器外部產(chǎn)生由GPIO引腳引入的,也可以是由控制器內(nèi)部一些片上外設(shè)產(chǎn)生的。這一說法是否正確?___正確_____。14.每個(gè)GPIO引腳都可以作為外部中斷信號輸入引腳,GPIO引腳編號相同的映射到同一個(gè)EXTI線,那么GPIOA的0號引腳映射到EXTI線___0_____,GPIOD的0號引腳映射到EXTI線_____0___,GPIOC的5號引腳映射到EXTI線_____5___,GPIOG的10號引腳映射到EXTI線____10____。15.外部中斷信號輸入的觸發(fā)信號形式可以是__上升沿觸發(fā)_、_下降沿觸發(fā)_、_邊沿觸發(fā)_、。16.每個(gè)外部中斷在中斷向量表中,是否都獨(dú)立占用一個(gè)位置?__不是__17.外部中斷___5~9_____共用一個(gè)中斷向量和外部中斷__10~15__共用一個(gè)中斷向量。18.外部中斷的中斷0在庫函數(shù)啟動(dòng)文件中定義的默認(rèn)中斷函數(shù)名是__EXTI0_IRQHandler__。19.結(jié)構(gòu)體\o"EXTIInitStructuredefinition."EXTI_InitTypeDefEXTI_InitStructure有什么功能?【答案】配置EXTI中斷線。20.函數(shù)voidNVIC_Init(NVIC_InitTypeDef*NVIC_InitStruct)有什么功能?【答案】初始化中斷優(yōu)先級和使能狀態(tài)。21.應(yīng)用外部中斷,需要先使能GPIO端口的時(shí)鐘和___SYSCFG___時(shí)鐘。22.試述初始化外部中斷的步驟?!敬鸢浮浚?)使能用到GPIO時(shí)鐘。(2)初始化相應(yīng)GPIO的引腳為輸入。(3)設(shè)置GPIO引腳與EXTI線的映射關(guān)系。(4)初始化工作類型、設(shè)置觸發(fā)條件、使能等等。(5)配置中斷分組(NVIC),并初始化相應(yīng)中斷通道的優(yōu)先級及使能/禁止。(6)編寫中斷服務(wù)函數(shù)。(7)編寫中斷服務(wù)程序處理內(nèi)容。23.初始化外部中斷1:將GPIOA的1號引腳作為輸入引腳,中斷模式,上升沿觸發(fā),中斷優(yōu)先級組為3組,搶占優(yōu)先級為3,響應(yīng)優(yōu)先級為1,并使能中斷。GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOA,&GPIO_InitStructure);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource1);EXTI_InitStructure.EXTI_Line=EXTI_Line1;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);NVIC_InitStruct.NVIC_IRQChannel=EXTI1_IRQn;NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=3;NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;NVIC_Init(&NVIC_InitStruct);24.外部中斷被掛起后,不能硬件清除,需要在相應(yīng)的中斷服務(wù)程序中將掛起標(biāo)志清除,使用的函數(shù)是__voidEXTI_ClearITPendingBit(uint32_tEXTI_Line)。25.根據(jù)下圖所示,編寫程序以完成外部中斷初始化,中斷輸入引腳為PE5,上升沿檢測方式?!敬鸢浮縀XTI_InitTypeDefEXTI_InitStructure;NVIC_InitTypeDefNVIC_InitStructure;//-------------------第1步--------------------/*初始化IO口為輸入*/GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOE,&GPIO_InitStructure);//-------------------第2步--------------------/*開啟IO口復(fù)用時(shí)鐘。*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//-------------------第3步--------------------/*設(shè)置IO口與中斷線的映射關(guān)系。*/GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource5);//-------------------第4步--------------------/*初始化線上中斷,設(shè)置觸發(fā)條件等。*/EXTI_InitStructure.EXTI_Line=EXTI_Line1;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);//-------------------第5步--------------------/*配置中斷分組(NVIC),并使能中斷。*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStruct.NVIC_IRQChannel=EXTI1_IRQn;NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;NVIC_Init(&NVIC_InitStruct);15.編寫14題的外部中斷的服務(wù)程序,完成LED燈(PB2)的開關(guān)控制?!敬鸢浮縂PIO_TogglePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin){if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin))GPIO_ResetBits(GPIOx,GPIO_Pin);elseGPIO_SetBits(GPIOx,GPIO_Pin);}voidEXTI5_IRQHandler(void){ //LED狀態(tài)轉(zhuǎn)換 GPIO_TogglePin(GPIOB,GPIO_Pin_2);}第7章1.STM32F407定時(shí)器的計(jì)數(shù)方式有__遞增計(jì)數(shù)__、__遞減計(jì)數(shù)_、___中心對齊_。2.STM32F407計(jì)數(shù)寄存器是__TIMx_CNT__,自動(dòng)重載寄存器是__TIMx_ARR_,預(yù)分頻寄存器是__TIMx_PSC__。3.若TIMx_PSC=4,則時(shí)鐘源的預(yù)分頻系數(shù)是____5____。4.若TIMx_ARR=89,則一次計(jì)數(shù)溢出的計(jì)數(shù)次數(shù)是___90_____。5.什么是PWM信號?什么是占空比?請繪圖舉例。【答案】PWM(PulseWidthModulation):脈沖寬度調(diào)制,簡稱脈寬調(diào)制。PWM信號:周期內(nèi)高電平占空比可調(diào)的信號。占空比:一個(gè)周期內(nèi)高電平持續(xù)時(shí)間與一個(gè)周期時(shí)間的比值。6.遞增計(jì)數(shù)模式是從0計(jì)數(shù)到___ARR_____的值,然后產(chǎn)生一次__溢出事件___。7.遞減計(jì)數(shù)模式是從_ARR_計(jì)數(shù)到0的值,然后產(chǎn)生一次向下溢出。中心對齊計(jì)數(shù)模式是先以遞增計(jì)數(shù)模式,從0計(jì)數(shù)到__ARR-1___,然后產(chǎn)生一次向上溢出,再在從___ARR_____計(jì)數(shù)到____1____,然后產(chǎn)生一次向下溢出。8.當(dāng)使能了比較輸出功能,輸出PWM波,在邊沿比較模式下,寄存器___ARR_____控制PWM周期,寄存器___CCR___控制占空比。9.當(dāng)使能了比較輸出功能,輸出PWM波,在邊沿比較模式下,當(dāng)TIMx_CNT計(jì)數(shù)值在_0~CCR-1寄存器___范圍時(shí),輸出有效電平;在CCR~ARR范圍時(shí),輸出反向電平。10.【答案】11.編程序,使用TIM1產(chǎn)生1s的定時(shí)?!敬鸢浮縏IM1掛載在APB2總線上,在系統(tǒng)時(shí)鐘=180MHz時(shí),PCLK2=90MHz,TIM1的內(nèi)部時(shí)鐘源=PCLK2*2=180MHz。Tout(定時(shí)時(shí)間)=1s=(ARR+1)(PSC+1)/1800000000,則可以取PSC=18000-1,ARR=10000-1。/*-------------------第1步--------------------*/ //開啟TIM1時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); /*-------------------第2步--------------------*/TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;TIM_TimeBaseStructure.TIM_Period=10000-1;TIM_TimeBaseStructure.TIM_Prescaler=18000-1;TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseStructure.TIM_RepetitionCounter=0;TIMTIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);TIM_ClearFlag(TIM1,TIM_FLAG_Update);TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);TIM_Cmd(TIM1,ENABLE); /*-------------------第3步--------------------*///配置中斷分組(NVIC),并使能中斷。NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);NVIC_InitStruct.NVIC_IRQChannel=EXTI1_IRQn;NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;NVIC_Init(&NVIC_InitStruct);12.編程序,使用TIM3產(chǎn)生PWM波?!敬鸢浮浚?)通過TIM3的CH1輸出PWM波。(2)PWM波周期為200KHz,占空比為20%。(3)TIM3的CH1對用的引腳為PA6。GPIO_InitTypeDefGPIO_InitStruct;TIM_TimeBaseInitTypeDefTIM_InitStruct;TIM_OCInitTypeDefTIM_OCInitStruct; /*-------------------第1步--------------------*/ /*開啟相關(guān)的GPIO外設(shè)時(shí)鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能TIM3時(shí)鐘RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); /*-------------------第2步--------------------*/ /*TIM3輸出通道1引腳配置*/GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct); /*-------------------第3步--------------------*/ //定時(shí)器時(shí)鐘源TIMxCLK=HCLK/2=90MHz //設(shè)定定時(shí)器頻率為=TIMxCLK/(TIM_Prescaler+1)=200KHz //定義PWM波的周期//當(dāng)定時(shí)器從0計(jì)數(shù)到999,即為1000次,為一個(gè)定時(shí)周期TIM_InitStruct.TIM_Prescaler=449;TIM_InitStruct.TIM_Period=999;TIM_InitStruct.TIM_ClockDivision=TIM_CKD_DIV1;TIM_InitStruct.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInit(TIM3,&TIM_InitStruct);TIM_InternalClockConfig(TIM3);TIM_SelectOutputTrigger(TIM3,TIM_TRGOSource_Reset);TIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Disable); /*-------------------第4步--------------------*/ /*設(shè)置比較輸出通道,PWM模式配置*/TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;TIM_OCInitStruct.TIM_Pulse=200;TIM_OC1Init(TIM3,&TIM_OCInitStruct);TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable); /*-------------------第5步--------------------*/ //使能定時(shí)器TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);TIM_Cmd(TIM3,ENABLE);13.編程序,使用TIM2檢測外部一未知時(shí)鐘的頻率。【答案】信號從TIM2的通道1輸入。使用的引腳是PA5。定時(shí)器初始化voidTIM_Config_IC(void){GPIO_InitTypeDefGPIO_InitStructure;TIM_TimeBaseInitTypeDefTIM_TimeBaseStructInit;TIM_ICInitTypeDefTIM_ICInitStruct;NVIC_InitTypeDefNVIC_InitStructure; /*-------------------第1步--------------------*/ //使能TIM2和相關(guān)GPIO時(shí)鐘RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//開啟APB時(shí)鐘函數(shù)RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); /*-------------------第2步--------------------*/ //配置輸入通道引腳GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);\o"Changesthemappingofthespecifiedpin."GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,\o"AF2selection."GPIO_AF_TIM2); /*-------------------第3步--------------------*/ //初始化定時(shí)器測量時(shí)鐘 //定時(shí)器時(shí)鐘源TIMxCLK=HCLK/2=90MHz //設(shè)定定時(shí)器頻率為=TIMxCLK/(TIM_Prescaler+1)=100KHzTIM_TimeBaseStructInit.TIM_Prescaler=89;TIM_TimeBaseStructInit.TIM_CounterMode=TIM_CounterMode_Up;//計(jì)數(shù)方式TIM_TimeBaseStructInit.TIM_Period=4074967295;TIM_TimeBaseStructInit.TIM_ClockDivision=TIM_CKD_DIV1;//采樣時(shí)鐘分頻TIM_TimeBaseStructInit.TIM_RepetitionCounter=0;TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructInit);//設(shè)置TIM2內(nèi)部時(shí)鐘源TIM_InternalClockConfig(TIM2); /*-------------------第4步--------------------*///設(shè)置觸發(fā)相關(guān)參數(shù)TIM_SelectSlaveMode(TIM2,TIM_SlaveMode_Reset);TIM_SelectInputTrigger(TIM2,TIM_TS_TI1FP1);\o"SelectstheTIMxTriggerOutputMode."TIM_SelectOutputTrigger(TIM2,TIM_TRGOSource_Update);\o"SetsorResetstheTIMxMaster/SlaveMode."TIM_SelectMasterSlaveMode(TIM2,TIM_MasterSlaveMode_Disable); /*-------------------第5步--------------------*/ //設(shè)置捕獲相關(guān)參數(shù) TIM_ICInitStruct.TIM_ICPolarity=TIM_ICPolarity_Rising;//捕抓到上升沿時(shí),把計(jì)數(shù)寄存器中的值所存到CCR2寄存器TIM_ICInitStruct.TIM_ICSelection=TIM_ICSelection_DirectTI;//一對一連接TIM_ICInitStruct.TIM_ICPrescaler=TIM_ICPSC_DIV1;TIM_ICInitStruct.TIM_ICFilter=0;TIM_ICInitStruct.TIM_Channel=TIM_Channel_1;TIM_ICInit(TIM2,&TIM_ICInitStruct);/*-------------------第6步--------------------*///開啟定時(shí)器中斷NVIC_InitStruct.NVIC_IRQChannel=TIM2_IRQn;NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;NVIC_Init(&NVIC_InitStruct);(2)中斷服務(wù)程序,實(shí)現(xiàn)頻率計(jì)算voidTIM2_IRQHandler(void){if(TIM_GetFlagStatus(TIM2,TIM_FLAG_CC1)!=RESET) { /*清除定時(shí)器捕獲/比較1中斷*/TIM_ClearITPendingBit(TIM2,TIM_IT_CC1); /*獲取輸入捕獲值*/ IC_Value=TIM_GetCapture1(TIM2);//得到PWM周期 /*頻率計(jì)算*/ Frequency=90000000/90/(float)IC_Value; printf("頻率:%0.2fHz\r\n",Frequency); }}第8章串行異步通信數(shù)據(jù)格式是什么?用圖說明?!敬鸢浮俊敬鸢浮?600?!敬鸢浮縐SART的工作原理:通用同步異步收發(fā)器(USART)提供了一種靈活的方法,與使用工業(yè)標(biāo)準(zhǔn)的異步串行外部設(shè)備之問進(jìn)行全雙工數(shù)據(jù)交換。USART利用分?jǐn)?shù)比特率發(fā)生器提供寬范圍的比特率選擇。USART外部接口通過3個(gè)引腳與其他設(shè)備連接在一起。任何USART雙向通信至少需要兩個(gè)腳:接收數(shù)據(jù)輸入(RX)和發(fā)送數(shù)據(jù)輸出(TX)?!敬鸢浮縐SART數(shù)據(jù)接收配置步驟如下:通過調(diào)用USART_Cmd來激活USART;通過配置結(jié)構(gòu)體USART_InitTypeDef的成員USART_WordLength來定義字長;通過配置結(jié)構(gòu)體USART_InitTypeDef的成員USART_StopBits編程停止位的位數(shù);如果采用多緩沖器通信,配置DMA_Cmd函數(shù)進(jìn)行使能。按多緩沖器通信中的描述配置DMA;通過配置結(jié)構(gòu)體USART_InitTypeDef的成員USART_BaudRate要求的比特率調(diào)用函數(shù)USART_ReceiveData來讀取接收緩沖其中的字符【答案】當(dāng)使用USART模塊進(jìn)行全雙工異步通信時(shí),需要配置波特率、數(shù)據(jù)位數(shù)、奇偶校驗(yàn)、硬件流控制、停止位數(shù)、工作模式。【答案】編程代碼如下:voidMX_USART1_UART_Init(void){USART_InitTypeDefUSART_InitStructure;USART_InitStructure.USART_BaudRate=115200;USART_InitStructure.USART_WordLength=USART_WordLength_8b;USART_InitStructure.USART_StopBits=USART_StopBits_1;USART_InitStructure.USART_Parity=USART_Parity_No;USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_OverSampling8Cmd(USART1,DISABLE);USART_Init(USART1,&USART_InitStructure);USART_Cmd(USART1,ENABLE);}【答案】USART的各種中斷事件被連接到同一個(gè)中斷向量,有以下幾種中斷事件:發(fā)送期間:發(fā)送完成中斷、清除發(fā)送中斷、發(fā)送數(shù)據(jù)寄存器空中斷。接收期間:空閑總線檢測中斷、溢出錯(cuò)誤中斷、接收數(shù)據(jù)寄存器非空中斷、檢驗(yàn)錯(cuò)誤中斷、LIN斷開符號檢測中斷、噪聲中斷(僅在多緩沖器通信)和幀錯(cuò)誤中斷(僅在多緩沖器通信)。8.編程序配置STM32F407微控制器的USART2為以下功能:波特率=9600bps,8位有效數(shù)據(jù)位、無奇偶校驗(yàn)、無硬件流控、使能接收和發(fā)送、使能接收中斷。【答案】USART2發(fā)送引腳TX:PA2USART2接收引腳RX:PA3voidUSART_Config(void){GPIO_InitTypeDefGPIO_InitStructure; /*-------------------第1步--------------------*/ /*使能GPIOA時(shí)鐘*/RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);/*使能USART2時(shí)鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART2,ENABLE); /*-------------------第2步--------------------*/ //配置串口相關(guān)復(fù)用引腳 /*復(fù)用PA2、PA3到USART2*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULLGPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART1);GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART1);GPIO_Init(GPIOA,&GPIO_InitStructure); /*-------------------第3步--------------------*//*配置USART2模式*/USART_InitTypeDefUSART_InitStructure;USART_InitStructure.USART_BaudRate=9600;//波特率USART_InitStructure.USART_WordLength=USART_WordLength_8b;//8位數(shù)據(jù)位USART_InitStructure.USART_StopBits=USART_StopBits_1;//1位停止位USART_InitStructure.USART_Parity=USART_Parity_No;//無奇偶校驗(yàn)USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//收發(fā)模式USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_Init(USART2,&USART_InitStructure);USART_Cmd(USART2,ENABLE); /*-------------------第4步--------------------*/ //初始化NVIC中的USART2中斷通道NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//選擇嵌套向量中斷控制器組2NVIC_InitStruct.NVIC_IRQChannel=USART2_IRQn;NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;NVIC_Init(&NVIC_InitStruct); //使能串口的RXNE中斷 USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);///使能串口的RXNE中斷 }9.編寫USART2接收中斷的程序。【答案】#defineBUFFERSIZE

(COUNTOF(aTxBuffer)-1)voidUSART2_IRQHandler(void){uint16_tubRxIndex=0x00;uint8_taTxBuffer[];/*USARTinReceivermode*/if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET){if(ubRxIndex<BUFFERSIZE){/*ReceiveTransactiondata*/aRxBuffer[ubRxIndex++]=USART_ReceiveData(USART2);}else{/*DisabletheRxbuffernotemptyinterrupt*/USART_ITConfig(USART2,USART_IT_RXNE,DISABLE);}}10.編寫USART2查詢式發(fā)送數(shù)據(jù)的程序?!敬鸢浮?將字符ch發(fā)送出去。/*發(fā)送一個(gè)字節(jié)數(shù)據(jù)到USART*/ USART_SendData(USART2,(uint8_t)ch); //發(fā)送接收到的數(shù)據(jù) /*等待發(fā)送數(shù)據(jù)寄存器為空*/ while(USART_GetFlagStatus(USART2,USART_FLAG_TC))!=SET); //等待發(fā)送結(jié)束11.怎么通過USART接收連續(xù)、不定長的數(shù)據(jù)流?【答案】這里提供兩種思路。1)使用定時(shí)器配合實(shí)現(xiàn)(1)USART接收到第一個(gè)字符后(中斷),啟動(dòng)一個(gè)定時(shí)器,定時(shí)時(shí)間大于一個(gè)USART數(shù)據(jù)幀時(shí)間。(2)后續(xù),USART每接收到一個(gè)字符,都重新啟動(dòng)定時(shí)器,從0開始計(jì)數(shù)器(只需要將CNT寄存器清0)。(3)在定時(shí)器產(chǎn)生溢出中斷后,表示USART數(shù)據(jù)接收結(jié)束。(因?yàn)檫B續(xù)接收數(shù)據(jù)的過程中斷了。)2)使用USART的IDLE中斷檢測數(shù)據(jù)接收結(jié)束需要使能USART_IT_RXNE和USART_IT_IDLE中斷。USART中斷中,如果判定是由于USART_IT_RXNE觸發(fā),則接收數(shù)據(jù)。USART中斷中,如果判定是由于USART_IT_IDLE觸發(fā),則表示數(shù)據(jù)接收。3)USART的IDLE中斷和DMA實(shí)現(xiàn)使能USART的USART_IT_IDLE中斷。使能USART的數(shù)據(jù)接收DMA,USART_DMAReq_Rx。在USART有數(shù)據(jù)接收時(shí),DMA直接將數(shù)據(jù)存儲到設(shè)定的存儲器區(qū)域。在觸發(fā)USART_IT_IDLE中斷后,表示數(shù)據(jù)接收結(jié)束,并根據(jù)此時(shí)DMA的數(shù)據(jù)計(jì)數(shù)器獲得接收數(shù)據(jù)的數(shù)量。第9章【答案】串行外設(shè)接口(SPI)允許芯片與外部設(shè)備以半/全雙工、同步、串行方式通信。此接口可以被配置成主模式,并為外部從設(shè)備提供通信時(shí)鐘(SCK)。SPI接口還能以多主配置方式工作,它有多種用途,如使用一條雙向數(shù)據(jù)線的雙線單工同步傳輸,還可使用CRC檢驗(yàn)的可靠通信。SPI的特點(diǎn)如下:3線全雙工同步傳輸。帶或不帶第3根雙向數(shù)據(jù)線的雙線單工同步傳輸。8或16位傳輸幀格式選擇。主或從操作。支持多主模式。8個(gè)主模式比特率預(yù)分頻系數(shù)(最大為fPCLK/2)。從模式頻率(最大為fPCLK/2)。主模式和從模式的快速通信,最大SPI速度達(dá)到18MHz。主模式和從模式下均可以由軟件或硬件進(jìn)行NSS管理,主/從操作模式的動(dòng)態(tài)改變??删幊痰臅r(shí)鐘極性和相位??删幊痰臄?shù)據(jù)順序,MSB在前或LSB在前??捎|發(fā)中斷的專用發(fā)送和接收標(biāo)志。SPI總線忙狀態(tài)標(biāo)志。支持可靠通信的硬件CRC。可觸發(fā)中斷的主模式故障、過載以及CRC錯(cuò)誤標(biāo)志。支持DMA功能的1字節(jié)發(fā)送和接收緩沖器,產(chǎn)生發(fā)送和接收請求?!敬鸢浮客ǔPI通過以下4個(gè)引腳與外部期間相連:MISO:主設(shè)備輸入/從設(shè)備輸出引腳。該管腳在從模式下發(fā)送數(shù)據(jù),在主模式下接收數(shù)據(jù)。MOSI:主設(shè)備輸出/從設(shè)備輸入引腳。該管腳在主模式下發(fā)送數(shù)據(jù),在從模式下接收數(shù)據(jù)。SCK:串口時(shí)鐘,作為主設(shè)備的輸出,從設(shè)備的輸入。NSS:從設(shè)備選擇。這是一個(gè)可選的引腳,用來選擇主/從設(shè)備。它的功能是用來作為“片選引腳”,讓主設(shè)備可以單獨(dú)地與特定從設(shè)備通信,避免數(shù)據(jù)線上的沖突。從設(shè)備的NSS引腳可以由主設(shè)備當(dāng)作一個(gè)標(biāo)準(zhǔn)的I/O來驅(qū)動(dòng)。一旦被使能(SSOE位),NSS引腳也可以作為輸出引腳,并在SPI設(shè)置為主模式時(shí)拉低;此時(shí),所有NSS引腳連接到主設(shè)備NSS引腳的SPI設(shè)備,會(huì)檢測到低電平,如果它們被設(shè)置為NSS硬件模式,就會(huì)自動(dòng)進(jìn)入從設(shè)備狀態(tài)?!敬鸢浮吭趶呐渲弥校琒CK引腳用于接收從主設(shè)備來的串行時(shí)鐘,配置步驟如下:設(shè)置結(jié)構(gòu)體SPI_InitTypeDef的成員SPI_DataSize,以定義數(shù)據(jù)幀格式為8位或16位。選擇SPI_CPOL和SPI_CPHA位來定義數(shù)據(jù)傳輸和串行時(shí)鐘之間的相位關(guān)系。為保證正確的數(shù)據(jù)傳輸,從設(shè)備和主設(shè)備的CPOL和CPHA位必須配置成相同的方式。幀格式(MSB在前還是LSB在前取決于結(jié)構(gòu)體SPI_InitTypeDef的成員SPI_FirstBit必須和主設(shè)備相同。硬件模式下,在完整的數(shù)據(jù)幀(8位或16位)發(fā)送過程中,NSS引腳必須為低電平。軟件模式下,設(shè)置為SPI_NSS_Soft。調(diào)用函數(shù)SPI_Cmd(),使相應(yīng)引腳工作于SPI模式下。在主配置時(shí),串行時(shí)鐘在SCK引腳產(chǎn)生,配置步驟如下:設(shè)置結(jié)構(gòu)體SPI_InitTypeDef的成員SPI_BaudRatePrescaler;定義串行時(shí)鐘比特率。設(shè)置結(jié)構(gòu)體SPI_InitTypeDef的成員SPI_DataSize,以定義數(shù)據(jù)幀格式為8位或16位。選擇CPOL和CPHA位來定義數(shù)據(jù)傳輸和串行時(shí)鐘之間的相位關(guān)系。幀格式(MSB在前還是LSB在前取決于結(jié)構(gòu)體SPI_InitTypeDef的成員SPI_FirstBit必須和主設(shè)備相同。如果NSS引腳需要工作在輸入模式,硬件模式中在整個(gè)數(shù)據(jù)幀傳輸期間應(yīng)把NSS腳連接到高電平:在軟件模式中,需設(shè)置結(jié)構(gòu)體SPI_InitTypeDef的成員SPI_NSS。如果NSS引腳工作在輸出模式,則只需設(shè)置SSOE位。必須調(diào)用函數(shù)SPI_Cmd()(只當(dāng)NSS腳被連到高電平,這些位才能保持置位)?!敬鸢浮繎?yīng)用程序通過BUSY、TXE和RXNE3個(gè)狀態(tài)標(biāo)志可以完全監(jiān)控SPI總線的狀態(tài)?!敬鸢浮縎PI總線初始化代碼如下:【答案】SPI的中斷請求有發(fā)送緩沖器空標(biāo)志;接收緩沖器非空標(biāo)志;主模式錯(cuò)誤事件;溢出錯(cuò)誤;CRC錯(cuò)誤標(biāo)志。第10章【答案】I2C(芯片間)總線接口連接微控制器和串行I2C總線,它提供多主機(jī)功能,控制所有I2C總線特定的時(shí)序、協(xié)議、仲裁和定時(shí),支持標(biāo)準(zhǔn)和快速兩種模式,同時(shí)與SMBus2.0兼容?!敬鸢浮縄2C模塊接收和發(fā)送數(shù)據(jù),并將數(shù)據(jù)從串行轉(zhuǎn)換成并行,或并行轉(zhuǎn)換成串行,可以開啟或禁止中斷。接口通過數(shù)據(jù)引腳(SDA)和時(shí)鐘引腳(SCL)連接到I2C總線,允許連接到標(biāo)準(zhǔn)(高達(dá)l00kHz)或快速(高達(dá)400kHz)的I2C總線。I2C模塊有多種用途,包括CRC碼的生成和檢驗(yàn)、SMBus(系統(tǒng)管理總線-SystemManagementBus)和PMBus(電源管理總線-PowerManagemcntBus)。根據(jù)特定設(shè)備的需要,可以使用DMA以減輕CPU的負(fù)擔(dān)?!敬鸢浮恐灰髢蓷l總線線路:一條串行數(shù)據(jù)線SDA,一條串行時(shí)鐘線SCL。每個(gè)連接到總線的器件都可以通過唯一的地址和一直存在的簡單的主機(jī)/從機(jī)關(guān)系軟件設(shè)定地址,主機(jī)可以作為主機(jī)發(fā)送器或主機(jī)接收器。它是一個(gè)真正的多主機(jī)總線,如果兩個(gè)或更多主機(jī)同時(shí)初始化,數(shù)據(jù)傳輸可以通過沖突檢測和仲裁防止數(shù)據(jù)被破壞。串行的8位雙向數(shù)據(jù)傳輸位速率在標(biāo)準(zhǔn)模式下可達(dá)100kbit/s,快速模式下可達(dá)400kbit/s,高速模式下可達(dá)3.4Mbit/s。連接到相同總線的IC數(shù)量只受到總線的最大電容400pF限制。I2C有4種模式可供選擇,可以4種模式中的一種運(yùn)行:從發(fā)送器模式。從接收器模式。主發(fā)送器模式。主接收器模式。【答案】I2C默認(rèn)工作于從模式。接口在生成起始條件后自動(dòng)從從模式切換到主模式:當(dāng)仲裁丟失或產(chǎn)生停止信號時(shí),則從主模式切換到從模式。允許多主機(jī)功能。主模式時(shí),I2C接口啟動(dòng)數(shù)據(jù)傳輸并產(chǎn)生時(shí)鐘信號。串行數(shù)據(jù)傳輸總是以起始條件開始并以停止條件結(jié)束。起始條件和停止條件都是在主模式下由軟件控制產(chǎn)生?!敬鸢浮吭谥髂J綍r(shí),I2C接口啟動(dòng)數(shù)據(jù)傳輸并產(chǎn)生時(shí)鐘信號。串行數(shù)據(jù)傳輸總是以起始條件_開始并以停止條件結(jié)束。當(dāng)通過庫函數(shù)voidI2C_GenerateSTART(I2C_TypeDef*I2Cx,FunctionalStateNewState);設(shè)置狀態(tài)參數(shù)為ENABLE在總線上產(chǎn)生了起始條件,設(shè)備就進(jìn)入了主模式,主模式所要求的操作順序。在I2C_InitStructure中設(shè)置I2C_ClockSpeed設(shè)定該模塊的輸入時(shí)鐘,以產(chǎn)生正確的時(shí)序。通過RCC_APB2PeriphClockCmd配置I2C的時(shí)鐘。在GPIO_InitStructure結(jié)構(gòu)體選擇scl和sda端口。I2C_Cmd(I2C,ENABLE);啟動(dòng)I2C外設(shè)。寫庫函數(shù)voidI2C_GenerateSTART(I2C_TypeDef*I2Cx,FunctionalStateNewState);產(chǎn)生起始條件。模塊的輸入時(shí)鐘頻率在標(biāo)準(zhǔn)模式下為2MHz,快速模式下為4MHz?!敬鸢浮坷肈MA發(fā)送:定義I2C結(jié)構(gòu)體\o"I2CInitstructuredefinition."I2C_InitTypeDefI2C_InitStructure;DMA配置結(jié)構(gòu)體\o"DMAInitstructuredefinition."DMA_InitTypeDefDMA_InitStructure;配置DMA通道,DMA_InitStructure.DMA_Channel=I2Cx_DMA_CHANNEL;配置DMA數(shù)據(jù)傳輸方向,DMA_InitStructure.DMA_DIR=DMA_DIR_MemoryToPeripheral;使能DMA地址增,DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;設(shè)置DMA外設(shè)和存儲數(shù)據(jù)對齊方式,DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;設(shè)置DMA模式,DMA_InitStructure.DMA_Mode=DMA_Mode_Normal;設(shè)置DMA優(yōu)先級,DMA_InitStructure.DMA_P

溫馨提示

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

評論

0/150

提交評論