《STM32應(yīng)用技術(shù)項目實踐》 習(xí)題答案 馬穎 - 項目3、4 三人搶答器設(shè)計、智能調(diào)光燈設(shè)計_第1頁
《STM32應(yīng)用技術(shù)項目實踐》 習(xí)題答案 馬穎 - 項目3、4 三人搶答器設(shè)計、智能調(diào)光燈設(shè)計_第2頁
《STM32應(yīng)用技術(shù)項目實踐》 習(xí)題答案 馬穎 - 項目3、4 三人搶答器設(shè)計、智能調(diào)光燈設(shè)計_第3頁
《STM32應(yīng)用技術(shù)項目實踐》 習(xí)題答案 馬穎 - 項目3、4 三人搶答器設(shè)計、智能調(diào)光燈設(shè)計_第4頁
《STM32應(yīng)用技術(shù)項目實踐》 習(xí)題答案 馬穎 - 項目3、4 三人搶答器設(shè)計、智能調(diào)光燈設(shè)計_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目3三人搶答器設(shè)計任務(wù)3.1搶答器按鍵模塊設(shè)計任務(wù)實施步驟1:外部中斷按鍵引腳配置表2-3三人搶答器外設(shè)引腳的GPIO配置用戶標(biāo)簽IO引腳引腳模式觸發(fā)方式上下拉中斷優(yōu)先級KEY_UPPA0EXTI0上升沿下拉2,0KEY0PE4EXTI4下降沿上拉2,1KEY1PE3EXTI3下降沿上拉2,1KEY2PE2EXTI2下降沿上拉2,1外設(shè)名(用戶標(biāo)簽)IO引腳引腳模式輸出電平(高或低)上下拉傳輸速度BEEPPF8輸出推挽低下拉超高速LED0PF9輸出推挽高上拉超高速LED1PF10輸出推挽低上拉超高速D1PE6輸出推挽高上拉超高速D2PB6輸出推挽高上拉超高速D3PC7輸出推挽高上拉超高速表中的D1、D2、D3是搶答選手的對應(yīng)的3個LED,開發(fā)板上沒有,可根據(jù)實際情況來選擇是否配置,如選用跑馬燈拓展板上的LED。步驟3:外部中斷代碼設(shè)計1.分析外部中斷的配置代碼(1)查看按鍵外部中斷的用戶標(biāo)簽在main.h文件中查看按鍵的宏定義代碼,填寫其中空缺部分。#defineKEY2_Pin GPIO_PIN_2#defineKEY2_GPIO_Port GPIOE#defineKEY2_EXTI_IRQn EXTI2_IRQn#defineKEY1_Pin GPIO_PIN_3#defineKEY1_GPIO_Port GPIOE#defineKEY1_EXTI_IRQn EXTI3_IRQn#defineKEY0_Pin GPIO_PIN_4#defineKEY0_GPIO_Port GPIOE#defineKEY0_EXTI_IRQn EXTI4_IRQn#defineKEY_UP_Pin GPIO_PIN_0#defineKEY_UP_GPIO_Port GPIOA#defineKEY_UP_EXTI_IRQn EXTI0_IRQn(2)分析按鍵外部中斷的GPIO配置代碼打開gpio.c文件,可以在MX_GPIO_Init()函數(shù)中查看按鍵的外部中斷配置代碼,以下是提取了按鍵配置的代碼,請分析并填寫完整代碼功能。voidMX_GPIO_Init(void){GPIO_InitTypeDefGPIO_InitStruct={0};__HAL_RCC_GPIOE_CLK_ENABLE();//使能選手按鍵PE2/PE3/PE4引腳外設(shè)時鐘__HAL_RCC_GPIOA_CLK_ENABLE();//使能主持人按鍵PA0引腳外設(shè)時鐘……//省略其他外設(shè)的時鐘使能GPIO_InitStruct.Pin=KEY2_Pin|KEY1_Pin|KEY0_Pin;//配置選手按鍵GPIO_InitStruct.Mode=GPIO_MODE_IT_FALLING;//引腳模式為中斷下降沿觸發(fā)GPIO_InitStruct.Pull=GPIO_PULLUP;//配置為上拉HAL_GPIO_Init(GPIOE,&GPIO_InitStruct);GPIO_InitStruct.Pin=KEY_UP_Pin;//配置主持人按鍵GPIO_InitStruct.Mode=GPIO_MODE_IT_RISING;//引腳模式為中斷上升沿觸發(fā)GPIO_InitStruct.Pull=GPIO_PULLDOWN;//配置為下拉HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);……//省略其他外設(shè)的GPIO配置HAL_NVIC_SetPriority(EXTI0_IRQn,2,0); //作用是設(shè)置主持人按鍵的中斷搶占優(yōu)先級為2,相應(yīng)優(yōu)先級為0HAL_NVIC_EnableIRQ(EXTI0_IRQn); //作用是使能外部中斷線0HAL_NVIC_SetPriority(EXTI2_IRQn,2,1); //作用是設(shè)置選手按鍵的中斷搶占優(yōu)先級為2,相應(yīng)優(yōu)先級為1,比主持人按鍵低HAL_NVIC_EnableIRQ(EXTI2_IRQn); //作用是使能外部中斷線2HAL_NVIC_SetPriority(EXTI3_IRQn,2,1);HAL_NVIC_EnableIRQ(EXTI3_IRQn); HAL_NVIC_SetPriority(EXTI4_IRQn,2,1);HAL_NVIC_EnableIRQ(EXTI4_IRQn); }2.編寫搶答器主函數(shù)代碼while(1){ if(state==0)//初始狀態(tài) { GLED_ON();//點亮綠燈 printf("\r\n請按下主持人按鍵,準(zhǔn)備開始搶答\r\n"); } elseif(state==1)//主持人鍵按下,開始搶答狀態(tài) { RLED_Toggle();//紅燈閃爍 HAL_Delay(500);//每秒閃爍一次 } elseif(state==2)//搶答結(jié)束 { RLED_OFF();//熄滅紅燈 printf("\r\n%d號選手搶答成功!\r\n"\r\n\r\n",xuanshou); BEEP_ON();//蜂鳴器響 HAL_Delay(1000); //延時1秒 BEEP_OFF(); //蜂鳴器不響 state=0; //回初始狀態(tài) }}}3.程序下載,測試搶答器按鍵功能【問題】請問該怎么修改代碼,才能使搶答成功后,蜂鳴器響的期間,不能進(jìn)行下一次搶答?【解決方法】在外部中斷回調(diào)函數(shù)中,主持人按鍵消抖后,再次判斷KEY_UP是否按下的if條件中,增加同時判斷狀態(tài)是否是初始狀態(tài)的代碼:if(state==0&&KEY_UP==1)也就是只有在初始狀態(tài),才能按下主持人按鍵。

