




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
《STM32Cube嵌入式系統應用》HAL庫習題答案第1章【答案】2.簡述馮·諾依曼結構和哈佛結構的區(qū)別。【答案】【答案】4.什么是嵌入式系統?【答案】5.嵌入式系統與通用計算機系統的異同點?【答案】6.嵌入式系統的特點主要有哪些?【答案】7.常見的嵌入式操作系統有哪幾種?【答案】8.ARM處理器有什么特點?【答案】因為ARM處理器采用RISC結構,所以它具有RISC架構的一些經典特點。(1)體積小、功耗低、成本低、性能高。(2)支持Thumb(16位)/ARM(32位)雙指令集,能很好地兼容8位/16位器件。(3)大量使用寄存器,指令執(zhí)行速度更快。(4)大多數數據操作都在寄存器中完成。(5)尋址方式靈活簡單,執(zhí)行效率高。內含嵌入式在線仿真器。9.簡述ARM處理器的應用領域?!敬鸢浮緼RM處理器可廣泛應用于以下領域。(1)為通信、消費電子、成像設備等產品,提供可運行復雜操作系統的開放應用平臺。(2)在海量存儲、汽車電子、工業(yè)控制和網絡應用等領域,提供實時嵌入式應用。在軍事、航天等領域,提供寬溫、抗電磁干擾、耐腐蝕的復雜嵌入式應用。10.什么嵌入式微處理器分類?!敬鸢浮壳度胧轿⑻幚砥?、嵌入式微控制器、嵌入式DSP、嵌入式SoCCortex-M系列處理器有哪些特征?【答案】Cortex-M系列處理器的特征如下:第2章【答案】【答案】【答案】如果HSE晶體振蕩器失效,HSI時鐘會被作為備用時鐘源。【答案】【答案】【答案】【答案】用HSE時鐘,程序設置時鐘參數流程:定義RCC內部/外部振蕩器(HSE、HSI、LSE和LSI)配置結構體RCC_OscInitTypeDef結構體;定義RCC系統、AHB和APB總線時鐘配置結構體RCC_ClkInitTypeDef;選擇振蕩器類型為HSE,RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSE;配置HSE時鐘為開啟狀態(tài),RCC_OscInitStruct.HSEState=RCC_HSE_ON;配置HSE分頻因子,RCC_OscInitStruct.HSEPredivValue=RCC_HSE_PREDIV_DIV1;配置HIS時鐘為開啟狀態(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倍頻系數為9,RCC_OscInitStruct.PLL.PLLMUL=RCC_PLL_MUL9;初始化RCC振蕩器,HAL_RCC_OscConfig(&RCC_OscInitStruct);選擇要配置的總線時鐘,RCC_ClkInitStruct.ClockType=RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;選擇SYSCLK時鐘源為PLLCLK,RCC_ClkInitStruct.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;配置AHB時鐘分頻系數為1,RCC_ClkInitStruct.AHBCLKDivider=RCC_SYSCLK_DIV1;配置APB1時鐘分頻系數為2,RCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV2;配置APB2時鐘分頻系數為1,RCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DIV1;初始化總線時鐘,HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_2)。第3章1.STM32CubeMX軟件是什么?【答案】STM32CubeMX軟件是ST有限公司為STM32系列微控制器快速建立工程,并快速初始化使用到的外設、GPIO等而設計的,大大縮短了開發(fā)時間。2.STM32CubeMX軟件的特點是什么?【答案】(1)集成了ST有限公司的每一款型號的MCU/MPU的可配置的圖形界面,能夠自動提示IO沖突并且對于復用IO可自動分配。(2)具有動態(tài)驗證的時鐘樹。(3)能夠很方便的使用所集成的中間件。(4)能夠估算MCU/MPU在不同主頻運行下的功耗。(5)能夠輸出不同編譯器的工程,比如能夠直接生成MDK、EWARM、STM32CubeIDE、MakeFile等工程。3.STM32CubeMX軟件的工作區(qū)有哪4個界面?(1)Pinout&Configuration(引腳與配置)界面,這是對MCU的系統內核、外設、中間件和引腳進行配置的界面,是主要的工作界面。(2)ClockConfiguration(時鐘配置)界面,通過圖形化的時鐘樹對MCU的各個時鐘信號頻率進行配置的界面。(3)ProjectManager(項目管理)界面,對項目進行各種設置的界面。(4)Tools(工具)界面,進行功耗計算、DDRSDRAM適用性分析(僅用于STM32MP1系列)的操作界面。第4章1.STM32CubeIDE軟件是什么?【答案】STM32CubeIDE是STM32Cube生態(tài)系統中的一個重要軟件工具,是ST官方免費提供的STM32MCU/MPU程序開發(fā)IDE軟件。2.STM32CubeIDE有什么特點?【答案】STM32CubeIDE就是在TrueSTUDIO基礎上改進和升級得來的,有如下一些特點。(1)STM32CubeIDE使用的是EclipseIDE環(huán)境,具有強大的編輯功能,其使用習慣與TrueSTUDIO相同。(2)STM32CubeIDE使用的是GNUC/C++編譯器,支持在STM32項目開發(fā)中使用C++編程。(3)STM32CubeIDE內部集成了STM32CubeMX,在STM32CubeIDE里就可以進行MCU圖形化配置和代碼生成,然后在初始代碼基礎上繼續(xù)編程。當然,STM32CubeIDE也可以和獨立的STM32CubeMX配合使用。3.STM32CubeProgrammer軟件有什么特色?(1)可對片內Flash進行擦除或編程以及查看Flash內容。
(2)支持s19、hex、elf和bin等格式的文件。
(3)支持調試接口或bootloader接口。=1\*GB3①STLINK調試接口(JTAG/SWD)=2\*GB3②UART或USBDFUbootloader接口
(4)支持對外部的存儲器的擦除或編程。
(5)支持STM32芯片的自動編程(擦除、校驗、編程、選項字配置)。
(6)支持對STM32片內OTP區(qū)域的編程。
(7)既支持圖形化界面操作也支持命令行操作。
(8)支持對ST-Link調試器的在線固件升級。
(9)配合STM32TrustedPackageCreatortool實現固件加密操作。
(10)支持Windows、Linux和MacOS多種操作系統。第5章1.列舉GPIO的工作模式?!敬鸢浮浚?)輸入浮空模式。(2)輸入上拉模式。(3)輸入下拉模式。(4)模擬功能模式。(5)具有上拉/下拉功能的開漏輸出模式。(6)具有上拉/下拉功能的推挽輸出模式。(7)具有上拉/下拉功能的復用功能推挽模式。(8)具有上拉/下拉功能的復用功能開漏模式。2.STM32F407系列微控制器每個GPIO端口有__16個__引腳。3.當引腳被配置為模擬功能模式時,上拉/下拉功能應被_禁止_。4.當引腳被配置為輸出模式,而輸出類型被配置為開漏時,引腳要輸出高電平,需要__使能引腳上拉功能____。5.控制引腳輸出電平時,需要操作__ODR____寄存器;獲取引腳狀態(tài)需要操作__IDR____寄存器。6.在stm32f407的庫函數中,使能GPIOA時鐘,使用的庫函數是___HAL_RCC_GPIOA_CLK_ENABLE()____。7.在stm32f407的庫函數中,初始化GPIO功能,使用的庫函數是_voidHAL_GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_Init)____。8.當要同時初始化某個GPIO的1號、2號引腳,賦給GPIO_InitTypeDef結構體類型成員GPIO_Pin的值是__GPIO_PIN_1|GPIO_PIN_2____。9.在stm32f407的庫函數中,讀取某個特定GPIO引腳狀態(tài),使用的庫函數是GPIO_PinStateHAL_GPIO_ReadPin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)____。10.在stm32f407的庫函數中,設定某些特定GPIO引腳輸出狀態(tài),使用的庫函數是voidHAL_GPIO_WritePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,GPIO_PinStatePinState)。11.結合電路說明推挽輸出和開漏輸出的區(qū)別。【答案】在推挽輸出下,輸出電路中有PMOS和NMOS管組成的推挽結構電路,當ODR寄存器中對應位寫‘1’時,NMOS管截止,PMOS管導通,引腳輸出高電平。當ODR寄存器中對應位寫‘0’時,NMOS管導通,PMOS管截止,引腳輸出低電平。在開漏輸出下,輸出電路中有只有NMOS管,當ODR寄存器中對應位寫‘1’時,NMOS管截止,這是引腳處于浮空狀態(tài),必須通過上拉電阻使引腳輸出高電平。當ODR寄存器中對應位寫‘0’時,NMOS管導通,PMOS管截止,引腳輸出低電平。12.當把引腳配置為模擬輸入模式時,那么它是否還具備耐5V功能?【答案】不具備耐5V功能。此時,引腳輸入通道和數字電路隔離,處于模擬電路狀態(tài)13.簡述片上外設使用初始化流程?!敬鸢浮浚?)使能GPIO的時鐘(非常重要),涉及以下文件。(2)設置對應于片上外設使用的GPIO工作模式。(3)如果使用復用功能,需要單獨設置每一個GPIO引腳的復用功能。(4)在應用程序中讀取引腳狀態(tài)、控制引腳輸出狀態(tài)或使用復用功能完成特定功能。14.編寫程序,將GPIOD的1號、3號、5號、7號、9號引腳配置為推挽輸出模式,速度為50MHz,將0、2號、4號、6號、8號引腳配置為上拉輸入模式。【答案】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號、5號、7號引腳輸出高電平,3號、9號引腳輸出低電平,并將引腳2號、6號、8號上的狀態(tài)讀到處理器中?!敬鸢浮縰nsignedshortinta,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.有獨立按鍵電路,連接在STM32F407ZGT6微控制器的GPIOE的5號引腳,要求在每次按鍵后將連接GPIOB的2號引腳上的LED燈反轉,電路如圖所示。請編寫程序實現按鍵動作的檢測,編寫以下程序。(1)主程序。(2)連接按鍵引腳和LED引腳的初始化程序。(3)按鍵檢測程序。假設已有延時函數voiddelay_ms(u16nms);,此函數可直接調用。【答案】#defineKEY_ON 1#defineKEY_OFF 0(1)intmain(void){delay_init(168);//初始化延時函數 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);//去抖動 if(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin)==KEY_ON) return KEY_ON; else returnKEY_OFF; } else returnKEY_OFF;}17.有矩陣按鍵,其電路如圖所示。(1)矩陣按鍵掃描原理和流程圖。(2)編寫程序實現矩陣按鍵控制,按鍵S1~S4分別對應數字1~4(引腳初始化程序和按鍵控制程序)?!敬鸢浮浚?)①將列線設置為輸出模式(圖中PB0和PB1),并分別在PB0和PB1上輸出低電平。行線設置為輸入模式(圖中PB2和PB3)。都使能上拉。②讀取PB2和PB3狀態(tài),判斷是否有按鍵按下。(判斷原則:PB2和PB3都是高電平時,沒有按鍵按下。PB2和PB3有任何一個為低電平是,有按鍵按下。判斷原理:在沒有按鍵按下去的時候,由于上拉電阻的存在,PB2和PB3都是高電平,讀取狀態(tài)時,PB2=1,PB3=1。如果有按鍵按下去的話,摸一個行線和列線連接在一起。由于PB0和PB1都為低電平,因此連接在一起的行線會被列線下拉到低電平。這時,在讀取PB2和PB3狀態(tài)時,就不會全是高電平。例如:當按下S1時,PB1和PB2連在一起,PB2被PB1拉低到低電平。讀取PB2和PB3狀態(tài)時,PB2=0,PB3=1。)有按鍵按下則繼續(xù)③,反之則結束。③延時去抖動。典型值是延時10ms,不同的按鍵類型,時間長度不一樣。④在此判斷是否有按鍵按下,原理同步驟②②④都判斷有按鍵按下時,繼續(xù)⑤。反之則結束。⑤保存讀取的PB2和PB3的狀態(tài),作為判別行號的依據。⑥將行線設置為輸出模式(圖中PB2和PB3),并分別在PB2和PB3上輸出低電平。列線設置為輸入模式(圖中PB0和PB1)。都使能上拉。⑦讀取PB0和PB1的狀態(tài),并保存。作為判別列線的依據。⑧根據⑤⑦兩個步得到的信息,算出是哪一個按鍵被按下去了。矩陣鍵盤掃描流程圖:(2)/*將列設置為輸入,行設置為輸出*/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);}/*將列設置為輸出,行設置為輸入*/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);//將列設置為低電平,掃描行 if((HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_All)&0x0a)!=0x0a) { delay_ms(100);//去抖動 if((HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_All)&0x0a)!=0x0a) { Hang_Data=HAL_GPIO_ReadPin(GPIOB,PIO_PIN_All)&0x0a;//保存行掃描結果 GPIO_LieIN_HangOUT(); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2|GPIO_PIN_3,GPIO_PIN_RESET);//將行設置為低電平,掃描列 Lie_Data=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_All)&0x0a;//保存列掃描結果 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中斷管理方法。【答案】Cortex-M4內核中定義了兩個優(yōu)先級的概念:搶占優(yōu)先級和響應優(yōu)先級,每個中斷源都需要被指定這兩種優(yōu)先級,由兩者的組合得到中斷的優(yōu)先級別。NVIC對中斷優(yōu)先級的管理方法如下。(1)搶占優(yōu)先級較高的中斷可以打斷正在進行的搶占優(yōu)先級較低的中斷,不同搶占優(yōu)先級的中斷可以實現中斷的嵌套。(2)搶占優(yōu)先級相同的中斷,響應優(yōu)先級高的不可以打斷響應優(yōu)先級低的中斷。(3)當兩個搶占優(yōu)先級相同的中斷同時發(fā)生的情況下,哪個中斷響應優(yōu)先級高,哪個中斷就先執(zhí)行。(4)(5)如果兩個中斷的搶占優(yōu)先級和響應優(yōu)先級都一樣,且同時請求,則根據異常中斷向量表中的排位順序決定哪個中斷先執(zhí)行。2.中斷優(yōu)先級編號越小,則其優(yōu)先級越高。3.中斷搶占優(yōu)先級高的是否可以搶占優(yōu)先級低的中斷流程?可以。4.響應搶占優(yōu)先級高的是否可以搶占優(yōu)先級低的中斷流程?在搶占優(yōu)先級一致時,不可以。5.兩個中斷搶占優(yōu)先級和響應優(yōu)先級都相同,同時向內核申請中斷,怎么響應中斷?【答案】按照兩個中斷在中斷向量表中的位置決定。向量表中位置靠前的先被響應。6.假定設置中斷優(yōu)先級組為1,然后設置:中斷3(RTC中斷)的搶占優(yōu)先級為1,響應優(yōu)先級為1;中斷6(外部中斷0)的搶占優(yōu)先級為3,響應優(yōu)先級為0;中斷7(外部中斷1)的搶占優(yōu)先級為1,響應優(yōu)先級為6。那么,這3個中斷的優(yōu)先級順序為(由高到底):中斷3、中斷7、中斷6。7.voidHAL_NVIC_SetPriority(IRQn_TypeIRQn,uint32_tPreemptPriority,uint32_tSubPriority)函數用于設置中斷搶占優(yōu)先級和子優(yōu)先級。8.voidHAL_NVIC_EnableIRQ(IRQn_TypeIRQn)函數用于使能中斷。9.voidHAL_NVIC_SetPriorityGrouping(uint32_tPriorityGroup)函數用來配置中斷優(yōu)先級組。10.在頭文件stm32f4xx.h中定義的中斷編號,是以枚舉類型定義的。請問外部中斷0的編號是____6____。11.當中斷優(yōu)先級組設置為2組時,搶占優(yōu)先級和響應優(yōu)先級可以分別設置為哪些優(yōu)先級?【答案】搶占優(yōu)先級:0~3響應優(yōu)先級:0~312.編寫NVIC中斷初始化程序實現如下功能。(1)設置中斷優(yōu)先級組為2組。(2)設置外部中斷2的搶占優(yōu)先級為0,響應優(yōu)先級為2。(3)設置定時器2中斷的搶占優(yōu)先級為2,響應優(yōu)先級為1。(4)設置USART2的中斷搶占優(yōu)先級為3,響應優(yōu)先級為3。并說明當同時出現以上3個中斷請求時,中斷服務程序執(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);}//初始化函數結束外部中斷2、定時器2中斷、USART2的中斷13.外部中斷的中斷請求信號可以是控制器外部產生由GPIO引腳引入的,也可以是由控制器內部一些片上外設產生的。這一說法是否正確?___正確_____。14.每個GPIO引腳都可以作為外部中斷信號輸入引腳,GPIO引腳編號相同的映射到同一個EXTI線,那么GPIOA的0號引腳映射到EXTI線___0_____,GPIOD的0號引腳映射到EXTI線_____0___,GPIOC的5號引腳映射到EXTI線_____5___,GPIOG的10號引腳映射到EXTI線____10____。15.外部中斷信號輸入的觸發(fā)信號形式可以是__上升沿觸發(fā)_、_下降沿觸發(fā)_、_邊沿觸發(fā)_、。16.每個外部中斷在中斷向量表中,是否都獨立占用一個位置?__不是__17.外部中斷___5~9_____共用一個中斷向量和外部中斷__10~15__共用一個中斷向量。18.外部中斷的中斷0在庫函數啟動文件中定義的默認中斷函數名是__EXTI0_IRQHandler__。19.函數HAL_EXTI_SetConfigLine(&EXTI0_HandleStruct,&EXTI0_ConfigStructure)有什么功能?【答案】配置EXTI0中斷線。20.函數HAL_NVIC_SetPriority(EXTI0_IRQn,0,0)有什么功能?【答案】初始化外部中斷EXTI0的優(yōu)先級。21.應用外部中斷,需要先使能GPIO端口的時鐘和___SYSCFG___時鐘。22.試述初始化外部中斷的步驟?!敬鸢浮浚?)使能用到GPIO時鐘。(2)初始化相應GPIO的引腳為輸入。(3)設置GPIO引腳與EXTI線的映射關系。(4)初始化工作類型、設置觸發(fā)條件、使能等等。(5)配置中斷分組(NVIC),并初始化相應中斷通道的優(yōu)先級及使能/禁止。(6)編寫中斷服務函數。(7)編寫中斷服務程序處理內容。23.初始化外部中斷1:將GPIOA的1號引腳作為輸入引腳,中斷模式,上升沿觸發(fā),中斷優(yōu)先級組為3組,搶占優(yōu)先級為3,響應優(yōu)先級為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.外部中斷被掛起后,不能硬件清除,需要在相應的中斷服務程序中將掛起標志清除,使用的函數是____HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__)。25.根據下圖所示,編寫程序以完成外部中斷初始化,中斷輸入引腳為PE5,上升沿檢測方式?!敬鸢浮縂PIO_InitTypeDefGPIO_InitStruct={0};//-------------------第1步--------------------/*開啟按鍵GPIO口的時鐘*/__HAL_RCC_GPIOE_CLK_ENABLE();//-------------------第2步--------------------/*選擇按鍵的引腳*/GPIO_InitStruct.Pin=GPIO_PIN_5;/*設置引腳為外部中斷模式,上升沿觸發(fā)*/GPIO_InitStruct.Mode=GPIO_MODE_IT_RISING;/*設置引腳不上拉也不下拉*/GPIO_InitStruct.Pull=GPIO_NOPULL;/*使用上面的結構體初始化按鍵*/HAL_GPIO_Init(GPIOE,&GPIO_InitStruct);//-------------------第3步--------------------/*配置NVIC為優(yōu)先級組2,整個程序處于同一組*/HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);//-------------------第4步--------------------/*配置搶占優(yōu)先級:1,子優(yōu)先級:1*/HAL_NVIC_SetPriority(EXTI5_IRQn,1,1);//-------------------第5步--------------------/*使能中斷通道*/HAL_NVIC_EnableIRQ(EXTI5_IRQn);15.編寫14題的外部中斷的服務程序,完成LED燈(PB2)的開關控制?!敬鸢浮縱oidEXTI5_IRQHandler(void){ //LED狀態(tài)轉換 HAL_GPIO_TogglePin(GPIOB,GPIO_Pin_2);}第7章1.STM32F407定時器的計數方式有__遞增計數__、__遞減計數_、___中心對齊_。2.STM32F407計數寄存器是__TIMx_CNT__,自動重載寄存器是__TIMx_ARR_,預分頻寄存器是__TIMx_PSC__。3.若TIMx_PSC=4,則時鐘源的預分頻系數是____5____。4.若TIMx_ARR=89,則一次計數溢出的計數次數是___90_____。5.什么是PWM信號?什么是占空比?請繪圖舉例?!敬鸢浮縋WM(PulseWidthModulation):脈沖寬度調制,簡稱脈寬調制。PWM信號:周期內高電平占空比可調的信號。占空比:一個周期內高電平持續(xù)時間與一個周期時間的比值。6.遞增計數模式是從0計數到___ARR_____的值,然后產生一次__溢出事件___。7.遞減計數模式是從_ARR_計數到0的值,然后產生一次向下溢出。中心對齊計數模式是先以遞增計數模式,從0計數到__ARR-1___,然后產生一次向上溢出,再在從___ARR_____計數到____1____,然后產生一次向下溢出。8.當使能了比較輸出功能,輸出PWM波,在邊沿比較模式下,寄存器___ARR_____控制PWM周期,寄存器___CCR___控制占空比。9.當使能了比較輸出功能,輸出PWM波,在邊沿比較模式下,當TIMx_CNT計數值在_0~CCR-1寄存器___范圍時,輸出有效電平;在CCR~ARR范圍時,輸出反向電平。10.【答案】11.編程序,使用TIM1產生1s的定時。【答案】TIM1掛載在APB2總線上,在系統時鐘=180MHz時,PCLK2=90MHz,TIM1的內部時鐘源=PCLK2*2=180MHz。Tout(定時時間)=1s=(ARR+1)(PSC+1)/1800000000,則可以取PSC=18000-1,ARR=10000-1。TIM_HandleTypeDefhtim1;/*-------------------第1步--------------------*/ //開啟TIM1時鐘__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步--------------------*/ //開啟定時器更新中斷HAL_TIM_Base_Start_IT(&htim1); /*-------------------第3-2步--------------------*/ //設置中斷組為0HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0); //設置中斷搶占優(yōu)先級和子優(yōu)先級HAL_NVIC_SetPriority(TIM1_UP_TIM10_IRQn,0,3);HAL_NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);12.編程序,使用TIM3產生PWM波。【答案】(1)通過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步--------------------*/ /*開啟相關的GPIO外設時鐘*/__HAL_RCC_GPIOA_CLK_ENABLE();//使能TIM3時鐘__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; //定時器時鐘源TIMxCLK=HCLK/2=90MHz //設定定時器頻率為=TIMxCLK/(TIM_Prescaler+1)=200KHz //定義PWM波的周期//當定時器從0計數到999,即為1000次,為一個定時周期htim3.Init.Prescaler=449;htim3.Init.CounterMode=TIM_COUNTERMODE_UP;//計數方式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步--------------------*/ /*設置比較輸出通道,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步--------------------*/ //使能定時器HAL_TIM_Base_Start(&htim3);13.編程序,使用TIM2檢測外部一未知時鐘的頻率。【答案】信號從TIM2的通道1輸入。使用的引腳是PA5。定時器初始化voidTIM_Config_IC(void){TIM_ClockConfigTypeDefsClockSourceConfig={0};TIM_SlaveConfigTypeDefsSlaveConfig={0};TIM_MasterConfigTypeDefsMasterConfig={0};TIM_IC_InitTypeDefsConfigIC={0}; GPIO_InitTypeDefGPIO_InitStruct={0}; /*-------------------第1步--------------------*/ //使能TIM2和相關GPIO時鐘__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步--------------------*/ //初始化定時器測量時鐘 //定時器時鐘源TIMxCLK=HCLK/2=90MHz //設定定時器頻率為=TIMxCLK/(TIM_Prescaler+1)=100KHzhtim2.Instance=TIM2;htim2.Init.Prescaler=89;htim2.Init.CounterMode=TIM_COUNTERMODE_UP;//計數方式htim2.Init.Period=4074967295;htim2.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//采樣時鐘分頻htim2.Init.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE;if(HAL_TIM_Base_Init(&htim2)!=HAL_OK)//初始化定時器TIM2{Error_Handler();}//設置TIM2內部時鐘源sClockSourceConfig.ClockSource=TIM_CLOCKSOURCE_INTERNAL;if(HAL_TIM_ConfigClockSource(&htim2,&sClockSourceConfig)!=HAL_OK){Error_Handler();} /*-------------------第4步--------------------*/ //設置觸發(fā)相關參數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步--------------------*/ //設置捕獲相關參數 sConfigIC.ICPolarity=TIM_INPUTCHANNELPOLARITY_RISING;//捕抓到上升沿時,把計數寄存器中的值所存到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步--------------------*/ //開啟定時器中斷HAL_NVIC_SetPriority(TIM2_IRQn,0,1);HAL_NVIC_EnableIRQ(TIM2_IRQn);HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1); //使能捕獲/比較1中斷請求}(2)中斷服務程序,實現頻率計算voidTIM2_IRQHandler(void){if(__HAL_TIM_GET_FLAG(&htim2,TIM_FLAG_CC1)!=RESET) { /*清除定時器捕獲/比較1中斷*/__HAL_TIM_CLEAR_IT(&htim2,TIM_IT_CC1); /*獲取輸入捕獲值*/ IC_Value=HAL_TIM_ReadCapturedValue&htim2,TIM_CHANNEL_1);//得到PWM周期 /*頻率計算*/ Frequency=90000000/90/(float)IC_Value; printf("頻率:%0.2fHz\r\n",Frequency); }}第8章串行異步通信數據格式是什么?用圖說明。【答案】【答案】1600。【答案】USART的工作原理:通用同步異步收發(fā)器(USART)提供了一種靈活的方法,與使用工業(yè)標準的異步串行外部設備之問進行全雙工數據交換。USART利用分數比特率發(fā)生器提供寬范圍的比特率選擇。USART外部接口通過3個引腳與其他設備連接在一起。任何USART雙向通信至少需要兩個腳:接收數據輸入(RX)和發(fā)送數據輸出(TX)。【答案】USART數據接收配置步驟如下:通過調用HAL_UART_Init來激活USART;通過配置結構體UART_InitTypeDef的成員WordLength來定義字長;通過配置結構體UART_InitTypeDef的成員StopBits編程停止位的位數;如果采用多緩沖器通信,配置HAL_DMA_Init函數進行使能。按多緩沖器通信中的描述配置DMA;通過配置結構體UART_InitTypeDef的成員BaudRate要求的比特率調用函數HAL_UART_Receive來讀取接收緩沖其中的字符【答案】當使用USART模塊進行全雙工異步通信時,需要配置波特率、數據位數、奇偶校驗、硬件流控制、停止位數、工作模式?!敬鸢浮烤幊檀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的各種中斷事件被連接到同一個中斷向量,有以下幾種中斷事件:發(fā)送期間:發(fā)送完成中斷、清除發(fā)送中斷、發(fā)送數據寄存器空中斷。接收期間:空閑總線檢測中斷、溢出錯誤中斷、接收數據寄存器非空中斷、檢驗錯誤中斷、LIN斷開符號檢測中斷、噪聲中斷(僅在多緩沖器通信)和幀錯誤中斷(僅在多緩沖器通信)。8.編程序配置STM32F407微控制器的USART2為以下功能:波特率=9600bps,8位有效數據位、無奇偶校驗、無硬件流控、使能接收和發(fā)送、使能接收中斷。【答案】USART2發(fā)送引腳TX:PA2USART2接收引腳RX:PA3voidUSART_Config(void){GPIO_InitTypeDefGPIO_InitStruct={0};UART_HandleTypeDefhuart2;uint8_taRxBuffer[1];//HAL庫使用的串口接收緩沖 /*-------------------第1步--------------------*/ /*使能GPIOA時鐘*/__HAL_RCC_GPIOA_CLK_ENABLE();/*使能USART2時鐘*/__HAL_RCC_USART2_CLK_ENABLE(); /*-------------------第2步--------------------*/ //配置串口相關復用引腳 /*復用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位數據位huart2.Init.StopBits=UART_STOPBITS_1;//1位停止位huart2.Init.Parity=UART_PARITY_NONE;//無奇偶校驗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)//一次處理完成之后,重新開啟中斷并設置RxXferCount為1ucTemp=aRxBuffer[0]; HAL_UART_Transmit(&huart2,(uint8_t*)ucTemp,1,1000); //發(fā)送接收到的數據} 10.編寫USART2查詢式發(fā)送數據的程序。【答案】將字符ch發(fā)送出去。/*發(fā)送一個字節(jié)數據到USART*/HAL_UART_Transmit(&huart2,(uint8_t*)ch,1,1000); //發(fā)送接收到的數據/*等待發(fā)送數據寄存器為空*/while(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_TC)!=SET); //等待發(fā)送結束11.怎么通過USART接收連續(xù)、不定長的數據流?【答案】這里提供兩種思路。1)使用定時器配合實現(1)USART接收到第一個字符后(中斷),啟動一個定時器,定時時間大于一個USART數據幀時間。(2)后續(xù),USART每接收到一個字符,都重新啟動定時器,從0開始計數器(只需要將CNT寄存器清0)。(3)在定時器產生溢出中斷后,表示USART數據接收結束。(因為連續(xù)接收數據的過程中斷了。)2)使用USART的IDLE中斷檢測數據接收結束需要使能USART_IT_RXNE和USART_IT_IDLE中斷。USART中斷中,如果判定是由于USART_IT_RXNE觸發(fā),則接收數據。USART中斷中,如果判定是由于USART_IT_IDLE觸發(fā),則表示數據接收。3)USART的IDLE中斷和DMA實現第9章【答案】串行外設接口(SPI)允許芯片與外部設備以半/全雙工、同步、串行方式通信。此接口可以被配置成主模式,并為外部從設備提供通信時鐘(SCK)。SPI接口還能以多主配置方式工作,它有多種用途,如使用一條雙向數據線的雙線單工同步傳輸,還可使用CRC檢驗的可靠通信。SPI的特點如下:3線全雙工同步傳輸。帶或不帶第3根雙向數據線的雙線單工同步傳輸。8或16位傳輸幀格式選擇。主或從操作。支持多主模式。8個主模式比特率預分頻系數(最大為fPCLK/2)。從模式頻率(最大為fPCLK/2)。主模式和從模式的快速通信,最大SPI速度達到18MHz。主模式和從模式下均可以由軟件或硬件進行NSS管理,主/從操作模式的動態(tài)改變。可編程的時鐘極性和相位??删幊痰臄祿樞颍琈SB在前或LSB在前。可觸發(fā)中斷的專用發(fā)送和接收標志。SPI總線忙狀態(tài)標志。支持可靠通信的硬件CRC。可觸發(fā)中斷的主模式故障、過載以及CRC錯誤標志。支持DMA功能的1字節(jié)發(fā)送和接收緩沖器,產生發(fā)送和接收請求?!敬鸢浮客ǔPI通過以下4個引腳與外部期間相連:MISO:主設備輸入/從設備輸出引腳。該管腳在從模式下發(fā)送數據,在主模式下接收數據。MOSI:主設備輸出/從設備輸入引腳。該管腳在主模式下發(fā)送數據,在從模式下接收數據。SCK:串口時鐘,作為主設備的輸出,從設備的輸入。NSS:從設備選擇。這是一個可選的引腳,用來選擇主/從設備。它的功能是用來作為“片選引腳”,讓主設備可以單獨地與特定從設備通信,避免數據線上的沖突。從設備的NSS引腳可以由主設備當作一個標準的I/O來驅動。一旦被使能(SSOE位),NSS引腳也可以作為輸出引腳,并在SPI設置為主模式時拉低;此時,所有NSS引腳連接到主設備NSS引腳的SPI設備,會檢測到低電平,如果它們被設置為NSS硬件模式,就會自動進入從設備狀態(tài)?!敬鸢浮吭趶呐渲弥?,SCK引腳用于接收從主設備來的串行時鐘,配置步驟如下:設置結構體SPI_InitTypeDef的成員,以定義數據幀格式為8位或16位。選擇CPOL和CPHA位來定義數據傳輸和串行時鐘之間的相位關系。為保證正確的數據傳輸,從設備和主設備的CPOL和CPHA位必須配置成相同的方式。幀格式(MSB在前還是LSB在前取決于結構體SPI_InitTypeDef的成員必須和主設備相同。硬件模式下,在完整的數據幀(8位或16位)發(fā)送過程中,NSS引腳必須為低電平。軟件模式下,設置為SPI_NSS_SOFT。調用函數,使相應引腳工作于SPI模式下。在主配置時,串行時鐘在SCK引腳產生,配置步驟如下:設置結構體SPI_InitTypeDef的成員;定義串行時鐘比特率。設置結構體SPI_InitTypeDef的成員,以定義數據幀格式為8位或16位。選擇CPOL和CPHA位來定義數據傳輸和串行時鐘之間的相位關系。幀格式(MSB在前還是LSB在前取決于結構體SPI_InitTypeDef的成員必須和主設備相同。如果NSS引腳需要工作在輸入模式,硬件模式中在整個數據幀傳輸期間應把NSS腳連接到高電平:在軟件模式中,需設置結構體SPI_InitTypeDef的成員NSS。如果NSS引腳工作在輸出模式,則只需設置SSOE位。必須調用函數(只當NSS腳被連到高電平,這些位才能保持置位)?!敬鸢浮繎贸绦蛲ㄟ^BUSY、TXE和RXNE3個狀態(tài)標志可以完全監(jiān)控SPI總線的狀態(tài)?!敬鸢浮縎PI總線初始化代碼如下:【答案】SPI的中斷請求有發(fā)送緩沖器空標志;接收緩沖器非空標志;主模式錯誤事件;溢出錯誤;CRC錯誤標志。第10章【答案】I2C(芯片間)總線接口連接微控制器和串行I2C總線,它提供多主機功能,控制所有I2C總線特定的時序、協議、仲裁和定時,支持標準和快速兩種模式,同時與SMBus2.0兼容。【答案】I2C模塊接收和發(fā)送數據,并將數據從串行轉換成并行,或并行轉換成串行,可以開啟或禁止中斷。接口通過數據引腳(SDA)和時鐘引腳(SCL)連接到I2C總線,允許連接到標準(高達100kHz)或快速(高達400kHz)的I2C總線。I2C模塊有多種用途,包括CRC碼的生成和檢驗、SMBus(系統管理總線-SystemManagementBus)和PMBus(電源管理總線-PowerManagemcntBus)。根據特定設備的需要,可以使用DMA以減輕CPU的負擔?!敬鸢浮恐灰髢蓷l總線線路:一條串行數據線SDA,一條串行時鐘線SCL。每個連接到總線的器件都可以通過唯一的地址和一直存在的簡單的主機/從機關系軟件設定地址,主機可以作為主機發(fā)送器或主機接收器。它是一個真正的多主機總線,如果兩個或更多主機同時初始化,數據傳輸可以通過沖突檢測和仲裁防止數據被破壞。串行的8位雙向數據傳輸位速率在標準模式下可達100kbit/s,快速模式下可達400kbit/s,高速模式下可達3.4Mbit/s。連接到相同總線的IC數量只受到總線的最大電容400pF限制。I2C有4種模式可供選擇,可以4種模式中的一種運行:從發(fā)送器模式。從接收器模式。主發(fā)送器模式。主接收器模式?!敬鸢浮縄2C默認工作于從模式。接口在生成起始條件后自動從從模式切換到主模式:當仲裁丟失或產生停止信號時,則從主模式切換到從模式。允許多主機功能。主模式時,I2C接口啟動數據傳輸并產生時鐘信號。串行數據傳輸總是以起始條件開始并以停止條件結束。起始條件和停止條件都是在主模式下由軟件控制產生。【答案】在主模式時,I2C接口啟動數據傳輸并產生時鐘信號。串行數據傳輸總是以起始條件_開始并以停止條件結束。當通過庫函數SET_BIT(CR1,I2C_CR1_START)設置狀態(tài)參數為ENABLE在總線上產生了起始條件,設備就進入了主模式,主模式所要求的操作順序。在HAL_I2C_Init中設置ClockSpeed設定該模塊的輸入時鐘,以產生正確的時序。在HAL_I2C_MspInit中設置I2C的端口和RCC時鐘。__HAL_I2C_ENABLE啟動I2C外設。寫庫函數SET_BIT(CR1,I2C_CR1_START),產生起始條件。模塊的輸入時鐘頻率在標準模式下為2MHz,快速模式下為4MHz。【答案】利用DMA發(fā)送:定義I2C結構體I2C_HandleTypeDefhi2c1,DMA配置結構體DMA_HandleTypeDefhdma_i2c1_tx;配置DMA通道,Instance=DMA1_Channel6;配置DMA數據傳輸方向,hdma_i2c1_tx.Init.Direction=DMA_MEMORY_TO_PERIPH;使能DMA地址增,hdma_i2c1_tx.Init.MemInc=DMA_MINC_ENABLE;設置DMA外設和存儲數據對齊方式,i2c1_tx.Init.PeriphDataAlignment=DMA_PDATAALIGN_BYTE;hdma_i2c1_tx.Init.MemDataAlignment=DMA_MDATAALIGN_BYTE;設置DMA模式,i2c1_tx.Init.Mode=DMA_NORMAL;設置DMA優(yōu)先級,i2c1_tx.Init.Priority=DMA_PRIORITY_HIGH;配置DMA結構體,HAL_DMA_Init(&hdma_i2c1_tx);關聯DMA結構體和I2C結構體配置,__HAL_LINKDMA(hi2c1,hdmatx,hdma_i2c1_tx)。【答案】全部的I2C中斷都匯總到兩個中斷\事件通道中,SB、ADDR、ADD10、STOPF,BTF、RXNE和TXE通過邏輯或匯合到IT_Event中;BERR、ARLO、AF、OVR、PECERR、TIMEOUT和SMBALERT通過邏輯或匯合到IT_Error個中斷通道中。第11章【答案】轉換開始時,順序脈沖發(fā)生器輸出的順序脈沖首先將寄存器的最高位置1,經DAC轉換為相應的模擬電壓VA送入比較器與待轉換的模擬電壓VI進行比較。若VA>VI,說明數字量過大,除去最高位的1,而將次高位置1,再一次比較。若VA<VI,說明數字量還不夠大,保留該位的1,且還須將下一位置1。這樣逐次比較下
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度直播平臺主播培訓及管理合同
- 2025年度新能源汽車產業(yè)投資合作合同
- 二零二五年度商標共營協議及跨國品牌合作合同
- 二零二五年度超市商品陳列與文化氛圍營造合同
- 2025年度民宿租賃合同終止及服務質量協議
- 二零二五年度集體合同簽訂與新型學徒制實施
- 二零二五年度個人對個人科技成果轉化借款合同
- 2025年度機關炊事員食品安全培訓聘用協議
- 日常行政管理事務處理指導書
- 日化用品行業(yè)供應鏈優(yōu)化與市場拓展策略研究計劃
- 山東教育出版社(魯教版)八年級化學全一冊教學課件
- 《外貿風險管理》完整全套課件
- 公路水運工程施工企業(yè)主要負責人和安全生產管理人員大綱和題庫
- 榜樣7航天追夢人王亞平事跡介紹PPT英雄航天員王亞平事跡介紹PPT課件(帶內容)
- 物理word版2023山東高考答題卡涂準考證號和條形碼
- 人教版《道德與法治》三年級下冊全冊全套課件
- GB/T 32294-2015鍛制承插焊和螺紋活接頭
- 部編人教版三年級語文下冊《快樂讀書吧》精美課件
- 建筑力學 李前程 第一章 緒 論
- 2023年新教科版科學六年級下冊學生活動手冊答案
- 體育測量與評價-第一章緒論課件
評論
0/150
提交評論