2025年stm32嵌入式考試試題及答案_第1頁(yè)
2025年stm32嵌入式考試試題及答案_第2頁(yè)
2025年stm32嵌入式考試試題及答案_第3頁(yè)
2025年stm32嵌入式考試試題及答案_第4頁(yè)
2025年stm32嵌入式考試試題及答案_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

2025年stm32嵌入式考試試題及答案一、單項(xiàng)選擇題(每題2分,共20分)1.STM32H7系列微控制器采用的Cortex-M內(nèi)核版本是()A.Cortex-M3B.Cortex-M4C.Cortex-M7D.Cortex-M0+答案:C2.關(guān)于STM32時(shí)鐘樹,以下描述錯(cuò)誤的是()A.HSI是內(nèi)部高速時(shí)鐘,精度通常低于HSEB.PLL可以將輸入時(shí)鐘倍頻到更高頻率C.LSE是外部低速時(shí)鐘,通常用于RTCD.系統(tǒng)時(shí)鐘只能選擇HSE作為輸入源答案:D3.某STM32工程中,使用HAL庫(kù)配置TIM2為1ms定時(shí)中斷,PSC設(shè)為999,ARR設(shè)為15999,已知系統(tǒng)時(shí)鐘為160MHz,則實(shí)際定時(shí)時(shí)間為()A.0.5msB.1msC.2msD.5ms答案:B(計(jì)算:(PSC+1)(ARR+1)/系統(tǒng)時(shí)鐘=(1000)(16000)/160e6=1ms)4.以下哪種GPIO模式無(wú)法直接讀取外部電平()A.輸入浮空B.輸入上拉C.推挽輸出D.開漏輸出答案:C(推挽輸出模式下,GPIO寄存器的輸入數(shù)據(jù)寄存器(IDR)仍可讀取外部電平,但嚴(yán)格來(lái)說(shuō)輸出模式主要用于輸出,題目考察意圖為“無(wú)法直接作為輸入使用”,故選擇C)5.STM32的NVIC中,若優(yōu)先級(jí)分組設(shè)置為4位搶占優(yōu)先級(jí)(0位響應(yīng)優(yōu)先級(jí)),則以下中斷優(yōu)先級(jí)配置有效的是()A.搶占優(yōu)先級(jí)15,響應(yīng)優(yōu)先級(jí)0B.搶占優(yōu)先級(jí)8,響應(yīng)優(yōu)先級(jí)4C.搶占優(yōu)先級(jí)3,響應(yīng)優(yōu)先級(jí)1D.搶占優(yōu)先級(jí)0,響應(yīng)優(yōu)先級(jí)15答案:A(分組4時(shí),響應(yīng)優(yōu)先級(jí)位寬為0,僅搶占優(yōu)先級(jí)有效,范圍0-15)6.ADC的轉(zhuǎn)換精度與以下哪項(xiàng)無(wú)關(guān)()A.參考電壓穩(wěn)定性B.采樣保持時(shí)間C.轉(zhuǎn)換分辨率D.GPIO輸出速度答案:D(GPIO輸出速度影響信號(hào)完整性,但不直接影響ADC轉(zhuǎn)換精度)7.I2C通信中,從機(jī)地址占()位A.6B.7C.8D.9答案:B(標(biāo)準(zhǔn)7位地址,第8位為讀寫位)8.以下低功耗模式中,退出時(shí)需要重新初始化時(shí)鐘的是()A.睡眠模式B.停止模式C.待機(jī)模式D.低功耗運(yùn)行模式答案:C(待機(jī)模式會(huì)關(guān)閉所有時(shí)鐘,退出時(shí)需重新配置時(shí)鐘樹)9.DMA傳輸時(shí),以下哪種模式可以實(shí)現(xiàn)內(nèi)存到內(nèi)存的數(shù)據(jù)搬運(yùn)()A.外設(shè)到內(nèi)存B.內(nèi)存到外設(shè)C.內(nèi)存到內(nèi)存D.循環(huán)模式答案:C(STM32的DMA控制器支持內(nèi)存到內(nèi)存?zhèn)鬏?,需配置相?yīng)寄存器)10.關(guān)于STM32的FLASH操作,以下說(shuō)法正確的是()A.寫入數(shù)據(jù)前無(wú)需擦除B.擦除操作以字節(jié)為單位C.寫入時(shí)需先解鎖FLASH控制寄存器D.運(yùn)行代碼時(shí)不能進(jìn)行擦寫操作答案:C(FLASH寫入前需解鎖,擦除以頁(yè)為單位,運(yùn)行代碼時(shí)可在RAM中執(zhí)行擦寫操作)二、填空題(每空2分,共20分)1.STM32F407VGT6的Flash容量為______MB,SRAM容量為______KB。(答案:1;192)2.RTC的獨(dú)立時(shí)鐘源通常為______(填寫時(shí)鐘名稱),其典型頻率為______Hz。(答案:LSE;32768)3.GPIO的輸入模式包括輸入浮空、輸入上拉、輸入下拉和______。(答案:模擬輸入)4.ADC的轉(zhuǎn)換模式中,______模式可以在一次觸發(fā)后連續(xù)轉(zhuǎn)換多個(gè)通道,______模式則在轉(zhuǎn)換完成后自動(dòng)重啟。(答案:掃描;連續(xù))5.I2C通信中,當(dāng)SCL為高電平時(shí),SDA由高變低表示______信號(hào),由低變高表示______信號(hào)。(答案:起始;停止)6.DMA的通道優(yōu)先級(jí)由______和______共同決定,其中______優(yōu)先級(jí)更高。(答案:硬件固定優(yōu)先級(jí);軟件配置優(yōu)先級(jí);硬件固定)三、簡(jiǎn)答題(每題8分,共40分)1.簡(jiǎn)述STM32時(shí)鐘樹配置的基本步驟(以STM32H7為例)。答案:(1)啟用外部高速時(shí)鐘(HSE)或內(nèi)部高速時(shí)鐘(HSI)作為初始時(shí)鐘源;(2)配置PLL鎖相環(huán),選擇PLL輸入源(HSE/HSI),設(shè)置倍頻因子(N)、分頻因子(M/P/Q/R)以生成目標(biāo)時(shí)鐘;(3)配置系統(tǒng)時(shí)鐘(SYSCLK)的輸入源為PLL輸出或其他時(shí)鐘源(如HSE/HSI);(4)設(shè)置AHB、APB1、APB2等總線的分頻系數(shù),確保各外設(shè)時(shí)鐘不超過(guò)最大頻率限制;(5)啟用時(shí)鐘安全系統(tǒng)(CSS),當(dāng)HSE失效時(shí)自動(dòng)切換至HSI;(6)通過(guò)RCC寄存器驗(yàn)證各時(shí)鐘源的就緒狀態(tài)(如HSERDY、PLLRDY)。2.中斷服務(wù)函數(shù)(ISR)編寫時(shí)需注意哪些關(guān)鍵點(diǎn)?答案:(1)盡量短小精悍,避免耗時(shí)操作(如延時(shí)函數(shù)、復(fù)雜計(jì)算),耗時(shí)任務(wù)應(yīng)通過(guò)標(biāo)志位轉(zhuǎn)交主循環(huán)處理;(2)必須清除中斷標(biāo)志位(通過(guò)外設(shè)的中斷清除寄存器,如TIM的SR寄存器),否則會(huì)重復(fù)進(jìn)入中斷;(3)若操作共享變量(如主循環(huán)和ISR都訪問(wèn)的變量),需使用volatile關(guān)鍵字聲明,并在必要時(shí)關(guān)閉中斷以保證原子性;(4)避免在ISR中調(diào)用非可重入函數(shù)(如標(biāo)準(zhǔn)庫(kù)的printf),可能導(dǎo)致棧溢出或數(shù)據(jù)混亂;(5)注意中斷優(yōu)先級(jí)設(shè)置,高優(yōu)先級(jí)中斷可嵌套低優(yōu)先級(jí)中斷,需合理規(guī)劃優(yōu)先級(jí)分組。3.對(duì)比ADC的規(guī)則組轉(zhuǎn)換與注入組轉(zhuǎn)換的區(qū)別。答案:(1)觸發(fā)方式:規(guī)則組支持軟件觸發(fā)或外部事件觸發(fā),注入組僅支持外部事件觸發(fā)(如定時(shí)器輸出);(2)通道數(shù)量:規(guī)則組最多支持16個(gè)通道,注入組最多支持4個(gè)通道;(3)中斷響應(yīng):規(guī)則組轉(zhuǎn)換完成后產(chǎn)生常規(guī)中斷,注入組轉(zhuǎn)換完成后產(chǎn)生專用的注入中斷;(4)應(yīng)用場(chǎng)景:規(guī)則組用于常規(guī)連續(xù)采樣,注入組用于需要緊急插入的高精度采樣(如異常狀態(tài)下的快速檢測(cè));(5)數(shù)據(jù)存儲(chǔ):規(guī)則組數(shù)據(jù)存儲(chǔ)在規(guī)則數(shù)據(jù)寄存器(DR),注入組數(shù)據(jù)存儲(chǔ)在專用的注入數(shù)據(jù)寄存器(JDRx)。4.說(shuō)明I2C通信中的仲裁機(jī)制及其作用。答案:仲裁機(jī)制用于多主設(shè)備競(jìng)爭(zhēng)總線時(shí)確定主導(dǎo)權(quán)。當(dāng)多個(gè)主設(shè)備同時(shí)發(fā)送數(shù)據(jù)時(shí),若某主設(shè)備發(fā)送的SDA電平與總線實(shí)際電平(由其他主設(shè)備發(fā)送)不一致,則該主設(shè)備檢測(cè)到?jīng)_突并主動(dòng)退出總線競(jìng)爭(zhēng),保留發(fā)送電平與總線一致的主設(shè)備繼續(xù)通信。作用:避免多主設(shè)備同時(shí)控制總線導(dǎo)致的數(shù)據(jù)混亂,確保同一時(shí)間僅有一個(gè)主設(shè)備占用總線,保證通信可靠性。5.簡(jiǎn)述STM32低功耗模式的分類及各自特點(diǎn)。答案:(1)睡眠模式(SleepMode):僅關(guān)閉內(nèi)核時(shí)鐘,外設(shè)時(shí)鐘保持運(yùn)行;內(nèi)核停止,中斷/事件可喚醒;SRAM和寄存器數(shù)據(jù)保留;(2)停止模式(StopMode):關(guān)閉所有時(shí)鐘(內(nèi)核+外設(shè)),保留1.2V域電源;RTC、LSE/LSI、部分寄存器(如備份域)保持運(yùn)行;喚醒時(shí)需重新配置時(shí)鐘;SRAM和寄存器數(shù)據(jù)保留;(3)待機(jī)模式(StandbyMode):關(guān)閉1.2V域電源,僅保留備份域(RTC、備份寄存器)供電;SRAM和寄存器數(shù)據(jù)丟失;喚醒時(shí)需重新初始化所有外設(shè);喚醒源為WKUP引腳、RTC鬧鐘等;(4)低功耗運(yùn)行模式(Low-PowerRunMode):降低系統(tǒng)時(shí)鐘頻率(如使用MSI),保持所有功能運(yùn)行;適用于需要低功耗但不能停止運(yùn)行的場(chǎng)景。四、編程題(每題15分,共30分)1.請(qǐng)使用HAL庫(kù)編寫代碼,實(shí)現(xiàn)以下功能:-配置STM32F103C8T6的PA0為輸入上拉模式,檢測(cè)外部按鍵(按下時(shí)PA0接地);-配置PB12為推挽輸出模式,控制LED(高電平點(diǎn)亮);-當(dāng)按鍵按下(PA0檢測(cè)到低電平)時(shí),LED以200ms周期閃爍;未按下時(shí)LED常亮。(要求包含GPIO初始化、主循環(huán)邏輯,需處理按鍵消抖)答案:```cinclude"stm32f1xx_hal.h"http://全局變量volatileuint8_tkey_pressed=0;volatileuint32_tlast_debounce_time=0;voidSystemClock_Config(void);staticvoidMX_GPIO_Init(void);intmain(void){HAL_Init();SystemClock_Config();MX_GPIO_Init();while(1){//按鍵檢測(cè)(消抖處理)if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET){if((HAL_GetTick()-last_debounce_time)>50){//50ms消抖key_pressed=1;last_debounce_time=HAL_GetTick();}}else{key_pressed=0;last_debounce_time=HAL_GetTick();}//LED控制邏輯if(key_pressed){if((HAL_GetTick()%400)<200){//200ms亮,200ms滅HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);}else{HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);}}else{HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);//常亮}}}voidSystemClock_Config(void){RCC_OscInitTypeDefRCC_OscInitStruct={0};RCC_ClkInitTypeDefRCC_ClkInitStruct={0};RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState=RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue=RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSI_DIV2;RCC_OscInitStruct.PLL.PLLMUL=RCC_PLL_MUL9;HAL_RCC_OscConfig(&RCC_OscInitStruct);RCC_ClkInitStruct.ClockType=RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider=RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DIV1;HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_2);}staticvoidMX_GPIO_Init(void){GPIO_InitTypeDefGPIO_InitStruct={0};//PA0初始化(輸入上拉)__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitStruct.Pin=GPIO_PIN_0;GPIO_InitStruct.Mode=GPIO_MODE_INPUT;GPIO_InitStruct.Pull=GPIO_PULLUP;HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);//PB12初始化(推挽輸出)__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitStruct.Pin=GPIO_PIN_12;GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull=GPIO_NOPULL;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_MEDIUM;HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);//初始狀態(tài)LED滅(根據(jù)需求調(diào)整)HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);}```2.請(qǐng)使用標(biāo)準(zhǔn)庫(kù)(非HAL庫(kù))編寫代碼,配置USART1為9600bps、8位數(shù)據(jù)位、1位停止位、無(wú)校驗(yàn)位,開啟接收中斷,實(shí)現(xiàn)接收數(shù)據(jù)后立即回傳(即串口環(huán)回功能)。(STM32F407ZGT6,系統(tǒng)時(shí)鐘168MHz)答案:```cinclude"stm32f4xx.h"voidUSART1_Init(void){GPIO_InitTypeDefGPIO_InitStruct;USART_InitTypeDefUSART_InitStruct;NVIC_InitTypeDefNVIC_InitStruct;//使能時(shí)鐘RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//GPIO初始化(PA9-TX,PA10-RX)GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(GPIOA,&GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(GPIOA,&GPIO_InitStruct);//USART初始化USART_InitStruct.USART_BaudRate=9600;USART_InitStruct.USART_WordLength=USART_WordLength_8b;USART_InitStruct.USART_StopBits=USART_StopBits_1;USART_InitStruct.USART_Parity=USART_Parity_No;USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;USART_Init(USART1,&USART_InitStruct);//開啟接收中斷USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//NVIC配置NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0x01;NVIC_InitStruct.NVIC_IRQChannelSubPriority=0x01;NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStruct);USART_Cmd(USART1,ENABLE);}voidUSART1_IRQHandler(void){if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET){uint8_tdata=USART_ReceiveData(USART1);//讀取接收數(shù)據(jù)USART_SendData(USART1,data);//回傳數(shù)據(jù)USART_ClearITPendingBit(USART1,USART_IT_RXNE);//清除中斷標(biāo)志}}intmain(void){USART1_Init();while(1){//主循環(huán)無(wú)需額外操作,中斷處理回傳}}```五、綜合應(yīng)用題(30分)設(shè)計(jì)一個(gè)基于STM32的溫濕度采集系統(tǒng),要求如下:-主控芯片:STM32L431RCT6(ARMCortex-M4,最高80MHz,128KBFlash,20KBSRAM)-傳感器:DHT11(單總線通信,輸出溫濕度數(shù)據(jù),精度:溫度±2℃,濕度±5%RH)-顯示模塊:0.96寸OLED(I2C接口,分辨率128×64)-功能需求:每2秒采集一次溫濕度數(shù)據(jù),通過(guò)OLED顯示(格式:“TEMP:25℃HUM:60%”),采集間隔期間進(jìn)入低功耗模式以降低功耗。請(qǐng)完成以下任務(wù):(1)繪制硬件連接示意圖(文字描述關(guān)鍵引腳連接);(2)說(shuō)明軟件設(shè)計(jì)流程(含低功耗模式選擇及喚醒機(jī)制);(3)編寫關(guān)鍵部分代碼(包括DHT11通信、I2C驅(qū)動(dòng)、低功耗配置)。答案:(1)硬件連接示意圖(文字描述):-STM32L431RCT6與DHT11:-DHT11_DATA→PA1(GPIO推挽輸出/輸入,需上拉電阻)-DHT11_VCC→3.3V(通過(guò)10KΩ上拉電阻連接DATA引腳)-DHT11_GND→GND-STM32L431RCT6與OLED(I2C接口):-OLED_SCL→PB6(I2C1_SCL,復(fù)用開漏輸出)-OLED_SDA→PB7(I2C1_SDA,復(fù)用開漏輸出)-OLED_VCC→3.3V-OLED_GND→GND(2)軟件設(shè)計(jì)流程:①系統(tǒng)初始化:配置時(shí)鐘(使用MSI4MHz降低功耗)、I2C接口、GPIO(PA1用于DHT11)、定時(shí)器(用于2秒喚醒);②進(jìn)入低功耗模式(選擇停止模式,關(guān)閉大部分時(shí)鐘,僅保留RTC或定時(shí)器喚醒源);③定時(shí)器中斷喚醒(每2秒觸發(fā)一次);④退出低功耗模式,重新配置時(shí)鐘(恢復(fù)至80MHz);⑤讀取DHT11數(shù)據(jù):發(fā)送起始信號(hào)→等待響應(yīng)→接收40位數(shù)據(jù)(5字節(jié):濕度整數(shù)+濕度小數(shù)+溫度整數(shù)+溫度小數(shù)+校驗(yàn)和);⑥校驗(yàn)數(shù)據(jù)(前4字節(jié)和與校驗(yàn)和是否相等),若校驗(yàn)失敗重新采集;⑦通過(guò)I2C向OLED發(fā)送顯示指令,清屏后顯示溫濕度數(shù)據(jù);⑧重新配置系統(tǒng)時(shí)鐘為低功耗模式(MSI4MHz),進(jìn)入停止模式,等待下一次喚醒。(3)關(guān)鍵部分代碼(省略I2C和OLED底層驅(qū)動(dòng),僅展示核心邏輯):```cinclude"stm32l4xx_hal.h"defineDHT11_PINGPIO_PIN_1defineDHT11_PORTGPIOA//全局變量uint8_tdht11_data[5]={0};//存儲(chǔ)溫濕度數(shù)據(jù)voidSystemClock_Config_LowPower(void);voidSystemClock_Config_HighSpeed(void);voidDHT11_Start(void);uint8_tDHT11_CheckResponse(void);uint8_tDHT11_ReadBit(void);uint8_tDHT11_ReadByte(void);voidEnter_StopMode(void);intmain(void){HAL_Init();SystemClock_Config_HighSpeed();//初始化時(shí)使用高速時(shí)鐘MX_I2C1_Init();//I2C初始化(略)OLED_Init();//OLED初始化(略)while(1){//進(jìn)入停止模式,2秒后喚醒Enter_StopMode();//喚醒后恢復(fù)高速時(shí)鐘SystemClock_Config_HighSpeed();//讀取DHT11數(shù)據(jù)DHT11_Start();if(DHT11_CheckResponse()==0){//響應(yīng)正常for(inti=0;i<5;i++){dht11_data[i]=DHT11_ReadByte();}//校驗(yàn)數(shù)據(jù)if((dht11_data[0]+dht11_data[1]+dht11_data[2]+dht11_data[3])==dht11_data[4]){//顯示數(shù)據(jù)chartemp_str[20],hum_str[20];sprintf(temp_str,"TEMP:%d℃",dht11_data[2]);sprintf(hum_str,"HUM:%d%%",dht11_data[0]);OLED_ShowString(0,0,temp_str,16);OLED_ShowString(0,2,hum_str,16);}}}}voidEnter_StopMode(void){//配置定時(shí)器喚醒(2秒)RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);TIM_TimeBaseInitTypeDefTIM_InitStruct;TIM_InitStruct.TIM_Prescaler=39999;//4MHz/(39999+1)=100HzTIM_InitStruct.TIM_CounterMode=TIM_CounterMode_Up;TIM_InitStruct.TIM_Period=19999;//100Hz→20000周期=2秒TIM_InitStruct.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInit(TIM2,&TIM_InitStruct);TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);TIM_Cmd(TIM2,ENABLE);//進(jìn)入停止模式(關(guān)閉所有時(shí)鐘,保留1.2V域)HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);//喚醒后關(guān)閉定時(shí)器TIM_Cmd(TIM2,DISABLE);TIM_ITConfig(TIM2,TIM_IT_Update,DISABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,DISABLE);}voidDHT11_Start(void){GPIO_InitTypeDefGPIO_InitStruct;GPIO_InitStruct.Pin=DHT11_PIN;GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull=GPIO_PULLUP;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(DHT11_PORT,&GPIO_InitStruct);HAL_GPIO_WritePin(DHT11_PORT,DHT11_PIN,GPIO_PIN_RESET);HAL_Delay(20);//拉低至少18msHAL_GPIO_WritePin(DHT11_PORT,DHT11_PIN,GPIO_PIN_SET);HAL_DelayMicroseconds(30);//拉高20-40us//切換為輸入模式GPIO_InitStruct.Mode=GPIO_MODE_INPUT;HAL_GPIO_Init(DHT11_PORT,&GPIO_InitStruct);}uint8_tDHT11_CheckResponse(void){uint16_ttimeout=0;//等待DHT11拉低(80us)while(HAL_GPIO_ReadPin(DHT11_PORT,DHT11_PIN)==GPIO_PIN_SET){timeout++;if(timeout>1000)return1;//超時(shí)}timeout=0;//等待DHT11拉高(80us)while(HAL_GPIO_ReadPin(DHT11_PORT,DHT11_PIN)==GPIO_PIN_RESET){timeout++;if(timeout>1000)return1;}return0;//響應(yīng)正常}uint8_tDHT11_ReadBit(void){uint16_ttimeout=0;//等待低電平結(jié)束(50us)while(HAL_GPIO_ReadPin(DHT11_PORT,DHT11_PIN)==GPIO_PIN_RESET){timeout++;if(timeout>1000)return0;}HAL_DelayMicroseconds(30);//高電平>28us為1,否則為0returnHAL_GPIO_ReadPin(DHT11_PORT,DHT11_PIN);}uint8_tDHT11_ReadByte(void){uint8_tbyte=0;for(inti=0;i<8;i++){byte<<=1;byte|=DHT11_ReadBit();}returnbyte;}voidSystemClock_Config_HighSpeed(void){RCC_OscInitTypeDefRCC_Osc

溫馨提示

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

評(píng)論

0/150

提交評(píng)論