任務(wù)3.2搶答器限時搶答設(shè)計技能訓(xùn)練:通用定時器設(shè)計步驟1:通用定時器參數(shù)計算采用通用定時器TIM3進(jìn)行0.5秒計時中斷,該定時器時鐘采用的是APB1總線時鐘(填A(yù)PB1或APB2)。當(dāng)系統(tǒng)時鐘為100MHz時,基本定時器TIM3的時鐘頻率fCLK為50M當(dāng)定時器TIM3的預(yù)分頻系數(shù)PSC設(shè)置為(5000-1),要使定時器溢出時間為0.5秒,那么自動重裝載值(計數(shù)周期)ARR應(yīng)設(shè)置為4999。計算公式為:由公式Tout=PSC+1×步驟2:通用定時器CubeMX工程配置1.創(chuàng)建工程,配置時鐘樹工程配置要求:使用外部高速時鐘配置PLL,使系統(tǒng)時鐘頻率達(dá)到100MHz,按照開發(fā)板上LED0和LED1的硬件電路,配置相應(yīng)的GPIO端口,且上電時LED不亮。(1)創(chuàng)建STM32工程,芯片選擇為STM32F407ZGT6,工程名為“3-2TIMER”。(2)配置時鐘源及時鐘樹,使系統(tǒng)時鐘頻率達(dá)到100MHz。①選擇時鐘源:打開RCC界面,開啟高速外部時鐘(HSE)②配置時鐘樹:在頁面上方選擇ClockConfiguration時鐘配置頁面。設(shè)置PLL的來源為HSE外部高速時鐘,其頻率為8MHz。當(dāng)PLL的分頻系數(shù)M設(shè)置為4,主PLL分頻系數(shù)P為2時,主PLL倍頻系數(shù)N應(yīng)設(shè)置為100。此時系統(tǒng)時鐘的時鐘源選擇PLLCLK,即可得到100MHz。填寫計算公式:SYSCLK=fHSI*N/(M*P)=8M*100/(4*2)=100MHz為使APB1CLK和APB2CLK不超過規(guī)定值。APB1分頻系數(shù)最大可設(shè)為4,由此APB1CLK=25MHz。APB2的分頻系數(shù)設(shè)置與APB1的分頻系數(shù)一樣。3.配置通用定時器參數(shù)(3)在Configuration配置選項中,選擇ParameterSetting頁,配置參數(shù)如下:計數(shù)器設(shè)置:預(yù)分頻系數(shù)PSC為5000-1;計數(shù)周期(自動加載值)ARR為5000-1;計數(shù)方式選擇為中心對齊模式1;內(nèi)部時鐘不分頻;關(guān)閉自動重裝載值。步驟3:實現(xiàn)通用定時器控制LED閃爍1.分析通用定時器TIM3配置的初始化函數(shù)voidMX_TIM3_Init(void){TIM_ClockConfigTypeDefsClockSourceConfig={0};TIM_MasterConfigTypeDefsMasterConfig={0};htim3.Instance=TIM3;htim3.Init.Prescaler=5000-1;//設(shè)置預(yù)分頻系數(shù)值,實際系數(shù)為5000htim3.Init.CounterMode=TIM_COUNTERMODE_CENTERALIGNED1;//計數(shù)模式是中心對齊1htim3.Init.Period=5000-1;//設(shè)置自動重裝載值,實際系數(shù)為5000htim3.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;htim3.Init.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE;……//省略部分代碼}【拓展】如果在while循環(huán)中,修改紅燈的延時方式用計數(shù)方式實現(xiàn),然后再下載到開發(fā)板會觀察到什么現(xiàn)象?【思考】為什么會出現(xiàn)這種現(xiàn)象?答:紅燈閃爍的時間會明顯慢于綠燈。這是因為通過循環(huán)執(zhí)行延時函數(shù)來實現(xiàn)計時的方法,其延時精度不高,尤其是是多次重復(fù)執(zhí)行,還會大大消耗CPU的工作時間,降低了工作效率,更加無法達(dá)到一個精確的延時時間。相比之下,定時器計時能夠提供毫秒甚至微秒級別的延時,且不會占用CPU資源,因為它允許CPU在等待期間執(zhí)行其他任務(wù),提高了系統(tǒng)的整體效率。

任務(wù)實施:搶答器限時搶答功能設(shè)計步驟1:基本定時器參數(shù)計算定時器TIM6時鐘采用的是APB1總線時鐘(填A(yù)PB1或APB2),當(dāng)系統(tǒng)時鐘為168MHz時,基本定時器TIM6的時鐘fCLK為84設(shè)置TIM6的預(yù)分頻系數(shù)PSC為(8400-1),要使定時器溢出時間為0.1秒,那么自動重裝載值A(chǔ)RR應(yīng)設(shè)置為1000-1。步驟2:基本定時器CubeMX工程配置1.配置基本定時器參數(shù)點擊3-2BASIC_TIMER.ioc,在Categories中選擇Timers選中使用基本定時器TIM6。(1)在Mode下方,勾選Activated,使用該定時器。(2)在Configuration配置選項中,選擇ParameterSetting頁配置預(yù)分頻值PSC為8400-1,計數(shù)方式為向上(遞增),計數(shù)周期ARR為1000-1,關(guān)閉自動重裝載值,如圖3-15所示。步驟3:限時搶答代碼設(shè)計及浮點數(shù)輸出3.程序下載,測試搶答器倒計時功能打開串口調(diào)試助手,分別按下主持人按鍵和選手按鍵,測試搶答器電路功能是否正常?!締栴}1】當(dāng)按下主持人按鍵,倒計時到0時,串口輸出“倒計時結(jié)束,無人搶答”和“0號選手搶答成功!”,應(yīng)該怎么修改代碼才能不讓后面這句信息輸出?【解決方法】在while循環(huán)中的搶答結(jié)束,串口輸出“%d號選手搶答成功!”代碼之前,添加一個條件,判斷選手編號不是0, if(xuanshou!=0),然后再輸出信息【問題2】當(dāng)?shù)褂嫊r到0時,發(fā)現(xiàn)串口輸出顯示“-0.0”,負(fù)號怎么處理?此處使用求絕對值的函數(shù)是什么?是abs()函數(shù),還是fabs()函數(shù)?兩者有什么區(qū)別?【解決方法】對串口輸出的倒計時浮點數(shù)取其絕對值。abs()函數(shù)是對整數(shù)取其絕對值,fabs()函數(shù)是對浮點數(shù)數(shù)取其絕對值,本例應(yīng)選用后者。修改printf函數(shù)的代碼為:printf("\r\n%.1f\r\n",fabs(num));【問題3】引入函數(shù)對浮點數(shù)取絕對值之后,出現(xiàn)圖3-22所示的警告怎么處理?【解決方法】在main.c文件開始添加頭文件math.h

