版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
《STM32Cube嵌入式系統(tǒng)應(yīng)用》HAL庫習(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)域?!敬鸢浮緼RM處理器可廣泛應(yīng)用于以下領(lǐng)域。(1)為通信、消費(fèi)電子、成像設(shè)備等產(chǎn)品,提供可運(yùn)行復(fù)雜操作系統(tǒng)的開放應(yīng)用平臺(tái)。(2)在海量存儲(chǔ)、汽車電子、工業(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í)鐘源?!敬鸢浮俊敬鸢浮俊敬鸢浮俊敬鸢浮坑肏SE時(shí)鐘,程序設(shè)置時(shí)鐘參數(shù)流程:定義RCC內(nèi)部/外部振蕩器(HSE、HSI、LSE和LSI)配置結(jié)構(gòu)體RCC_OscInitTypeDef結(jié)構(gòu)體;定義RCC系統(tǒng)、AHB和APB總線時(shí)鐘配置結(jié)構(gòu)體RCC_ClkInitTypeDef;選擇振蕩器類型為HSE,RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSE;配置HSE時(shí)鐘為開啟狀態(tài),RCC_OscInitStruct.HSEState=RCC_HSE_ON;配置HSE分頻因子,RCC_OscInitStruct.HSEPredivValue=RCC_HSE_PREDIV_DIV1;配置HIS時(shí)鐘為開啟狀態(tài),RCC_OscInitStruct.HSIState=RCC_HSI_ON;配置PLL為開啟狀態(tài),RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;配置PLL源為HSE,RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSE;配置PLL倍頻系數(shù)為9,RCC_OscInitStruct.PLL.PLLMUL=RCC_PLL_MUL9;初始化RCC振蕩器,HAL_RCC_OscConfig(&RCC_OscInitStruct);選擇要配置的總線時(shí)鐘,RCC_ClkInitStruct.ClockType=RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;選擇SYSCLK時(shí)鐘源為PLLCLK,RCC_ClkInitStruct.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;配置AHB時(shí)鐘分頻系數(shù)為1,RCC_ClkInitStruct.AHBCLKDivider=RCC_SYSCLK_DIV1;配置APB1時(shí)鐘分頻系數(shù)為2,RCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV2;配置APB2時(shí)鐘分頻系數(shù)為1,RCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DIV1;初始化總線時(shí)鐘,HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_2)。第3章1.STM32CubeMX軟件是什么?【答案】STM32CubeMX軟件是ST有限公司為STM32系列微控制器快速建立工程,并快速初始化使用到的外設(shè)、GPIO等而設(shè)計(jì)的,大大縮短了開發(fā)時(shí)間。2.STM32CubeMX軟件的特點(diǎn)是什么?【答案】(1)集成了ST有限公司的每一款型號(hào)的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í)鐘信號(hào)頻率進(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)和升級(jí)得來的,有如下一些特點(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)支持對外部的存儲(chǔ)器的擦除或編程。
(5)支持STM32芯片的自動(dòng)編程(擦除、校驗(yàn)、編程、選項(xiàng)字配置)。
(6)支持對STM32片內(nèi)OTP區(qū)域的編程。
(7)既支持圖形化界面操作也支持命令行操作。
(8)支持對ST-Link調(diào)試器的在線固件升級(jí)。
(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ù)是___HAL_RCC_GPIOA_CLK_ENABLE()____。7.在stm32f407的庫函數(shù)中,初始化GPIO功能,使用的庫函數(shù)是_voidHAL_GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_Init)____。8.當(dāng)要同時(shí)初始化某個(gè)GPIO的1號(hào)、2號(hào)引腳,賦給GPIO_InitTypeDef結(jié)構(gòu)體類型成員GPIO_Pin的值是__GPIO_PIN_1|GPIO_PIN_2____。9.在stm32f407的庫函數(shù)中,讀取某個(gè)特定GPIO引腳狀態(tài),使用的庫函數(shù)是GPIO_PinStateHAL_GPIO_ReadPin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)____。10.在stm32f407的庫函數(shù)中,設(shè)定某些特定GPIO引腳輸出狀態(tài),使用的庫函數(shù)是voidHAL_GPIO_WritePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,GPIO_PinStatePinState)。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è)使用初始化流程?!敬鸢浮浚?)使能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號(hào)、3號(hào)、5號(hào)、7號(hào)、9號(hào)引腳配置為推挽輸出模式,速度為50MHz,將0、2號(hào)、4號(hào)、6號(hào)、8號(hào)引腳配置為上拉輸入模式。【答案】GPIO_InitTypeDefGPIO_InitStruct={0};__HAL_RCC_GPIOD_CLK_ENABLE();GPIO_InitStruct.Pin=GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_6|GPIO_PIN_8;GPIO_InitStruct.Mode=GPIO_MODE_INPUT;GPIO_InitStruct.Pull=GPIO_PULLUP;HAL_GPIO_Init(GPIOD,&GPIO_InitStruct);GPIO_InitStruct.Pin=GPIO_PIN_9|GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_5|GPIO_PIN_7;GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull=GPIO_PULLUP;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOD,&GPIO_InitStruct);15.編寫程序,將GPIOD的1號(hào)、5號(hào)、7號(hào)引腳輸出高電平,3號(hào)、9號(hào)引腳輸出低電平,并將引腳2號(hào)、6號(hào)、8號(hào)上的狀態(tài)讀到處理器中。【答案】unsignedshortinta,b,c;HAL_GPIO_WritePin(GPIOD,GPIO_PIN_1|GPIO_PIN_5|GPIO_PIN_7,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_3|GPIO_PIN_9,GPIO_PIN_RESET);a=HAL_GPIO_ReadPin(GPIOD,GPIO_PIN_2);b=HAL_GPIO_ReadPin(GPIOD,GPIO_PIN_6);c=HAL_GPIO_ReadPin(GPIOD,GPIO_PIN_8);16.有獨(dú)立按鍵電路,連接在STM32F407ZGT6微控制器的GPIOE的5號(hào)引腳,要求在每次按鍵后將連接GPIOB的2號(hào)引腳上的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 0(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) { HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_2); }}}(2)voidKey_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStruct={0};__HAL_RCC_GPIOE_CLK_ENABLE();GPIO_InitStruct.Pin=GPIO_PIN_5;GPIO_InitStruct.Mode=GPIO_MODE_INPUT;GPIO_InitStruct.Pull=GPIO_PULLUP;HAL_GPIO_Init(GPIOE,&GPIO_InitStruct);}voidLED_GPIO_Config(void){ GPIO_InitTypeDefGPIO_InitStruct={0};__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitStruct.Pin=GPIO_PIN_2;GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull=GPIO_PULLUP;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);}(3)uint8_tKey_Scan(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin){ if(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin)==KEY_ON) { delay_ms(100);//去抖動(dòng) if(HAL_GPIO_ReadPin(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),作為判別行號(hào)的依據(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_InitStruct={0};__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitStruct.Pin=GPIO_PIN_2|GPIO_PIN_3;GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull=GPIO_PULLUP;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);GPIO_InitStruct.Pin=GPIO_PIN_0|GPIO_PIN_1;GPIO_InitStruct.Mode=GPIO_MODE_INPUT;GPIO_InitStruct.Pull=GPIO_PULLUP;HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);}/*將列設(shè)置為輸出,行設(shè)置為輸入*/voidGPIO_LieOUT_HangIN(void){GPIO_InitTypeDefGPIO_InitStruct={0};__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitStruct.Pin=GPIO_PIN_0|GPIO_PIN_1;GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull=GPIO_PULLUP;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);GPIO_InitStruct.Pin=GPIO_PIN_2|GPIO_PIN_3;GPIO_InitStruct.Mode=GPIO_MODE_INPUT;GPIO_InitStruct.Pull=GPIO_PULLUP;HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);}voidKEY_SCAN(void){ u8Lie_Data,Hang_Data; GPIO_LieOUT_HangIN();HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0|GPIO_PIN_1,GPIO_PIN_RESET);//將列設(shè)置為低電平,掃描行 if((HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_All)&0x0a)!=0x0a) { delay_ms(100);//去抖動(dòng) if((HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_All)&0x0a)!=0x0a) { Hang_Data=HAL_GPIO_ReadPin(GPIOB,PIO_PIN_All)&0x0a;//保存行掃描結(jié)果 GPIO_LieIN_HangOUT(); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2|GPIO_PIN_3,GPIO_PIN_RESET);//將行設(shè)置為低電平,掃描列 Lie_Data=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_All)&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)先級(jí)的概念:搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí),每個(gè)中斷源都需要被指定這兩種優(yōu)先級(jí),由兩者的組合得到中斷的優(yōu)先級(jí)別。NVIC對中斷優(yōu)先級(jí)的管理方法如下。(1)搶占優(yōu)先級(jí)較高的中斷可以打斷正在進(jìn)行的搶占優(yōu)先級(jí)較低的中斷,不同搶占優(yōu)先級(jí)的中斷可以實(shí)現(xiàn)中斷的嵌套。(2)搶占優(yōu)先級(jí)相同的中斷,響應(yīng)優(yōu)先級(jí)高的不可以打斷響應(yīng)優(yōu)先級(jí)低的中斷。(3)當(dāng)兩個(gè)搶占優(yōu)先級(jí)相同的中斷同時(shí)發(fā)生的情況下,哪個(gè)中斷響應(yīng)優(yōu)先級(jí)高,哪個(gè)中斷就先執(zhí)行。(4)(5)如果兩個(gè)中斷的搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)都一樣,且同時(shí)請求,則根據(jù)異常中斷向量表中的排位順序決定哪個(gè)中斷先執(zhí)行。2.中斷優(yōu)先級(jí)編號(hào)越小,則其優(yōu)先級(jí)越高。3.中斷搶占優(yōu)先級(jí)高的是否可以搶占優(yōu)先級(jí)低的中斷流程?可以。4.響應(yīng)搶占優(yōu)先級(jí)高的是否可以搶占優(yōu)先級(jí)低的中斷流程?在搶占優(yōu)先級(jí)一致時(shí),不可以。5.兩個(gè)中斷搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)都相同,同時(shí)向內(nèi)核申請中斷,怎么響應(yīng)中斷?【答案】按照兩個(gè)中斷在中斷向量表中的位置決定。向量表中位置靠前的先被響應(yīng)。6.假定設(shè)置中斷優(yōu)先級(jí)組為1,然后設(shè)置:中斷3(RTC中斷)的搶占優(yōu)先級(jí)為1,響應(yīng)優(yōu)先級(jí)為1;中斷6(外部中斷0)的搶占優(yōu)先級(jí)為3,響應(yīng)優(yōu)先級(jí)為0;中斷7(外部中斷1)的搶占優(yōu)先級(jí)為1,響應(yīng)優(yōu)先級(jí)為6。那么,這3個(gè)中斷的優(yōu)先級(jí)順序?yàn)椋ㄓ筛叩降祝褐袛?、中斷7、中斷6。7.voidHAL_NVIC_SetPriority(IRQn_TypeIRQn,uint32_tPreemptPriority,uint32_tSubPriority)函數(shù)用于設(shè)置中斷搶占優(yōu)先級(jí)和子優(yōu)先級(jí)。8.voidHAL_NVIC_EnableIRQ(IRQn_TypeIRQn)函數(shù)用于使能中斷。9.voidHAL_NVIC_SetPriorityGrouping(uint32_tPriorityGroup)函數(shù)用來配置中斷優(yōu)先級(jí)組。10.在頭文件stm32f4xx.h中定義的中斷編號(hào),是以枚舉類型定義的。請問外部中斷0的編號(hào)是____6____。11.當(dāng)中斷優(yōu)先級(jí)組設(shè)置為2組時(shí),搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)可以分別設(shè)置為哪些優(yōu)先級(jí)?【答案】搶占優(yōu)先級(jí):0~3響應(yīng)優(yōu)先級(jí):0~312.編寫NVIC中斷初始化程序?qū)崿F(xiàn)如下功能。(1)設(shè)置中斷優(yōu)先級(jí)組為2組。(2)設(shè)置外部中斷2的搶占優(yōu)先級(jí)為0,響應(yīng)優(yōu)先級(jí)為2。(3)設(shè)置定時(shí)器2中斷的搶占優(yōu)先級(jí)為2,響應(yīng)優(yōu)先級(jí)為1。(4)設(shè)置USART2的中斷搶占優(yōu)先級(jí)為3,響應(yīng)優(yōu)先級(jí)為3。并說明當(dāng)同時(shí)出現(xiàn)以上3個(gè)中斷請求時(shí),中斷服務(wù)程序執(zhí)行的順序?!敬鸢浮縮taticvoidMX_NVIC_Init(void){HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);HAL_NVIC_SetPriority(EXTI2_IRQn,0,2);HAL_NVIC_EnableIRQ(EXTI2_IRQn);HAL_NVIC_SetPriority(TIM2_IRQn,2,1);HAL_NVIC_EnableIRQ(TIM2_IRQn);HAL_NVIC_SetPriority(USART2_IRQn,3,3);HAL_NVIC_EnableIRQ(USART2_IRQn);}//初始化函數(shù)結(jié)束外部中斷2、定時(shí)器2中斷、USART2的中斷13.外部中斷的中斷請求信號(hào)可以是控制器外部產(chǎn)生由GPIO引腳引入的,也可以是由控制器內(nèi)部一些片上外設(shè)產(chǎn)生的。這一說法是否正確?___正確_____。14.每個(gè)GPIO引腳都可以作為外部中斷信號(hào)輸入引腳,GPIO引腳編號(hào)相同的映射到同一個(gè)EXTI線,那么GPIOA的0號(hào)引腳映射到EXTI線___0_____,GPIOD的0號(hào)引腳映射到EXTI線_____0___,GPIOC的5號(hào)引腳映射到EXTI線_____5___,GPIOG的10號(hào)引腳映射到EXTI線____10____。15.外部中斷信號(hào)輸入的觸發(fā)信號(hào)形式可以是__上升沿觸發(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.函數(shù)HAL_EXTI_SetConfigLine(&EXTI0_HandleStruct,&EXTI0_ConfigStructure)有什么功能?【答案】配置EXTI0中斷線。20.函數(shù)HAL_NVIC_SetPriority(EXTI0_IRQn,0,0)有什么功能?【答案】初始化外部中斷EXTI0的優(yōu)先級(jí)。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)先級(jí)及使能/禁止。(6)編寫中斷服務(wù)函數(shù)。(7)編寫中斷服務(wù)程序處理內(nèi)容。23.初始化外部中斷1:將GPIOA的1號(hào)引腳作為輸入引腳,中斷模式,上升沿觸發(fā),中斷優(yōu)先級(jí)組為3組,搶占優(yōu)先級(jí)為3,響應(yīng)優(yōu)先級(jí)為1,并使能中斷。__HAL_RCC_GPIOA_CLK_ENABLE();HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_3);GPIO_InitStruct.Pin=GPIO_PIN_1;GPIO_InitStruct.Mode=GPIO_MODE_IT_RISING;GPIO_InitStruct.Pull=GPIO_NOPULL;HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);HAL_NVIC_SetPriority(EXTI1_IRQn,3,1);HAL_NVIC_EnableIRQ(EXTI1_IRQn);24.外部中斷被掛起后,不能硬件清除,需要在相應(yīng)的中斷服務(wù)程序中將掛起標(biāo)志清除,使用的函數(shù)是____HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__)。25.根據(jù)下圖所示,編寫程序以完成外部中斷初始化,中斷輸入引腳為PE5,上升沿檢測方式?!敬鸢浮縂PIO_InitTypeDefGPIO_InitStruct={0};//-------------------第1步--------------------/*開啟按鍵GPIO口的時(shí)鐘*/__HAL_RCC_GPIOE_CLK_ENABLE();//-------------------第2步--------------------/*選擇按鍵的引腳*/GPIO_InitStruct.Pin=GPIO_PIN_5;/*設(shè)置引腳為外部中斷模式,上升沿觸發(fā)*/GPIO_InitStruct.Mode=GPIO_MODE_IT_RISING;/*設(shè)置引腳不上拉也不下拉*/GPIO_InitStruct.Pull=GPIO_NOPULL;/*使用上面的結(jié)構(gòu)體初始化按鍵*/HAL_GPIO_Init(GPIOE,&GPIO_InitStruct);//-------------------第3步--------------------/*配置NVIC為優(yōu)先級(jí)組2,整個(gè)程序處于同一組*/HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);//-------------------第4步--------------------/*配置搶占優(yōu)先級(jí):1,子優(yōu)先級(jí):1*/HAL_NVIC_SetPriority(EXTI5_IRQn,1,1);//-------------------第5步--------------------/*使能中斷通道*/HAL_NVIC_EnableIRQ(EXTI5_IRQn);15.編寫14題的外部中斷的服務(wù)程序,完成LED燈(PB2)的開關(guān)控制?!敬鸢浮縱oidEXTI5_IRQHandler(void){ //LED狀態(tài)轉(zhuǎn)換 HAL_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信號(hào)?什么是占空比?請繪圖舉例?!敬鸢浮縋WM(PulseWidthModulation):脈沖寬度調(diào)制,簡稱脈寬調(diào)制。PWM信號(hào):周期內(nèi)高電平占空比可調(diào)的信號(hà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í)。【答案】TIM1掛載在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。TIM_HandleTypeDefhtim1;/*-------------------第1步--------------------*/ //開啟TIM1時(shí)鐘__HAL_RCC_TIM1_CLK_ENABLE(); /*-------------------第2步--------------------*/TIM_ClockConfigTypeDefsClockSourceConfig={0};TIM_MasterConfigTypeDefsMasterConfig={0};htim1.Instance=TIM1;htim1.Init.Prescaler=17999;htim1.Init.CounterMode=TIM_COUNTERMODE_UP;htim1.Init.Period=9999;htim1.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;htim1.Init.RepetitionCounter=0;htim1.Init.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE;if(HAL_TIM_Base_Init(&htim1)!=HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource=TIM_CLOCKSOURCE_INTERNAL;if(HAL_TIM_ConfigClockSource(&htim1,&sClockSourceConfig)!=HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger=TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode=TIM_MASTERSLAVEMODE_DISABLE;if(HAL_TIMEx_MasterConfigSynchronization(&htim1,&sMasterConfig)!=HAL_OK){Error_Handler();} /*-------------------第3-1步--------------------*/ //開啟定時(shí)器更新中斷HAL_TIM_Base_Start_IT(&htim1); /*-------------------第3-2步--------------------*/ //設(shè)置中斷組為0HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0); //設(shè)置中斷搶占優(yōu)先級(jí)和子優(yōu)先級(jí)HAL_NVIC_SetPriority(TIM1_UP_TIM10_IRQn,0,3);HAL_NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);12.編程序,使用TIM3產(chǎn)生PWM波?!敬鸢浮浚?)通過TIM3的CH1輸出PWM波。(2)PWM波周期為200KHz,占空比為20%。(3)TIM3的CH1對用的引腳為PA6。TIM_ClockConfigTypeDefsClockSourceConfig={0};TIM_MasterConfigTypeDefsMasterConfig={0};TIM_OC_InitTypeDefsConfigOC={0};GPIO_InitTypeDefGPIO_InitStruct={0};TIM_HandleTypeDefhtim3; /*-------------------第1步--------------------*/ /*開啟相關(guān)的GPIO外設(shè)時(shí)鐘*/__HAL_RCC_GPIOA_CLK_ENABLE();//使能TIM3時(shí)鐘__HAL_RCC_TIM3_CLK_ENABLE(); /*-------------------第2步--------------------*/ /*TIM3輸出通道1引腳配置*/ GPIO_InitStruct.Pin=GPIO_PIN_6;GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;GPIO_InitStruct.Pull=GPIO_NOPULL;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate=GPIO_AF2_TIM3;HAL_GPIO_Init(GPIOA,&GPIO_InitStruct); /*-------------------第3步--------------------*/htim3.Instance=TIM3; //定時(shí)器時(shí)鐘源TIMxCLK=HCLK/2=90MHz //設(shè)定定時(shí)器頻率為=TIMxCLK/(TIM_Prescaler+1)=200KHz //定義PWM波的周期//當(dāng)定時(shí)器從0計(jì)數(shù)到999,即為1000次,為一個(gè)定時(shí)周期htim3.Init.Prescaler=449;htim3.Init.CounterMode=TIM_COUNTERMODE_UP;//計(jì)數(shù)方式htim3.Init.Period=999;htim3.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;htim3.Init.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE;if(HAL_TIM_Base_Init(&htim3)!=HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource=TIM_CLOCKSOURCE_INTERNAL;if(HAL_TIM_ConfigClockSource(&htim3,&sClockSourceConfig)!=HAL_OK){Error_Handler();}if(HAL_TIM_PWM_Init(&htim3)!=HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger=TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode=TIM_MASTERSLAVEMODE_DISABLE;if(HAL_TIMEx_MasterConfigSynchronization(&htim3,&sMasterConfig)!=HAL_OK){Error_Handler();} /*-------------------第4步--------------------*/ /*設(shè)置比較輸出通道,PWM模式配置*/sConfigOC.OCMode=TIM_OCMODE_PWM1;sConfigOC.Pulse=200;sConfigOC.OCPolarity=TIM_OCPOLARITY_HIGH;//輸出有效電平為高電平sConfigOC.OCFastMode=TIM_OCFAST_DISABLE;if(HAL_TIM_PWM_ConfigChannel(&htim3,&sConfigOC,TIM_CHANNEL_1)!=HAL_OK){Error_Handler();} /*-------------------第5步--------------------*/ //使能定時(shí)器HAL_TIM_Base_Start(&htim3);13.編程序,使用TIM2檢測外部一未知時(shí)鐘的頻率。【答案】信號(hào)從TIM2的通道1輸入。使用的引腳是PA5。定時(shí)器初始化voidTIM_Config_IC(void){TIM_ClockConfigTypeDefsClockSourceConfig={0};TIM_SlaveConfigTypeDefsSlaveConfig={0};TIM_MasterConfigTypeDefsMasterConfig={0};TIM_IC_InitTypeDefsConfigIC={0}; GPIO_InitTypeDefGPIO_InitStruct={0}; /*-------------------第1步--------------------*/ //使能TIM2和相關(guān)GPIO時(shí)鐘__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_TIM2_CLK_ENABLE(); /*-------------------第2步--------------------*/ //配置輸入通道引腳GPIO_InitStruct.Pin=GPIO_PIN_5;GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;GPIO_InitStruct.Pull=GPIO_NOPULL;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate=GPIO_AF1_TIM2;HAL_GPIO_Init(GPIOA,&GPIO_InitStruct); /*-------------------第3步--------------------*/ //初始化定時(shí)器測量時(shí)鐘 //定時(shí)器時(shí)鐘源TIMxCLK=HCLK/2=90MHz //設(shè)定定時(shí)器頻率為=TIMxCLK/(TIM_Prescaler+1)=100KHzhtim2.Instance=TIM2;htim2.Init.Prescaler=89;htim2.Init.CounterMode=TIM_COUNTERMODE_UP;//計(jì)數(shù)方式htim2.Init.Period=4074967295;htim2.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//采樣時(shí)鐘分頻htim2.Init.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE;if(HAL_TIM_Base_Init(&htim2)!=HAL_OK)//初始化定時(shí)器TIM2{Error_Handler();}//設(shè)置TIM2內(nèi)部時(shí)鐘源sClockSourceConfig.ClockSource=TIM_CLOCKSOURCE_INTERNAL;if(HAL_TIM_ConfigClockSource(&htim2,&sClockSourceConfig)!=HAL_OK){Error_Handler();} /*-------------------第4步--------------------*/ //設(shè)置觸發(fā)相關(guān)參數(shù)if(HAL_TIM_IC_Init(&htim2)!=HAL_OK){Error_Handler();}sSlaveConfig.SlaveMode=TIM_SLAVEMODE_RESET;sSlaveConfig.InputTrigger=TIM_TS_TI1FP1;sSlaveConfig.TriggerPolarity=TIM_INPUTCHANNELPOLARITY_RISING;sSlaveConfig.TriggerFilter=0;if(HAL_TIM_SlaveConfigSynchro(&htim2,&sSlaveConfig)!=HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger=TIM_TRGO_UPDATE;sMasterConfig.MasterSlaveMode=TIM_MASTERSLAVEMODE_DISABLE;if(HAL_TIMEx_MasterConfigSynchronization(&htim2,&sMasterConfig)!=HAL_OK){Error_Handler();} /*-------------------第5步--------------------*/ //設(shè)置捕獲相關(guān)參數(shù) sConfigIC.ICPolarity=TIM_INPUTCHANNELPOLARITY_RISING;//捕抓到上升沿時(shí),把計(jì)數(shù)寄存器中的值所存到CCR2寄存器sConfigIC.ICSelection=TIM_ICSELECTION_DIRECTTI;//一對一連接sConfigIC.ICPrescaler=TIM_ICPSC_DIV1;sConfigIC.ICFilter=0;if(HAL_TIM_IC_ConfigChannel(&htim2,&sConfigIC,TIM_CHANNEL_1)!=HAL_OK){Error_Handler();}/*-------------------第6步--------------------*/ //開啟定時(shí)器中斷HAL_NVIC_SetPriority(TIM2_IRQn,0,1);HAL_NVIC_EnableIRQ(TIM2_IRQn);HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1); //使能捕獲/比較1中斷請求}(2)中斷服務(wù)程序,實(shí)現(xiàn)頻率計(jì)算voidTIM2_IRQHandler(void){if(__HAL_TIM_GET_FLAG(&htim2,TIM_FLAG_CC1)!=RESET) { /*清除定時(shí)器捕獲/比較1中斷*/__HAL_TIM_CLEAR_IT(&htim2,TIM_IT_CC1); /*獲取輸入捕獲值*/ IC_Value=HAL_TIM_ReadCapturedValue&htim2,TIM_CHANNEL_1);//得到PWM周期 /*頻率計(jì)算*/ Frequency=90000000/90/(float)IC_Value; printf("頻率:%0.2fHz\r\n",Frequency); }}第8章串行異步通信數(shù)據(jù)格式是什么?用圖說明。【答案】【答案】1600?!敬鸢浮縐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)。【答案】USART數(shù)據(jù)接收配置步驟如下:通過調(diào)用HAL_UART_Init來激活USART;通過配置結(jié)構(gòu)體UART_InitTypeDef的成員WordLength來定義字長;通過配置結(jié)構(gòu)體UART_InitTypeDef的成員StopBits編程停止位的位數(shù);如果采用多緩沖器通信,配置HAL_DMA_Init函數(shù)進(jìn)行使能。按多緩沖器通信中的描述配置DMA;通過配置結(jié)構(gòu)體UART_InitTypeDef的成員BaudRate要求的比特率調(diào)用函數(shù)HAL_UART_Receive來讀取接收緩沖其中的字符【答案】當(dāng)使用USART模塊進(jìn)行全雙工異步通信時(shí),需要配置波特率、數(shù)據(jù)位數(shù)、奇偶校驗(yàn)、硬件流控制、停止位數(shù)、工作模式?!敬鸢浮烤幊檀a如下:voidMX_USART1_UART_Init(void){huart1.Instance=USART1;huart1.Init.BaudRate=115200;huart1.Init.WordLength=UART_WORDLENGTH_8B;huart1.Init.StopBits=UART_STOPBITS_1;huart1.Init.Parity=UART_PARITY_NONE;huart1.Init.Mode=UART_MODE_TX_RX;huart1.Init.HwFlowCtl=UART_HWCONTROL_NONE;huart1.Init.OverSampling=UART_OVERSAMPLING_16;if(HAL_UART_Init(&huart1)!=HAL_OK){Error_Handler();}__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);}【答案】USART的各種中斷事件被連接到同一個(gè)中斷向量,有以下幾種中斷事件:發(fā)送期間:發(fā)送完成中斷、清除發(fā)送中斷、發(fā)送數(shù)據(jù)寄存器空中斷。接收期間:空閑總線檢測中斷、溢出錯(cuò)誤中斷、接收數(shù)據(jù)寄存器非空中斷、檢驗(yàn)錯(cuò)誤中斷、LIN斷開符號(hào)檢測中斷、噪聲中斷(僅在多緩沖器通信)和幀錯(cuò)誤中斷(僅在多緩沖器通信)。8.編程序配置STM32F407微控制器的USART2為以下功能:波特率=9600bps,8位有效數(shù)據(jù)位、無奇偶校驗(yàn)、無硬件流控、使能接收和發(fā)送、使能接收中斷?!敬鸢浮縐SART2發(fā)送引腳TX:PA2USART2接收引腳RX:PA3voidUSART_Config(void){GPIO_InitTypeDefGPIO_InitStruct={0};UART_HandleTypeDefhuart2;uint8_taRxBuffer[1];//HAL庫使用的串口接收緩沖 /*-------------------第1步--------------------*/ /*使能GPIOA時(shí)鐘*/__HAL_RCC_GPIOA_CLK_ENABLE();/*使能USART2時(shí)鐘*/__HAL_RCC_USART2_CLK_ENABLE(); /*-------------------第2步--------------------*/ //配置串口相關(guān)復(fù)用引腳 /*復(fù)用PA2、PA3到USART2*/GPIO_InitStruct.Pin=GPIO_PIN_2|GPIO_PIN_3;GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;GPIO_InitStruct.Pull=GPIO_NOPULL;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate=GPIO_AF7_USART2;HAL_GPIO_Init(GPIOA,&GPIO_InitStruct); /*-------------------第3步--------------------*//*配置USART2模式*/huart2.Instance=USART2;huart2.Init.BaudRate=9600;//波特率huart2.Init.WordLength=UART_WORDLENGTH_8B;//8位數(shù)據(jù)位huart2.Init.StopBits=UART_STOPBITS_1;//1位停止位huart2.Init.Parity=UART_PARITY_NONE;//無奇偶校驗(yàn)huart2.Init.Mode=UART_MODE_TX_RX;//收發(fā)模式huart2.Init.HwFlowCtl=UART_HWCONTROL_NONE;huart2.Init.OverSampling=UART_OVERSAMPLING_16;if(HAL_UART_Init(&huart2)!=HAL_OK)//初始化USART2{Error_Handler();} /*-------------------第4步--------------------*/ //初始化NVIC中的USART2中斷通道HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);//選擇嵌套向量中斷控制器組2HAL_NVIC_SetPriority(USART2_IRQn,1,1);HAL_NVIC_EnableIRQ(USART2_IRQn); //使能串口的RXNE中斷 HAL_UART_Receive_IT(&huart2,(uint8_t*)aRxBuffer,1);///使能串口的RXNE中斷 }9.編寫USART2接收中斷的程序?!敬鸢浮縱oidUSART2_IRQHandler(void){uint8_tucTemp;while(HAL_UART_Receive_IT(&huart2,(uint8_t*)aRxBuffer,1)!=HAL_OK)//一次處理完成之后,重新開啟中斷并設(shè)置RxXferCount為1ucTemp=aRxBuffer[0]; HAL_UART_Transmit(&huart2,(uint8_t*)ucTemp,1,1000); //發(fā)送接收到的數(shù)據(jù)} 10.編寫USART2查詢式發(fā)送數(shù)據(jù)的程序。【答案】將字符ch發(fā)送出去。/*發(fā)送一個(gè)字節(jié)數(shù)據(jù)到USART*/HAL_UART_Transmit(&huart2,(uint8_t*)ch,1,1000); //發(fā)送接收到的數(shù)據(jù)/*等待發(fā)送數(shù)據(jù)寄存器為空*/while(__HAL_UART_GET_FLAG(&huart2,UART_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)第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ā)送和接收請求。【答案】通常SPI通過以下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)?!敬鸢浮吭趶呐渲弥?,SCK引腳用于接收從主設(shè)備來的串行時(shí)鐘,配置步驟如下:設(shè)置結(jié)構(gòu)體SPI_InitTypeDef的成員,以定義數(shù)據(jù)幀格式為8位或16位。選擇CPOL和CPHA位來定義數(shù)據(jù)傳輸和串行時(shí)鐘之間的相位關(guān)系。為保證正確的數(shù)據(jù)傳輸,從設(shè)備和主設(shè)備的CPOL和CPHA位必須配置成相同的方式。幀格式(MSB在前還是LSB在前取決于結(jié)構(gòu)體SPI_InitTypeDef的成員必須和主設(shè)備相同。硬件模式下,在完整的數(shù)據(jù)幀(8位或16位)發(fā)送過程中,NSS引腳必須為低電平。軟件模式下,設(shè)置為SPI_NSS_SOFT。調(diào)用函數(shù),使相應(yīng)引腳工作于SPI模式下。在主配置時(shí),串行時(shí)鐘在SCK引腳產(chǎn)生,配置步驟如下:設(shè)置結(jié)構(gòu)體SPI_InitTypeDef的成員;定義串行時(shí)鐘比特率。設(shè)置結(jié)構(gòu)體SPI_InitTypeDef的成員,以定義數(shù)據(jù)幀格式為8位或16位。選擇CPOL和CPHA位來定義數(shù)據(jù)傳輸和串行時(shí)鐘之間的相位關(guān)系。幀格式(MSB在前還是LSB在前取決于結(jié)構(gòu)體SPI_InitTypeDef的成員必須和主設(shè)備相同。如果NSS引腳需要工作在輸入模式,硬件模式中在整個(gè)數(shù)據(jù)幀傳輸期間應(yīng)把NSS腳連接到高電平:在軟件模式中,需設(shè)置結(jié)構(gòu)體SPI_InitTypeDef的成員NSS。如果NSS引腳工作在輸出模式,則只需設(shè)置SSOE位。必須調(diào)用函數(shù)(只當(dāng)NSS腳被連到高電平,這些位才能保持置位)?!敬鸢浮繎?yīng)用程序通過BUSY、TXE和RXNE3個(gè)狀態(tài)標(biāo)志可以完全監(jiān)控SPI總線的狀態(tài)。【答案】SPI總線初始化代碼如下:【答案】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á)100kHz)或快速(高達(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)生停止信號(hào)時(shí),則從主模式切換到從模式。允許多主機(jī)功能。主模式時(shí),I2C接口啟動(dòng)數(shù)據(jù)傳輸并產(chǎn)生時(shí)鐘信號(hào)。串行數(shù)據(jù)傳輸總是以起始條件開始并以停止條件結(jié)束。起始條件和停止條件都是在主模式下由軟件控制產(chǎn)生?!敬鸢浮吭谥髂J綍r(shí),I2C接口啟動(dòng)數(shù)據(jù)傳輸并產(chǎn)生時(shí)鐘信號(hào)。串行數(shù)據(jù)傳輸總是以起始條件_開始并以停止條件結(jié)束。當(dāng)通過庫函數(shù)SET_BIT(CR1,I2C_CR1_START)設(shè)置狀態(tài)參數(shù)為ENABLE在總線上產(chǎn)生了起始條件,設(shè)備就進(jìn)入了主模式,主模式所要求的操作順序。在HAL_I2C_Init中設(shè)置ClockSpeed設(shè)定該模塊的輸入時(shí)鐘,以產(chǎn)生正確的時(shí)序。在HAL_I2C_MspInit中設(shè)置I2C的端口和RCC時(shí)鐘。__HAL_I2C_ENABLE啟動(dòng)I2C外設(shè)。寫庫函數(shù)SET_BIT(CR1,I2C_CR1_START),產(chǎn)生起始條件。模塊的輸入時(shí)鐘頻率在標(biāo)準(zhǔn)模式下為2MHz,快速模式下為4MHz?!敬鸢浮坷肈MA發(fā)送:定義I2C結(jié)構(gòu)體I2C_HandleTypeDefhi2c1,DMA配置結(jié)構(gòu)體DMA_HandleTypeDefhdma_i2c1_tx;配置DMA通道,Instance=DMA1_Channel6;配置DMA數(shù)據(jù)傳輸方向,hdma_i2c1_tx.Init.Direction=DMA_MEMORY_TO_PERIPH;使能DMA地址增,hdma_i2c1_tx.Init.MemInc=DMA_MINC_ENABLE;設(shè)置DMA外設(shè)和存儲(chǔ)數(shù)據(jù)對齊方式,i2c1_tx.Init.PeriphDataAlignment=DMA_PDATAALIGN_BYTE;hdma_i2c1_tx.Init.MemDataAlignment=DMA_MDATAALIGN_BYTE;設(shè)置DMA模式,i2c1_tx.Init.Mode=DMA_NORMAL;設(shè)置DMA優(yōu)先級(jí),i2c1_tx.Init.Priority=DMA_PRIORITY_HIGH;配置DMA結(jié)構(gòu)體,HAL_DMA_Init(&hdma_i2c1_tx);關(guān)聯(lián)DMA結(jié)構(gòu)體和I2C結(jié)構(gòu)體配置,__HAL_LINKDMA(hi2c1,hdmatx,hdma_i2c1_tx)?!敬鸢浮咳康腎2C中斷都匯總到兩個(gè)中斷\事件通道中,SB、ADDR、ADD10、STOPF,BTF、RXNE和TXE通過邏輯或匯合到IT_Event中;BERR、ARLO、AF、OVR、PECERR、TIMEOUT和SMBALERT通過邏輯或匯合到IT_Error個(gè)中斷通道中。第11章【答案】轉(zhuǎn)換開始時(shí),順序脈沖發(fā)生器輸出的順序脈沖首先將寄存器的最高位置1,經(jīng)DAC轉(zhuǎn)換為相應(yīng)的模擬電壓VA送入比較器與待轉(zhuǎn)換的模擬電壓VI進(jìn)行比較。若VA>VI,說明數(shù)字量過大,除去最高位的1,而將次高位置1,再一次比較。若VA<VI,說明數(shù)字量還不夠大,保留該位的1,且還須將下一位置1。這樣逐次比較下
溫馨提示
- 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)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024知名大學(xué)與科研機(jī)構(gòu)聯(lián)合培養(yǎng)研究生協(xié)議
- 2025年度企業(yè)財(cái)務(wù)內(nèi)部控制與合規(guī)審計(jì)合同范本3篇
- 專用購銷交易2024版協(xié)議格式版A版
- 二零二四商標(biāo)授權(quán)及知識(shí)產(chǎn)權(quán)跨界合作合同3篇
- 萬科物業(yè)2024停車場運(yùn)營管理協(xié)議
- 2024年談蕾離婚后財(cái)產(chǎn)與子女撫養(yǎng)協(xié)議書3篇
- 個(gè)性化小額資金借貸款項(xiàng)協(xié)議范本一
- 二零二四衛(wèi)生院衛(wèi)生間改造與裝修施工合同3篇
- 2025產(chǎn)學(xué)研科技成果轉(zhuǎn)化合同:生物科技產(chǎn)業(yè)合作框架4篇
- 2024路燈購銷安裝合同范本
- SQL Server 2000在醫(yī)院收費(fèi)審計(jì)的運(yùn)用
- 《FANUC-Oi數(shù)控銑床加工中心編程技巧與實(shí)例》教學(xué)課件(全)
- 微信小程序運(yùn)營方案課件
- 抖音品牌視覺識(shí)別手冊
- 陳皮水溶性總生物堿的升血壓作用量-效關(guān)系及藥動(dòng)學(xué)研究
- 安全施工專項(xiàng)方案報(bào)審表
- 學(xué)習(xí)解讀2022年新制定的《市場主體登記管理?xiàng)l例實(shí)施細(xì)則》PPT匯報(bào)演示
- 好氧廢水系統(tǒng)調(diào)試、驗(yàn)收、運(yùn)行、維護(hù)手冊
- 中石化ERP系統(tǒng)操作手冊
- 五年級(jí)上冊口算+脫式計(jì)算+豎式計(jì)算+方程
- 氣體管道安全管理規(guī)程
評(píng)論
0/150
提交評(píng)論