




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
《嵌入式原理與應用》習題答案第1章【答案】2.簡述馮·諾依曼結構和哈佛結構的區別。【答案】【答案】4.什么是嵌入式系統?【答案】5.嵌入式系統與通用計算機系統的異同點?【答案】6.嵌入式系統的特點主要有哪些?【答案】7.常見的嵌入式操作系統有哪幾種?【答案】8.ARM處理器有什么特點?【答案】因為ARM處理器采用RISC結構,所以它具有RISC架構的一些經典特點。(1)體積小、功耗低、成本低、性能高。(2)支持Thumb(16位)/ARM(32位)雙指令集,能很好地兼容8位/16位器件。(3)大量使用寄存器,指令執行速度更快。(4)大多數數據操作都在寄存器中完成。(5)尋址方式靈活簡單,執行效率高。內含嵌入式在線仿真器。9.簡述ARM處理器的應用領域。【答案】ARM處理器可廣泛應用于以下領域。(1)為通信、消費電子、成像設備等產品,提供可運行復雜操作系統的開放應用平臺。(2)在海量存儲、汽車電子、工業控制和網絡應用等領域,提供實時嵌入式應用。在軍事、航天等領域,提供寬溫、抗電磁干擾、耐腐蝕的復雜嵌入式應用。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時鐘為開啟狀態,RCC_OscInitStruct.HSEState=RCC_HSE_ON;配置HSE分頻因子,RCC_OscInitStruct.HSEPredivValue=RCC_HSE_PREDIV_DIV1;配置HIS時鐘為開啟狀態,RCC_OscInitStruct.HSIState=RCC_HSI_ON;配置PLL為開啟狀態,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等而設計的,大大縮短了開發時間。2.STM32CubeMX軟件的特點是什么?【答案】(1)集成了ST有限公司的每一款型號的MCU/MPU的可配置的圖形界面,能夠自動提示IO沖突并且對于復用IO可自動分配。(2)具有動態驗證的時鐘樹。(3)能夠很方便的使用所集成的中間件。(4)能夠估算MCU/MPU在不同主頻運行下的功耗。(5)能夠輸出不同編譯器的工程,比如能夠直接生成MDK、EWARM、STM32CubeIDE、MakeFile等工程。3.STM32CubeMX軟件的工作區有哪4個界面?(1)Pinout&Configuration(引腳與配置)界面,這是對MCU的系統內核、外設、中間件和引腳進行配置的界面,是主要的工作界面。(2)ClockConfiguration(時鐘配置)界面,通過圖形化的時鐘樹對MCU的各個時鐘信號頻率進行配置的界面。(3)ProjectManager(項目管理)界面,對項目進行各種設置的界面。(4)Tools(工具)界面,進行功耗計算、DDRSDRAM適用性分析(僅用于STM32MP1系列)的操作界面。第4章1.STM32CubeIDE軟件是什么?【答案】STM32CubeIDE是STM32Cube生態系統中的一個重要軟件工具,是ST官方免費提供的STM32MCU/MPU程序開發IDE軟件。2.STM32CubeIDE有什么特點?【答案】STM32CubeIDE就是在TrueSTUDIO基礎上改進和升級得來的,有如下一些特點。(1)STM32CubeIDE使用的是EclipseIDE環境,具有強大的編輯功能,其使用習慣與TrueSTUDIO相同。(2)STM32CubeIDE使用的是GNUC/C++編譯器,支持在STM32項目開發中使用C++編程。(3)STM32CubeIDE內部集成了STM32CubeMX,在STM32CubeIDE里就可以進行MCU圖形化配置和代碼生成,然后在初始代碼基礎上繼續編程。當然,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區域的編程。
(7)既支持圖形化界面操作也支持命令行操作。
(8)支持對ST-Link調試器的在線固件升級。
(9)配合STM32TrustedPackageCreatortool實現固件加密操作。
(10)支持Windows、Linux和MacOS多種操作系統。第5章1.列舉GPIO的工作模式。【答案】(1)輸入浮空模式。(2)輸入上拉模式。(3)輸入下拉模式。(4)模擬功能模式。(5)具有上拉/下拉功能的開漏輸出模式。(6)具有上拉/下拉功能的推挽輸出模式。(7)具有上拉/下拉功能的復用功能推挽模式。(8)具有上拉/下拉功能的復用功能開漏模式。2.STM32F407系列微控制器每個GPIO端口有__16個__引腳。3.當引腳被配置為模擬功能模式時,上拉/下拉功能應被_禁止_。4.當引腳被配置為輸出模式,而輸出類型被配置為開漏時,引腳要輸出高電平,需要__使能引腳上拉功能____。5.控制引腳輸出電平時,需要操作__ODR____寄存器;獲取引腳狀態需要操作__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引腳狀態,使用的庫函數是GPIO_PinStateHAL_GPIO_ReadPin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)____。10.在stm32f407的庫函數中,設定某些特定GPIO引腳輸出狀態,使用的庫函數是voidHAL_GPIO_WritePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,GPIO_PinStatePinState)。11.結合電路說明推挽輸出和開漏輸出的區別。【答案】在推挽輸出下,輸出電路中有PMOS和NMOS管組成的推挽結構電路,當ODR寄存器中對應位寫‘1’時,NMOS管截止,PMOS管導通,引腳輸出高電平。當ODR寄存器中對應位寫‘0’時,NMOS管導通,PMOS管截止,引腳輸出低電平。在開漏輸出下,輸出電路中有只有NMOS管,當ODR寄存器中對應位寫‘1’時,NMOS管截止,這是引腳處于浮空狀態,必須通過上拉電阻使引腳輸出高電平。當ODR寄存器中對應位寫‘0’時,NMOS管導通,PMOS管截止,引腳輸出低電平。12.當把引腳配置為模擬輸入模式時,那么它是否還具備耐5V功能?【答案】不具備耐5V功能。此時,引腳輸入通道和數字電路隔離,處于模擬電路狀態13.簡述片上外設使用初始化流程。【答案】(1)使能GPIO的時鐘(非常重要),涉及以下文件。(2)設置對應于片上外設使用的GPIO工作模式。(3)如果使用復用功能,需要單獨設置每一個GPIO引腳的復用功能。(4)在應用程序中讀取引腳狀態、控制引腳輸出狀態或使用復用功能完成特定功能。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號上的狀態讀到處理器中。【答案】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.有獨立按鍵電路,連接在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(引腳初始化程序和按鍵控制程序)。【答案】(1)①將列線設置為輸出模式(圖中PB0和PB1),并分別在PB0和PB1上輸出低電平。行線設置為輸入模式(圖中PB2和PB3)。都使能上拉。②讀取PB2和PB3狀態,判斷是否有按鍵按下。(判斷原則:PB2和PB3都是高電平時,沒有按鍵按下。PB2和PB3有任何一個為低電平是,有按鍵按下。判斷原理:在沒有按鍵按下去的時候,由于上拉電阻的存在,PB2和PB3都是高電平,讀取狀態時,PB2=1,PB3=1。如果有按鍵按下去的話,摸一個行線和列線連接在一起。由于PB0和PB1都為低電平,因此連接在一起的行線會被列線下拉到低電平。這時,在讀取PB2和PB3狀態時,就不會全是高電平。例如:當按下S1時,PB1和PB2連在一起,PB2被PB1拉低到低電平。讀取PB2和PB3狀態時,PB2=0,PB3=1。)有按鍵按下則繼續③,反之則結束。③延時去抖動。典型值是延時10ms,不同的按鍵類型,時間長度不一樣。④在此判斷是否有按鍵按下,原理同步驟②②④都判斷有按鍵按下時,繼續⑤。反之則結束。⑤保存讀取的PB2和PB3的狀態,作為判別行號的依據。⑥將行線設置為輸出模式(圖中PB2和PB3),并分別在PB2和PB3上輸出低電平。列線設置為輸入模式(圖中PB0和PB1)。都使能上拉。⑦讀取PB0和PB1的狀態,并保存。作為判別列線的依據。⑧根據⑤⑦兩個步得到的信息,算出是哪一個按鍵被按下去了。矩陣鍵盤掃描流程圖:(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內核中定義了兩個優先級的概念:搶占優先級和響應優先級,每個中斷源都需要被指定這兩種優先級,由兩者的組合得到中斷的優先級別。NVIC對中斷優先級的管理方法如下。(1)搶占優先級較高的中斷可以打斷正在進行的搶占優先級較低的中斷,不同搶占優先級的中斷可以實現中斷的嵌套。(2)搶占優先級相同的中斷,響應優先級高的不可以打斷響應優先級低的中斷。(3)當兩個搶占優先級相同的中斷同時發生的情況下,哪個中斷響應優先級高,哪個中斷就先執行。(4)(5)如果兩個中斷的搶占優先級和響應優先級都一樣,且同時請求,則根據異常中斷向量表中的排位順序決定哪個中斷先執行。2.中斷優先級編號越小,則其優先級越高。3.中斷搶占優先級高的是否可以搶占優先級低的中斷流程?可以。4.響應搶占優先級高的是否可以搶占優先級低的中斷流程?在搶占優先級一致時,不可以。5.兩個中斷搶占優先級和響應優先級都相同,同時向內核申請中斷,怎么響應中斷?【答案】按照兩個中斷在中斷向量表中的位置決定。向量表中位置靠前的先被響應。6.假定設置中斷優先級組為1,然后設置:中斷3(RTC中斷)的搶占優先級為1,響應優先級為1;中斷6(外部中斷0)的搶占優先級為3,響應優先級為0;中斷7(外部中斷1)的搶占優先級為1,響應優先級為6。那么,這3個中斷的優先級順序為(由高到底):中斷3、中斷7、中斷6。7.voidHAL_NVIC_SetPriority(IRQn_TypeIRQn,uint32_tPreemptPriority,uint32_tSubPriority)函數用于設置中斷搶占優先級和子優先級。8.voidHAL_NVIC_EnableIRQ(IRQn_TypeIRQn)函數用于使能中斷。9.voidHAL_NVIC_SetPriorityGrouping(uint32_tPriorityGroup)函數用來配置中斷優先級組。10.在頭文件stm32f4xx.h中定義的中斷編號,是以枚舉類型定義的。請問外部中斷0的編號是____6____。11.當中斷優先級組設置為2組時,搶占優先級和響應優先級可以分別設置為哪些優先級?【答案】搶占優先級:0~3響應優先級:0~312.編寫NVIC中斷初始化程序實現如下功能。(1)設置中斷優先級組為2組。(2)設置外部中斷2的搶占優先級為0,響應優先級為2。(3)設置定時器2中斷的搶占優先級為2,響應優先級為1。(4)設置USART2的中斷搶占優先級為3,響應優先級為3。并說明當同時出現以上3個中斷請求時,中斷服務程序執行的順序。【答案】staticvoidMX_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.外部中斷信號輸入的觸發信號形式可以是__上升沿觸發_、_下降沿觸發_、_邊沿觸發_、。16.每個外部中斷在中斷向量表中,是否都獨立占用一個位置?__不是__17.外部中斷的中斷0在庫函數啟動文件中定義的默認中斷函數名是__EXTI0_IRQHandler__。18.函數HAL_EXTI_SetConfigLine(&EXTI0_HandleStruct,&EXTI0_ConfigStructure)有什么功能?【答案】配置EXTI0中斷線。19.函數HAL_NVIC_SetPriority(EXTI0_IRQn,0,0)有什么功能?【答案】初始化外部中斷EXTI0的優先級。20.應用外部中斷,需要先使能GPIO端口的時鐘和___SYSCFG___時鐘。21.試述初始化外部中斷的步驟。【答案】(1)使能用到GPIO時鐘。(2)初始化相應GPIO的引腳為輸入。(3)設置GPIO引腳與EXTI線的映射關系。(4)初始化工作類型、設置觸發條件、使能等等。(5)配置中斷分組(NVIC),并初始化相應中斷通道的優先級及使能/禁止。(6)編寫中斷服務函數。(7)編寫中斷服務程序處理內容。22.初始化外部中斷1:將GPIOA的1號引腳作為輸入引腳,中斷模式,上升沿觸發,中斷優先級組為3組,搶占優先級為3,響應優先級為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);23.外部中斷被掛起后,不能硬件清除,需要在相應的中斷服務程序中將掛起標志清除,使用的函數是____HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__)。24.根據下圖所示,編寫程序以完成外部中斷初始化,中斷輸入引腳為PE5,上升沿檢測方式。【答案】GPIO_InitTypeDefGPIO_InitStruct={0};//-------------------第1步--------------------/*開啟按鍵GPIO口的時鐘*/__HAL_RCC_GPIOE_CLK_ENABLE();//-------------------第2步--------------------/*選擇按鍵的引腳*/GPIO_InitStruct.Pin=GPIO_PIN_5;/*設置引腳為外部中斷模式,上升沿觸發*/GPIO_InitStruct.Mode=GPIO_MODE_IT_RISING;/*設置引腳不上拉也不下拉*/GPIO_InitStruct.Pull=GPIO_NOPULL;/*使用上面的結構體初始化按鍵*/HAL_GPIO_Init(GPIOE,&GPIO_InitStruct);//-------------------第3步--------------------/*配置NVIC為優先級組2,整個程序處于同一組*/HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);//-------------------第4步--------------------/*配置搶占優先級:1,子優先級:1*/HAL_NVIC_SetPriority(EXTI5_IRQn,1,1);//-------------------第5步--------------------/*使能中斷通道*/HAL_NVIC_EnableIRQ(EXTI5_IRQn);第7章1.STM32F407定時器的計數方式有__遞增計數__、__遞減計數_、___中心對齊_。2.STM32F407計數寄存器是__TIMx_CNT__,自動重載寄存器是__TIMx_ARR_,預分頻寄存器是__TIMx_PSC__。3.若TIMx_PSC=4,則時鐘源的預分頻系數是____5____。4.若TIMx_ARR=89,則一次計數溢出的計數次數是___90_____。5.什么是PWM信號?什么是占空比?請繪圖舉例。【答案】PWM(PulseWidthModulation):脈沖寬度調制,簡稱脈寬調制。PWM信號:周期內高電平占空比可調的信號。占空比:一個周期內高電平持續時間與一個周期時間的比值。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); //設置中斷搶占優先級和子優先級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步--------------------*/ //設置觸發相關參數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的工作原理:通用同步異步收發器(USART)提供了一種靈活的方法,與使用工業標準的異步串行外部設備之問進行全雙工數據交換。USART利用分數比特率發生器提供寬范圍的比特率選擇。USART外部接口通過3個引腳與其他設備連接在一起。任何USART雙向通信至少需要兩個腳:接收數據輸入(RX)和發送數據輸出(TX)。【答案】USART數據接收配置步驟如下:通過調用HAL_UART_Init來激活USART;通過配置結構體UART_InitTypeDef的成員WordLength來定義字長;通過配置結構體UART_InitTypeDef的成員StopBits編程停止位的位數;如果采用多緩沖器通信,配置HAL_DMA_Init函數進行使能。按多緩沖器通信中的描述配置DMA;通過配置結構體UART_InitTypeDef的成員BaudRate要求的比特率調用函數HAL_UART_Receive來讀取接收緩沖其中的字符【答案】當使用USART模塊進行全雙工異步通信時,需要配置波特率、數據位數、奇偶校驗、硬件流控制、停止位數、工作模式。【答案】編程代碼如下: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的各種中斷事件被連接到同一個中斷向量,有以下幾種中斷事件:發送期間:發送完成中斷、清除發送中斷、發送數據寄存器空中斷。接收期間:空閑總線檢測中斷、溢出錯誤中斷、接收數據寄存器非空中斷、檢驗錯誤中斷、LIN斷開符號檢測中斷、噪聲中斷(僅在多緩沖器通信)和幀錯誤中斷(僅在多緩沖器通信)。8.編程序配置STM32F407微控制器的USART2為以下功能:波特率=9600bps,8位有效數據位、無奇偶校驗、無硬件流控、使能接收和發送、使能接收中斷。【答案】USART2發送引腳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;//收發模式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接收中斷的程序。【答案】voidUSART2_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); //發送接收到的數據} 10.編寫USART2查詢式發送數據的程序。【答案】將字符ch發送出去。/*發送一個字節數據到USART*/HAL_UART_Transmit(&huart2,(uint8_t*)ch,1,1000); //發送接收到的數據/*等待發送數據寄存器為空*/while(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_TC)!=SET); //等待發送結束11.怎么通過USART接收連續、不定長的數據流?【答案】這里提供兩種思路。1)使用定時器配合實現(1)USART接收到第一個字符后(中斷),啟動一個定時器,定時時間大于一個USART數據幀時間。(2)后續,USART每接收到一個字符,都重新啟動定時器,從0開始計數器(只需要將CNT寄存器清0)。(3)在定時器產生溢出中斷后,表示USART數據接收結束。(因為連續接收數據的過程中斷了。)2)使用USART的IDLE中斷檢測數據接收結束需要使能USART_IT_RXNE和USART_IT_IDLE中斷。USART中斷中,如果判定是由于USART_IT_RXNE觸發,則接收數據。USART中斷中,如果判定是由于USART_IT_IDLE觸發,則表示數據接收。3)USART的IDLE中斷和DMA實現第9章13.采用RT-Thread實時操作系統,創建2個線程,在線程切換時打印線程信息。采用C語言編程。以下是一個使用RT-Thread實時操作系統創建兩個線程,并在線程切換時打印線程信息的C語言示例代碼。配置RT-Thread確保你已經配置好RT-Thread環境,并可以編譯和運行RT-Thread應用程序。這個示例假設你已經搭建好了開發環境。示例代碼下面的示例代碼展示了如何在RT-Thread中創建兩個線程,并且在線程切換時打印線程信息。#include<rtthread.h>#include<stdio.h>/*定義線程的棧空間*/#defineTHREAD_STACK_SIZE1024/*定義線程入口*/voidthread_entry(void*parameter){while(1){/*線程執行的代碼,例如打印信息*/rt_kprintf("Thread%sisrunning\n",rt_thread_self()->name);/*休眠一段時間*/rt_thread_mdelay(1000);}}/*定義兩個線程控制塊*/staticrt_thread_tthread1=RT_NULL;staticrt_thread_tthread2=RT_NULL;/*線程切換鉤子函數*/voidthread_switch_hook(structrt_thread*from,structrt_thread*to){rt_kprintf("Switchfrom%sto%s\n",from->name,to->name);}intmain(void){/*初始化線程1*/thread1=rt_thread_create("thread1",thread_entry,RT_NULL,THREAD_STACK_SIZE,10,10);if(thread1!=RT_NULL){rt_thread_startup(thread1);}/*初始化線程2*/thread2=rt_thread_create("thread2",thread_entry,RT_NULL,THREAD_STACK_SIZE,11,10);if(thread2!=RT_NULL){rt_thread_startup(thread2);}/*設置線程切換鉤子函數*/rt_thread_switch_hook_set(thread_switch_hook);return0;}說明(1)創建線程。使用rt_thread_create函數創建線程,指定線程名稱,入口函數,參數,棧大小,優先級和時間片。使用rt_thread_startup函數啟動線程。(2)設置線程切換鉤子函數。定義thread_switch_hook函數,該函數將在每次線程切換時被調用。使用rt_thread_switch_hook_set函數設置線程切換鉤子函數。(3)線程入口函數。thread_entry函數是每個線程的入口函數,在線程執行期間會打印線程名稱,并休眠一段時間。(4)主函數。main函數負責創建和啟動兩個線程,并設置線程切換鉤子函數。編譯和運行確保你已經配置好了RT-Thread開發環境,并將上述代碼集成到你的RT-Thread應用程序中。編譯并下載到你的開發板或仿真環境中運行。你應該能夠看到打印的線程信息,以及每次線程切換時的切換信息。結果當代碼運行時,你應當看到類似如下的輸出:Threadthread1isrunningSwitchfromidletothread1Threadthread1isrunningSwitchfromthread1tothread2Threadthread2isrunningThreadthread1isrunningSwitchfromthread2tothread1...這表明線程1和線程2在不停地切換,并打印相關信息。14.采用RT-Thread實時操作系統,創建3個線程,其中2個線程優先級相同,另1個線程優先級較高,編程分析3個線程的運行情況。采用C語言編程。下面我們使用RT-Thread實時操作系統創建三個線程,其中線程1和線程2具有相同的優先級,而線程3具有較高的優先級,并分析這三個線程的運行情況。相同優先級的線程會輪流執行,而優先級較高的線程會搶占其它兩個線程的運行。示例代碼以下是用C語言編寫的代碼示例:#include<rtthread.h>#include<stdio.h>/*定義線程的棧空間*/#defineTHREAD_STACK_SIZE1024/*定義三個線程控制塊*/staticrt_thread_tthread1=RT_NULL;staticrt_thread_tthread2=RT_NULL;staticrt_thread_tthread3=RT_NULL;/*線程切換鉤子函數*/voidthread_switch_hook(structrt_thread*from,structrt_thread*to){rt_kprintf("Switchfrom%sto%s\n",from->name,to->name);}/*定義線程1的入口函數*/voidthread1_entry(void*parameter){while(1){rt_kprintf("Thread1isrunning\n");rt_thread_mdelay(500);//500ms延時}}/*定義線程2的入口函數*/voidthread2_entry(void*parameter){while(1){rt_kprintf("Thread2isrunning\n");rt_thread_mdelay(500);//500ms延時}}/*定義線程3的入口函數*/voidthread3_entry(void*parameter){while(1){rt_kprintf("Thread3isrunning\n");rt_thread_mdelay(700);//700ms延時}}intmain(void){/*創建線程1,優先級10*/thread1=rt_thread_create("thread1",thread1_entry,RT_NULL,THREAD_STACK_SIZE,10,10);if(thread1!=RT_NULL){rt_thread_startup(thread1);}/*創建線程2,優先級10*/thread2=rt_thread_create("thread2",thread2_entry,RT_NULL,THREAD_STACK_SIZE,10,10);if(thread2!=RT_NULL){rt_thread_startup(thread2);}/*創建線程3,優先級5(較高優先級)*/thread3=rt_thread_create("thread3",thread3_entry,RT_NULL,THREAD_STACK_SIZE,5,10);if(thread3!=RT_NULL){rt_thread_startup(thread3);}/*設置線程切換鉤子函數*/rt_thread_switch_hook_set(thread_switch_hook);return0;}運行分析(1)優先級調度。thread1和thread2的優先級都是10,而thread3的優先級是5,較高優先級。在RT-Thread
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴陽市花溪區麥坪中學2025年中考適應性測試化學試卷
- 2025屆廣東省內三校高三上學期1月一模地理試題(解析版)
- 幼兒園課件:十二生肖的故事
- 幼教論文淺談“以愛育人”在幼兒園的重要意義
- 警務社區面試題及答案
- 2025標準水泥購銷合同模板
- 2025采購合同審批制度
- 2024年寧夏回族自治區外事辦公室下屬事業單位真題
- 2024年四川廣安鑫鴻集團有限公司招聘工作人員真題
- 2024年甘肅省特崗招聘真題
- GB/T 14598.2-2025量度繼電器和保護裝置第1部分:通用要求
- 2025年安全月安全有獎答題考試題庫(附答案)
- 浙江省寧波市2025年八年級下學期期末數學試題及答案及答案
- 北京歷史文化街區風貌保護與更新設計導則
- 國能集團工會工作報告
- 2025年商業管理與商業模式創新能力考核題及答案
- T/CBMCA 012-2020室內環境清潔消毒服務規范
- 2024年青海省囊謙縣事業單位公開招聘輔警考試題帶答案分析
- 廣東省深圳市南山區2023-2024學年七年級下學期期末語文試題(含答案)
- 工程力學(山東科技大學)知到智慧樹期末考試答案題庫2025年山東科技大學
- 2025中考語文常考作文押題(10大主題+10篇范文)
評論
0/150
提交評論