任務(wù)3.3搶答器LCD界面設(shè)計技能訓(xùn)練:TFTLCD顯示步驟1:TFTLCD硬件電路連接表3-10TFTLCD的背光引腳的GPIO配置外設(shè)名(用戶標(biāo)簽)IO引腳引腳模式輸出電平(高或低)上下拉傳輸速度LCD_BLPB15輸出推挽低上拉高速將FSMC的IO引腳填入表3-11中。表3-11FSMC引腳的IO端口引腳名NE4A6NWENOEIO引腳PG12PF12PD5PD4引腳功能片選信號命令/數(shù)據(jù)控制信號寫信號讀信號引腳名D0D1D2D3D4D5D6D7IO引腳PD14PD15PD0PD1PE7PE8PE9PE10引腳名D8D9D10D11D12D13D14D15IO引腳PE11PE12PE13PE14PE15PD8PD9PD10步驟3:分析代碼移植LCD驅(qū)動文件1.分析FSMC配置相關(guān)函數(shù)打開fsmc.c文件,查看FSMC初始化函數(shù)和FSMC引腳配置,部分代碼如下。#include"fsmc.h"SRAM_HandleTypeDefhsram1;//Bank1子區(qū)4的外設(shè)對象變量,用于TFTLCD/*FSMC初始化函數(shù)*/voidMX_FSMC_Init(void){FSMC_NORSRAM_TimingTypeDefTiming={0};//基本時序FSMC_NORSRAM_TimingTypeDefExtTiming={0};//擴(kuò)展時序/**子區(qū)4初始化,用于TFTLCD*/hsram1.Instance=FSMC_NORSRAM_DEVICE;//FSMCBank1寄存器地址hsram1.Extended=FSMC_NORSRAM_EXTENDED_DEVICE;/*hsram1.Init參數(shù)設(shè)置*/hsram1.Init.NSBank=FSMC_NORSRAM_BANK4;//Bank1子區(qū)4hsram1.Init.DataAddressMux=FSMC_DATA_ADDRESS_MUX_DISABLE;hsram1.Init.MemoryType=FSMC_MEMORY_TYPE_SRAM;hsram1.Init.MemoryDataWidth=FSMC_NORSRAM_MEM_BUS_WIDTH_16;//配置FSMCNORSRAMMEM總線寬度16位……//省略部分代碼,見fsmc.c文件/*時序設(shè)置*/Timing.AddressSetupTime=15;//配置地址建立時間為15個時鐘周期Timing.AddressHoldTime=15;Timing.DataSetupTime=60;//配置數(shù)據(jù)建立時間為15個時鐘周期Timing.BusTurnAroundDuration=0;Timing.CLKDivision=16;Timing.DataLatency=17;Timing.AccessMode=FSMC_ACCESS_MODE_A;//配置數(shù)據(jù)訪問為異步A模式/*擴(kuò)展時序設(shè)置*/ExtTiming.AddressSetupTime=8;//配置擴(kuò)展地址建立時間為15個時鐘周期ExtTiming.AddressHoldTime=15;ExtTiming.DataSetupTime=9;//配置擴(kuò)展數(shù)據(jù)建立時間為15個時鐘周期ExtTiming.BusTurnAroundDuration=0;ExtTiming.CLKDivision=16;ExtTiming.DataLatency=17;ExtTiming.AccessMode=FSMC_ACCESS_MODE_A;//配置擴(kuò)展數(shù)據(jù)訪問為異步A模式if(HAL_SRAM_Init(&hsram1,&Timing,&ExtTiming)!=HAL_OK)Error_Handler();//HAL_SRAM_Init()里會調(diào)用HAL_SRAM_MspInit()}staticuint32_tFSMC_Initialized=0;//靜態(tài)變量,表示是否進(jìn)行過MSP初始化/*SRAM接口GPIO初始化函數(shù),在HAL_SRAM_MspInit()里被調(diào)用*/staticvoidHAL_FSMC_MspInit(void){GPIO_InitTypeDefGPIO_InitStruct={0};if(FSMC_Initialized)//FSMC接口的GPIO初始化只需執(zhí)行一次return;FSMC_Initialized=1;//表示已經(jīng)進(jìn)行了FSMC接口的GPIO初始化/*FSMC時鐘使能*/__HAL_RCC_FSMC_CLK_ENABLE();/**FSMCGPIO引腳配置PF12>FSMC_A6PD14>FSMC_D0……省略部分引腳,見fsmc.c文件*//*GPIO_InitStruct配置*/GPIO_InitStruct.Pin=GPIO_PIN_12;GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;//配置GPIO為復(fù)用推挽模式GPIO_InitStruct.Pull=GPIO_NOPULL;//配置為浮空引腳(沒有上下拉)GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate=GPIO_AF12_FSMC;//作用是:把PF12引腳復(fù)用為FSMC引腳HAL_GPIO_Init(GPIOF,&GPIO_InitStruct);//初始化配置命令/數(shù)據(jù)控制信號PF12引腳……//省略部分GPIO配置代碼,見fsmc.c文件}2.移植LCD文件(3)查看lcd.h頭文件③LCD顯示的顏色使用RGB565格式。常用的顏色其RGB565取值見lcd.h以下部分代碼,請?zhí)顚懲暾?/畫筆顏色#defineWHITE 0xFFFF //白色#defineBLACK 0x0000 //黑色#defineBLUE 0x001F //藍(lán)色#defineBRED 0XF81F //紫色#defineGRED 0XFFE0 //黃色#defineGBLUE 0X07FF //青色#defineRED 0xF800 //紅色#defineMAGENTA 0xF81F //紫色#defineGREEN 0x07E0 //綠色#defineCYAN 0x07FF //青色#defineYELLOW 0xFFE0 //黃色#defineBROWN 0XBC40 //棕色#defineBRRED 0XFC07 //棕紅色#defineGRAY 0X8430 //灰色#defineORANGE 0XFD20 //橙色

思考練習(xí)一、選擇題(A)1.STM32F4微控制器的嵌套向量中斷控制器(NVIC)具有多少個可編程優(yōu)先級?A.16 B.32 C.43 D.72(B)2.STM32F407xx的EXTI16連接到哪個中斷事件?A.外部IO口的輸入中斷 B.PVD輸出C.RTC鬧鐘事件 D.USBOTGFS喚醒事件(B)3.STM32F407xx供IO使用用的外部中斷線有幾個?A.8 B.16 C.22 D.32(D)4.以下哪個是外部中斷回調(diào)函數(shù)?A.EXTI_Init();B.EXTIx_IRQHandler(); C.EXTI_ClearITPendingBit();D.HAL_GPIO_EXTI_Callback();(C)5.STM32F407xx中16位的定時器有幾個?A.2 B.4 C.12 D.14二、填空題1.STM32F407xx內(nèi)有(82)個可屏蔽中斷,器外部中斷/事件控制器(EXTI)支持(22)個事件中斷請求。2.STM32F407xx的PB12引腳對應(yīng)EXTI的編號為(12)。3.STM32F407xx內(nèi)置了(14)個定時器,分為三種類型,分別是(基本定時器)、(通用定時器)和(高級定時器)。4.STM32F407xx中的定時器TIM1和TIM8掛在(APB2)總線上,定時器TIM2~TIM7掛在(APB1)總線上。5.TFTLCD是(薄膜晶體管)液晶顯示器,ATK-4.3'TFTLCD的雙向數(shù)據(jù)線是(16)位的。

項目4智能調(diào)光燈設(shè)計任務(wù)4.1調(diào)光燈手動模式設(shè)計任務(wù)實施步驟1:PWM參數(shù)計算1.本例中PWM輸出控制LED0,使用的定時器是TIM14,通道CH1。在GPIO中將其配置為PWM引腳,配置參數(shù)請?zhí)钊氡?-3中。表4-3PWM引腳的GPIO配置外設(shè)名/用戶標(biāo)簽IO引腳引腳模式上下拉LED0/PWMPF9復(fù)用推挽浮空KEY_UPPA0輸入下拉KEY0PE4輸入上拉KEY1PE3輸入上拉KEY2PE2輸入上拉2.本例中的定時器的時鐘在APB1總線上,當(dāng)系統(tǒng)時鐘是168MHz時,該定時器的時鐘頻率fCLK為84M3.如果每次按鍵要實現(xiàn)10%的亮度改變,可以設(shè)置計數(shù)次數(shù)為100,即重裝載值A(chǔ)RR設(shè)置為(100-1),那么當(dāng)比較值CCR分別設(shè)置為0、10、20……100時,就可以控制輸出電壓值按10%變化,相當(dāng)于LED的亮度變化。當(dāng)設(shè)置預(yù)分頻系數(shù)PSC為(1680-1)時,那么根據(jù)以下公式可以計算出定時器的Tout溢出時間為0.002s。T步驟3:實現(xiàn)按鍵調(diào)光燈設(shè)計1.分析PWM的配置代碼打開tim.c文件,可以在MX_TIM14_Init()函數(shù)中查看定時器TIM14的PWM配置初始化代碼。在HAL_TIM_Base_MspDeInit()函數(shù)中PWM(LED0)引腳的GPIO配置。voidMX_TIM14_Init(void){TIM_OC_InitTypeDefsConfigOC={0};htim14.Instance=TIM14;htim14.Init.Prescaler=1680-1;//設(shè)置系統(tǒng)時鐘的預(yù)分頻系數(shù)htim14.Init.CounterMode=TIM_COUNTERMODE_UP;//設(shè)置向上計數(shù)模式htim14.Init.Period=100-1;//設(shè)置自動重裝載值或計數(shù)周期htim14.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;htim14.Init.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE;……//省略部分代碼sConfigOC.OCMode=TIM_OCMODE_PWM1;//PWM模式1sConfigOC.Pulse=0;sConfigOC.OCPolarity=TIM_OCPOLARITY_LOW;//設(shè)置有效電平為低電平sConfigOC.OCFastMode=TIM_OCFAST_DISABLE;……//省略部分代碼}voidHAL_TIM_Base_MspInit(TIM_HandleTypeDef*tim_baseHandle){if(tim_baseHandle->Instance==TIM14){__HAL_RCC_TIM14_CLK_ENABLE();//使能定時器14時鐘HAL_NVIC_SetPriority(TIM8_TRG_COM_TIM14_IRQn,0,0);//設(shè)置中斷分組優(yōu)先級HAL_NVIC_EnableIRQ(TIM8_TRG_COM_TIM14_IRQn);//使能定時器中斷}}voidHAL_TIM_MspPostInit(TIM_HandleTypeDef*timHandle){GPIO_InitTypeDefGPIO_InitStruct={0};if(timHandle->Instance==TIM14){__HAL_RCC_GPIOF_CLK_ENABLE();//使能LED0的GPIOF組時鐘GPIO_InitStruct.Pin=GPIO_PIN_9;//配置PF9引腳GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;//復(fù)用推挽模式GPIO_InitStruct.Pull=GPIO_PULLUP;//設(shè)置沒有上下拉或浮空引腳GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_VERY_HIGH;//超高速GPIO_InitStruct.Alternate=GPIO_AF9_TIM14;//復(fù)用為定時器14引腳模式HAL_GPIO_Init(GPIOF,&GPIO_InitStruct);//初始化F組GPIO}}

拓展訓(xùn)練:使用USB_LED設(shè)計按鍵調(diào)光燈1.通過開發(fā)板的原理圖查找USB-A接口的引腳,如圖4-6所示,確定本例中的PWM輸出控制的USB_LED的引腳IO端口,使用的定時器是TIM2,通道CH1。根據(jù)其電路原理圖,在GPIO中將其配置為定時器引腳,配置參數(shù)請?zhí)钊氡?-4中。表4-4PWM引腳的GPIO配置外設(shè)名用戶標(biāo)簽IO引腳引腳模式上下拉USB_LEDPWMPA15復(fù)用推挽AF_PP浮空3.配置定時器的PWM參數(shù),可采用本任務(wù)中參數(shù),但要注意USB_LED的有效電平是高電平,因此比較極性要設(shè)置為高電平。

任務(wù)4.2調(diào)光燈自動模式設(shè)計技能訓(xùn)練:光敏傳感器及ADC檢測步驟1:硬件電路設(shè)計STM32的光敏傳感器通過PF7引腳的ADC3通道5,讀取LIGHT_SENSOR上面的電壓,即可計算得到環(huán)境光線的強(qiáng)弱,顯示在TFTLCD上面。步驟3:編寫光敏傳感器實現(xiàn)代碼1.分析ADC配置代碼打開adc.c文件,可以在MX_ADC3_Init()初始化函數(shù)查看ADC3的參數(shù)配置,在HAL_ADC_MspInit()函數(shù)中查看ADC3_IN5引腳PF7的GPIO配置。voidMX_ADC3_Init(void){ADC_ChannelConfTypeDefsConfig={0};/*配置ADC參數(shù)*/hadc3.Instance=ADC3;hadc3.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4;//設(shè)置時鐘分頻系數(shù)為4hadc3.Init.Resolution=ADC_RESOLUTION_12B;//設(shè)置分辨率為12位hadc3.Init.ScanConvMode=DISABLE;hadc3.Init.ContinuousConvMode=DISABLE;hadc3.Init.DiscontinuousConvMode=DISABLE;hadc3.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_NONE;hadc3.Init.ExternalTrigConv=ADC_SOFTWARE_START;//設(shè)置ADC軟件觸發(fā)規(guī)則通道hadc3.Init.DataAlign=ADC_DATAALIGN_RIGHT;//設(shè)置對齊方式為右對齊hadc3.Init.NbrOfConversion=1;hadc3.Init.DMAContinuousRequests=DISABLE;hadc3.Init.EOCSelection=ADC_EOC_SINGLE_CONV;if(HAL_ADC_Init(&hadc3)!=

溫馨提示

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

最新文檔

評論

0/150

提交評論