




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGEPAGE19《單片機(jī)產(chǎn)品設(shè)計(jì)與制作》項(xiàng)目作業(yè)項(xiàng)目1、利用GPIO和位帶操作實(shí)現(xiàn)溫度報(bào)警姓名:學(xué)號(hào):
任務(wù)目標(biāo)能說出單片機(jī)的定義、作用;能說出3種以上常見的單片機(jī)產(chǎn)品和生產(chǎn)廠家;能說出STM32單片機(jī)的生產(chǎn)廠家、主要系列產(chǎn)品和主要性能指標(biāo);能說出學(xué)習(xí)單片機(jī)的目的。能畫出系統(tǒng)方框圖并說出溫度傳感器和報(bào)警燈的選型理由及其工作原理。能畫出程序流程圖;寫出程序框架、寫出程序并對(duì)程序做出解釋。會(huì)使用庫(kù)函數(shù)GPIO_ReadInputDataBit()、GPIO_WriteBit()、GPIO_SetBits()、GPIO_ResetBits()、RCC_APB2PeriphClockCmd()、GPIO_Init()編寫程序。理解位帶操作的基本概念,會(huì)利用給出的框架和位帶操作文件編寫帶有位帶操作的程序。會(huì)給程序加入宏定義,提高程序的移植性。理解分組管理的模塊化程序設(shè)計(jì)思路,會(huì)利用現(xiàn)有框架設(shè)計(jì)自己的模塊化程序。能畫出分組管理的溫度報(bào)警器程序框架,寫出程序。要點(diǎn)記錄及成果檢驗(yàn)(一)術(shù)語(yǔ)記錄英文簡(jiǎn)稱英文全稱中文翻譯英文簡(jiǎn)稱英文全稱中文翻譯CPUSCMMemoryMCUI/OEmbeddedComputerInterface(二)概念明析1、簡(jiǎn)要說明什么是單片機(jī)?2、指出3家單片機(jī)廠商及其主要產(chǎn)品。3、舉例說明三種使用了單片機(jī)的產(chǎn)品。4、指出STM32單片機(jī)的生產(chǎn)廠家、主要系列產(chǎn)品和主要性能指標(biāo)。5、總結(jié)一下學(xué)習(xí)單片機(jī)的目的。6、單片機(jī)開發(fā)常使用的編程語(yǔ)言有哪些?各自有什么特點(diǎn)?7、學(xué)習(xí)單片機(jī)需要的工具有哪些?《單片機(jī)產(chǎn)品設(shè)計(jì)與制作》項(xiàng)目作業(yè)項(xiàng)目1、利用GPIO和位帶操作實(shí)現(xiàn)溫度報(bào)警姓名:學(xué)號(hào):
任務(wù)目標(biāo)能說出單片機(jī)的定義、作用;能說出3種以上常見的單片機(jī)產(chǎn)品和生產(chǎn)廠家;能說出STM32單片機(jī)的生產(chǎn)廠家、主要系列產(chǎn)品和主要性能指標(biāo);能說出學(xué)習(xí)單片機(jī)的目的。能畫出系統(tǒng)方框圖并說出溫度傳感器和報(bào)警燈的選型理由及其工作原理。能畫出程序流程圖;寫出程序框架、寫出程序并對(duì)程序做出解釋。會(huì)使用庫(kù)函數(shù)GPIO_ReadInputDataBit()、GPIO_WriteBit()、GPIO_SetBits()、GPIO_ResetBits()、RCC_APB2PeriphClockCmd()、GPIO_Init()編寫程序。理解位帶操作的基本概念,會(huì)利用給出的框架和位帶操作文件編寫帶有位帶操作的程序。會(huì)給程序加入宏定義,提高程序的移植性。理解分組管理的模塊化程序設(shè)計(jì)思路,會(huì)利用現(xiàn)有框架設(shè)計(jì)自己的模塊化程序。能畫出分組管理的溫度報(bào)警器程序框架,寫出程序。要點(diǎn)記錄及成果檢驗(yàn)任務(wù)1.1認(rèn)識(shí)單片機(jī)姓名學(xué)號(hào)日期分?jǐn)?shù)(一)術(shù)語(yǔ)記錄英文簡(jiǎn)稱英文全稱中文CPUCentralProcessingUnit中央處理器SCMSingleChipMicrocomputer單片機(jī)Memory存儲(chǔ)器MCUMicroControlUnit微控制器I/OInput/Output輸入/輸出EmbeddedComputer嵌入式計(jì)算機(jī)Interface接口(二)概念明析1、簡(jiǎn)要說明什么是單片機(jī)?單片機(jī)是將CPU、存儲(chǔ)器、I/O接口等部件集成在一起的一個(gè)芯片。2、指出3家單片機(jī)廠商及其主要產(chǎn)品。單片機(jī)廠家包括Intel、Motorola、Zilog、Philips、Atmel、宏晶科技、Rockwell、NEC、EPSON、Hitachi、SiliconLabs、ST等等。其中最著名的是Intel的MCS-51單片機(jī)。此外還有Atmel公司的AT89S51/52。宏晶科技的STC于51系列單片機(jī)等。意法半導(dǎo)體的STM32也是一款單片機(jī)。3、舉例說明三種使用了單片機(jī)的產(chǎn)品。智能空調(diào)、智能玩具、汽車控制系統(tǒng)、智能儀器儀表等……4、指出STM32單片機(jī)的生產(chǎn)廠家、主要系列產(chǎn)品和主要性能指標(biāo)。生產(chǎn)廠家:意法半導(dǎo)體公司主要系列產(chǎn)品及其位數(shù):CPU位數(shù)內(nèi)核系列描述32Cortex-M0STM32L0低功耗STM32F0入門級(jí)Cortex-M3STM32L1低功耗STM32F1基礎(chǔ)型,主頻72MHzSTM32F2高性能Cortex-M4STM32L4低功耗STM32F3混合信號(hào)STM32F4高性能,主頻180MHzCortex-M7STM32F7高性能8超級(jí)版6502STM8S標(biāo)準(zhǔn)系列STM8AF標(biāo)準(zhǔn)系列的汽車應(yīng)用STM8AL低功耗的汽車應(yīng)用STM8L低功耗5、總結(jié)一下學(xué)習(xí)單片機(jī)的目的。學(xué)習(xí)單片機(jī)目的是為了理解單片機(jī)產(chǎn)品的電路組成和程序組成,掌握使用、維護(hù)、維修、改造和開發(fā)單片機(jī)產(chǎn)品的方法。6、單片機(jī)開發(fā)常使用的編程語(yǔ)言有哪些?各自有什么特點(diǎn)?機(jī)器語(yǔ)言匯編語(yǔ)言C語(yǔ)言用二進(jìn)制的機(jī)器指令表示例如0010010000000101用指令助記符表示例如MOVSr4,#0x05用語(yǔ)句表示例如用賦值語(yǔ)句:AAA=5;是唯一能被CPU識(shí)別和執(zhí)行的語(yǔ)言需要轉(zhuǎn)換(匯編)成機(jī)器碼才可以被執(zhí)行需要轉(zhuǎn)換(編譯)成機(jī)器碼才可以被執(zhí)行不容易理解和記憶相比機(jī)器語(yǔ)言更易于理解和記憶類似于自然語(yǔ)言,更好理解記憶CPU不同,機(jī)器語(yǔ)言不同CPU不同,指令助記符不同CPU不同,但C語(yǔ)言的語(yǔ)法不變一條匯編指令對(duì)應(yīng)一條機(jī)器指令一條C語(yǔ)句,常對(duì)應(yīng)若干條機(jī)器指令不如C語(yǔ)言功能強(qiáng),編程難度大于C語(yǔ)言功能強(qiáng)、編程簡(jiǎn)便生成的代碼占內(nèi)存少,速度快生成的代碼一般不如匯編語(yǔ)言精簡(jiǎn)7、學(xué)習(xí)單片機(jī)需要的工具有哪些?1、硬件開發(fā)平臺(tái)(1)開發(fā)板或?qū)嶒?yàn)箱,其上應(yīng)配有單片機(jī)芯片以及按鍵、LED燈、數(shù)碼管、蜂鳴器、LCD、溫度傳感器等多種常用外設(shè)。(2)下載器或調(diào)試器下載器可以將PC機(jī)中的程序下載到單片機(jī)的程序存儲(chǔ)器。調(diào)試器除了程序下載還提供程序調(diào)試功能。2、軟件開發(fā)平臺(tái)除了電腦,還需要一個(gè)專門的開發(fā)軟件,一般稱為IDE(IntegratedDevelopmentEnvironment集成開發(fā)環(huán)境)用于程序開發(fā)與調(diào)試。支持STM32的IDE很多,比較著名的有IARSystems公司的EWARM和Keil公司的MDK-ARM。3、工具和測(cè)量?jī)x器主要用到萬用表、電烙鐵、信號(hào)源、電源、示波器等儀器和工具。任務(wù)1.2方案設(shè)計(jì)與器件選型姓名學(xué)號(hào)日期分?jǐn)?shù)(一)術(shù)語(yǔ)記錄英文全稱中文翻譯英文簡(jiǎn)稱英文全稱中文翻譯TemperatureSensor溫度傳感器LEDLightEmittingDiode發(fā)光二極管TemperatureSwitch溫度開關(guān)(二)要點(diǎn)記錄1、畫出以單片機(jī)為核心的溫度報(bào)警器方框圖,簡(jiǎn)述其工作原理。2、簡(jiǎn)述電接點(diǎn)水銀溫度開關(guān)工作原理。水銀溫度計(jì)是利用水銀熱膨脹特性進(jìn)行溫度測(cè)量的,溫度增加,水銀柱升高。電接點(diǎn)水銀溫度計(jì)與普通水銀溫度計(jì)不同的是,在其外部可以看到兩根導(dǎo)線。在水銀柱內(nèi)部,每一根導(dǎo)線都連有一根電極。其中長(zhǎng)電極插到溫度計(jì)的下部,短電極則可根據(jù)需要調(diào)整到設(shè)定溫度例如30℃處。當(dāng)溫度下降到低于設(shè)定值時(shí),長(zhǎng)短電極之間斷開。當(dāng)溫度上升超過設(shè)定值時(shí),長(zhǎng)短電極之間通過水銀導(dǎo)通。因此兩根電極之間相當(dāng)于一個(gè)開關(guān),溫度越限時(shí),開關(guān)閉合。通過導(dǎo)線可以方便地將溫度開關(guān)信號(hào)遠(yuǎn)傳到控制電路。這就是電接點(diǎn)水銀溫度計(jì)的工作原理。任務(wù)1.3電路設(shè)計(jì)與測(cè)試姓名學(xué)號(hào)日期分?jǐn)?shù)(一)術(shù)語(yǔ)記錄英文簡(jiǎn)稱英文全稱中文翻譯GPIOGeneralPurposeInputOutput通用輸入輸出(二)自主設(shè)計(jì)請(qǐng)畫出使用兩組電源,一組為數(shù)字電源、模擬電源、基準(zhǔn)電源供電,另一組是備用電池的供電電路。或請(qǐng)畫出使用三組電源,一組為數(shù)字電源和模擬電源供電、一組為基準(zhǔn)電源供電,另一組是備用電池的供電電路。如果用PF5接收傳感器輸入,用PF6控制LED輸出,并且PF6接LED正極,請(qǐng)畫出輸入電路和輸出電路。任務(wù)1.4程序設(shè)計(jì)與調(diào)試姓名學(xué)號(hào)日期分?jǐn)?shù)(一)調(diào)試過程記錄故障現(xiàn)象:解決辦法:原因分析:故障現(xiàn)象:解決辦法:原因分析:(二)術(shù)語(yǔ)記錄英文中文翻譯英文中文翻譯Library庫(kù)IPD下拉輸入Project項(xiàng)目IPU上拉輸入Include包含IN_FLOATING浮空輸入GPIO_ReadInputDataBitGPIO讀輸入位OUT_PP推挽輸出GPIO_WriteBitGPIO寫位OUT_OD漏極開路輸出GPIO_SetBitsGPIO位寫1Structure結(jié)構(gòu)體GPIO_ResetBitsGPIO位寫0Translate編譯Initialize初始化Build生成RCC_APB2PeriphClockCmdAPB2設(shè)備時(shí)鐘控制命令Option選項(xiàng)Enable使能,允許Target目標(biāo)Disable禁止,失能Debug調(diào)試AnalogInput模擬量輸入Settings設(shè)置Digital/DiscreteInput數(shù)字量/離散量輸入Setup設(shè)置DigitalOutput數(shù)字量輸出Download下載(三)自主設(shè)計(jì)1、如果用PB5接收傳感器輸入,用PB6接LED負(fù)極,電路怎么畫,程序怎么改?#include"stm32f10x.h"voidGPIOB5_Init()//GPIOB5初始化函數(shù) {GPIO_InitTypeDef GPIO_InitStructure; //定義結(jié)構(gòu)體變量,用于存放GPIO初始化參數(shù) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//開啟GPIOB時(shí)鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; //指出準(zhǔn)備對(duì)Pin_5做初始化 //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; //指出本引腳為內(nèi)部下拉輸入IPD GPIO_Init(GPIOB,&GPIO_InitStructure); //按照以上設(shè)置,對(duì)GPIOB初始化(PB5) }voidGPIOB6_Init()//GPIOB6初始化函數(shù) {GPIO_InitTypeDef GPIO_InitStructure; //定義變量,用于存儲(chǔ)GPIO初始化參數(shù) //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//開啟GPIOB時(shí)鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6; //指出準(zhǔn)備對(duì)Pin_6初始化 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //指定輸出速度為50MHz GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //設(shè)置為推挽輸出Out_PP GPIO_Init(GPIOB,&GPIO_InitStructure); //按照以上設(shè)置初始化GPIOB(PB6) GPIO_SetBits(GPIOB,GPIO_Pin_6); //向PB6輸出1(熄滅) }intmain(){u8temperature; //定義變量temperature,用于存儲(chǔ)溫度值 GPIOB5_Init(); //調(diào)用子函數(shù)GPIOB5_Init(),進(jìn)行PB5初始化 GPIOB6_Init(); //調(diào)用子函數(shù)GPIOB6_Init(),進(jìn)行PB6初始化 while(1) //循環(huán)程序 {temperature=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5);//讀取PB5引腳輸入并送給temperature if(temperature==1) //如果溫度越限 {GPIO_WriteBit(GPIOB,GPIO_Pin_6,Bit_RESET);} //則點(diǎn)亮LED else //否則 {GPIO_WriteBit(GPIOB,GPIO_Pin_6,Bit_SET);} //熄滅LED }}2、如果用PB5接收傳感器輸入,用PB6接LED正極,電路怎么畫,程序怎么改?#include"stm32f10x.h"voidGPIOB5_Init()//GPIOB5初始化函數(shù) {GPIO_InitTypeDef GPIO_InitStructure; //定義結(jié)構(gòu)體變量,用于存放GPIO初始化參數(shù) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//開啟GPIOB時(shí)鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; //指出準(zhǔn)備對(duì)Pin_5做初始化 //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; //指出本引腳為內(nèi)部下拉輸入IPD GPIO_Init(GPIOB,&GPIO_InitStructure); //按照以上設(shè)置,對(duì)GPIOB初始化(PB5) }voidGPIOB6_Init()//GPIOB6初始化函數(shù) {GPIO_InitTypeDef GPIO_InitStructure; //定義變量,用于存儲(chǔ)GPIO初始化參數(shù) //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//開啟GPIOB時(shí)鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6; //指出準(zhǔn)備對(duì)Pin_6初始化 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //指定輸出速度為50MHz GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //設(shè)置為推挽輸出Out_PP GPIO_Init(GPIOB,&GPIO_InitStructure); //按照以上設(shè)置初始化GPIOB(PB6) GPIO_ResetBits(GPIOB,GPIO_Pin_6); //向PB6輸出0(熄滅) }intmain(){u8temperature; //定義變量temperature,用于存儲(chǔ)溫度值 GPIOB5_Init(); //調(diào)用子函數(shù)GPIOB5_Init(),進(jìn)行PB5初始化 GPIOB6_Init(); //調(diào)用子函數(shù)GPIOB6_Init(),進(jìn)行PB6初始化 while(1) //循環(huán)程序 {temperature=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5);//讀取PB5引腳輸入并送給temperature if(temperature==1) //如果溫度越限 {GPIO_WriteBit(GPIOB,GPIO_Pin_6,Bit_SET);} //則點(diǎn)亮LED else //否則 {GPIO_WriteBit(GPIOB,GPIO_Pin_6,Bit_RESET);} //熄滅LED }}3、用GPIO_SetBits()和GPIO_ResetBits()庫(kù)函數(shù),題2怎么改?題2的主程序改變?nèi)缦拢篿ntmain(){u8temperature; //定義變量temperature,用于存儲(chǔ)溫度值 GPIOB5_Init(); //調(diào)用子函數(shù)GPIOB5_Init(),進(jìn)行PB5初始化 GPIOB6_Init(); //調(diào)用子函數(shù)GPIOB6_Init(),進(jìn)行PB6初始化 while(1) //循環(huán)程序 {temperature=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5);//讀取PB5引腳輸入并送給temperature if(temperature==1) //如果溫度越限 {GPIO_SetBits(GPIOB,GPIO_Pin_6);} //則點(diǎn)亮LED else //否則 {GPIO_ResetBits(GPIOB,GPIO_Pin_6);} //熄滅LED }}4、如果按鍵采用如圖電路,應(yīng)如何編寫PA0初始化程序?PA0初始化中應(yīng)設(shè)置為IPU模式voidGPIOA_Init() //GPIOA初始化函數(shù) {GPIO_InitTypeDef GPIO_InitStructure; //定義結(jié)構(gòu)體變量,用于存放GPIO初始化參數(shù) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//開啟GPIOA時(shí)鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; //指出準(zhǔn)備對(duì)Pin_0做初始化 //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //指出本引腳為內(nèi)部上拉輸入IPU GPIO_Init(GPIOA,&GPIO_InitStructure); //按照以上設(shè)置,對(duì)GPIOA初始化(PA0) }5、如果采用圖示輸入電路,應(yīng)如何編寫初始化程序?PA0初始化中應(yīng)設(shè)置為IN_FLOATING(浮空)模式voidGPIOA_Init() //GPIOA初始化函數(shù) {GPIO_InitTypeDef GPIO_InitStructure; //定義結(jié)構(gòu)體變量,用于存放GPIO初始化參數(shù) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//開啟GPIOA時(shí)鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; //指出準(zhǔn)備對(duì)Pin_0做初始化 //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //指出本引腳為內(nèi)部浮空輸入IN_FLOATING GPIO_Init(GPIOA,&GPIO_InitStructure); //按照以上設(shè)置,對(duì)GPIOA初始化(PA0) }6、用PE2接收傳感器輸入,設(shè)置為內(nèi)部上拉輸入;用PC1連接LED的正極,電路怎么接,程序如何編寫?#include"stm32f10x.h"voidGPIOE_Init()//GPIOE初始化函數(shù) {GPIO_InitTypeDef GPIO_InitStructure; //定義結(jié)構(gòu)體變量,用于存放GPIO初始化參數(shù) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//開啟GPIOE時(shí)鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2; //指出準(zhǔn)備對(duì)Pin_2做初始化 //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //指出本引腳為內(nèi)部下拉輸入IPU GPIO_Init(GPIOE,&GPIO_InitStructure); //按照以上設(shè)置,對(duì)GPIOE初始化(PE2) }voidGPIOC_Init()//GPIOC初始化函數(shù) {GPIO_InitTypeDef GPIO_InitStructure; //定義變量,用于存儲(chǔ)GPIO初始化參數(shù) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//開啟GPIOC時(shí)鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1; //指出準(zhǔn)備對(duì)Pin_1初始化 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //指定輸出速度為50MHz GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //設(shè)置為推挽輸出Out_PP GPIO_Init(GPIOC,&GPIO_InitStructure); //按照以上設(shè)置初始化GPIOC(PC1) GPIO_ResetBits(GPIOC,GPIO_Pin_6); //向PC1輸出0(熄滅) }intmain(){u8temperature; //定義變量temperature,用于存儲(chǔ)溫度值 GPIOE_Init(); //調(diào)用子函數(shù)GPIOE_Init(),進(jìn)行PE2初始化 GPIOC_Init(); //調(diào)用子函數(shù)GPIOC_Init(),進(jìn)行PC1初始化 while(1) //循環(huán)程序 {temperature=GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2);//讀取PE2引腳輸入并送給temperature if(temperature==1) //如果溫度越限 {GPIO_WriteBit(GPIOC,GPIO_Pin_1,Bit_SET);} //則點(diǎn)亮LED else //否則 {GPIO_WriteBit(GPIOC,GPIO_Pin_1,Bit_RESET);} //熄滅LED }}任務(wù)1.5利用位操作實(shí)現(xiàn)溫度報(bào)警器姓名學(xué)號(hào)日期分?jǐn)?shù)(一)調(diào)試過程記錄故障現(xiàn)象:解決辦法:原因分析:故障現(xiàn)象:解決辦法:原因分析:(二)術(shù)語(yǔ)記錄英文全稱中文翻譯英文全稱中文翻譯Public公共Application應(yīng)用System系統(tǒng)Group組define定義compile編譯Startup啟動(dòng)IncludePaths包含路徑User用戶FolderSetup文件夾Periph_Driver設(shè)備驅(qū)動(dòng)BitBand位帶(三)自主設(shè)計(jì)1、用分組管理的方法,對(duì)圖示電路進(jìn)行編程,要求:按下按鍵K_Right,LED5點(diǎn)亮,否則熄滅。請(qǐng)畫出文件夾的框架,寫出文件main.c、key.c、key.h、led.c、led.h的內(nèi)容。(1)框架(2)main.c#include"stm32f10x.h" //位帶操作頭文件#include"system.h" //位帶操作頭文件#include"key.h" //按鍵定義頭文件#include"led.h" //led定義頭文件intmain(){ Key_Init(); //初始化按鍵 Led_Init(); //初始化LED while(1) { Led5=K_Right; }}(3)key.c#include"key.h" //聲明包含key.h文件#include"stm32f10x.h" //聲明包含stm32f10x.h文件/***********按鍵初始化***********************/voidKey_Init(){ GPIO_InitTypeDef GPIO_InitStructure; //定義結(jié)構(gòu)體變量,用于存放GPIO初始化參數(shù) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE); //開啟GPIOA和GPIOE時(shí)鐘 /*********GPIOA_Pin_0初始化**********/ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; //Pin_0 //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; //內(nèi)部下拉輸入IPD GPIO_Init(GPIOA,&GPIO_InitStructure); //GPIOA_Pin_0初始化 /**********GPIOE_Pin_2、Pin_3、Pin_4初始化********/ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4; //Pin_2、Pin_3、Pin_4 //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //內(nèi)部上拉輸入IPU GPIO_Init(GPIOE,&GPIO_InitStructure); //GPIOE初始化}(4)key.h#ifndef_KEY_H //如果不曾定義符號(hào)_KEY_H#define_KEY_H //則定義定義符號(hào)_KEY_H #define K_Up PAin(0) //定義K_Up按鍵 #define K_Left PEin(2) //定義K_Left按鍵 #define K_Down PEin(3) //定義K_Down按鍵 #define K_Right PEin(4) //定義K_Right按鍵 voidKey_Init(void); //聲明函數(shù)Key_Init()#endif led.c#include"led.h"#include"stm32f10x.h"/********LED初始化****************************/voidLed_Init(){ GPIO_InitTypeDef GPIO_InitStructure; //定義變量,用于存儲(chǔ)GPIO初始化參數(shù) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//開啟GPIOC時(shí)鐘 /**********GPIOC_Pin_0~Pin_7初始化********/ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3\ |GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//Pin_0~Pin_7 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //輸出速度50MHz GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽輸出Out_PP GPIO_Init(GPIOC,&GPIO_InitStructure); //GPIOC初始化 GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3\ |GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);//GPIOC全部熄滅}(6)led.h#ifndef_LED_H //如果不曾定義符號(hào)_LED_H#define_LED_H //則定義符號(hào)_LED_H #defineLed1 PCout(0) //給輸出引腳起名字 #defineLed2 PCout(1) #defineLed3 PCout(2) #defineLed4 PCout(3) #defineLed5 PCout(4) #defineLed6 PCout(5) #defineLed7 PCout(6) #defineLed8 PCout(7) voidLed_Init(void); //聲明Led_Init()函數(shù)#endif 2、要求:壓力超過上限,LED1點(diǎn)亮,否則熄滅。壓力低于下限,LED2點(diǎn)亮,否則熄滅。請(qǐng)利用PE2和PE4連接的按鍵模擬壓力傳感器,畫出電路,編寫main.c、key.c、key.h、led.c、led.h。(1)電路(2)main.c#include"system.h" //位帶操作頭文件#include"key.h" //按鍵定義頭文件#include"led.h" //led定義頭文件intmain(){ Key_Init(); //初始化按鍵 Led_Init(); //初始化LED while(1) { Led1=K_Right; Led2=K_Left; }}(3)key.c、key.h、led.c、led.h與題1相同?!秵纹瑱C(jī)產(chǎn)品設(shè)計(jì)與制作》項(xiàng)目報(bào)告項(xiàng)目2、利用SysTick實(shí)現(xiàn)溫度報(bào)警與控制姓名:學(xué)號(hào):
一、任務(wù)要求1、能畫出系統(tǒng)方框圖并進(jìn)行主要器件選型。2、能畫出基于STM32單片機(jī)的溫度報(bào)警控制器電源電路、輸入電路、輸出電路、復(fù)位電路和外部晶振電路;理解其工作原理;并能進(jìn)行舉一反三的設(shè)計(jì)。3、能畫出程序流程圖;能利用現(xiàn)有框架,通過位帶操作或者GPIO位讀寫函數(shù)編寫溫度采集、蜂鳴器報(bào)警、繼電器控制程序、閃爍程序以及流水燈程序;并能夠根據(jù)電路變化對(duì)程序進(jìn)行適應(yīng)性修改;會(huì)利用普通延時(shí)和SysTick延時(shí)實(shí)現(xiàn)延時(shí)功能。4、能讀懂STM32時(shí)鐘樹;會(huì)根據(jù)需要進(jìn)行時(shí)鐘設(shè)置規(guī)劃,能基本讀懂時(shí)鐘切換程序并調(diào)用程序?qū)⑾到y(tǒng)時(shí)鐘從內(nèi)部切換到外部高速振蕩源。二、要點(diǎn)記錄及成果檢驗(yàn)任務(wù)2.2電路設(shè)計(jì)與測(cè)試姓名學(xué)號(hào)日期分?jǐn)?shù)(一)術(shù)語(yǔ)記錄英文中文翻譯NRSToscillator
SystemInitSYSCLK(二)自主設(shè)計(jì)1、請(qǐng)?jiān)O(shè)計(jì)3.3V和備用電池兩組電源供電的系統(tǒng)供電電路。2、請(qǐng)?jiān)O(shè)計(jì)兩個(gè)電接點(diǎn)溫度計(jì)和PF5、PF6連接的外部上下拉輸入電路。3、請(qǐng)?jiān)O(shè)計(jì)PA2連接,高電平驅(qū)動(dòng)的蜂鳴器電路。4、請(qǐng)?jiān)O(shè)計(jì)PD1連接,三極管+繼電器,高電平驅(qū)動(dòng)的電加熱器控制電路。5、請(qǐng)畫出兩種STM32按鈕復(fù)位電路。6、請(qǐng)?jiān)O(shè)計(jì)使用兩個(gè)外部晶振分別做高速和低速振蕩源的外部晶振電路。任務(wù)2.3程序設(shè)計(jì)與調(diào)試姓名學(xué)號(hào)日期分?jǐn)?shù)(一)調(diào)試過程記錄故障現(xiàn)象:解決辦法:原因分析:故障現(xiàn)象:解決辦法:原因分析:(二)術(shù)語(yǔ)記錄英文全稱中文翻譯英文全稱中文翻譯SensordelayBuzzertickheatSysTick(三)自主設(shè)計(jì)(1)針對(duì)如下電路,如果將PE2引腳換為PA0,PE4引腳換為PE3,請(qǐng)修改程序,實(shí)現(xiàn)溫度報(bào)警與控制功能。(2)針對(duì)如下電路,請(qǐng)編寫程序,用GPIO位讀寫或者置位復(fù)位庫(kù)函數(shù)代替位帶操作,實(shí)現(xiàn)溫度報(bào)警與控制功能。(3)按下K_Left(PE2)按鍵,Led1(PC0)閃爍,亮1S滅1S;松開按鍵,Led1(PC0)熄滅。請(qǐng)?jiān)O(shè)計(jì)電源、晶振、復(fù)位、按鍵、LED電路,畫出程序流程,并利用位帶操作編寫程序。(4)針對(duì)題(3),請(qǐng)用GPIO位讀寫庫(kù)函數(shù)完成如上功能。(5)編寫Led8(PC7)無條件閃爍程序。(6)按下K_Left按鍵(PE2),Led8(PC7)~Led5(PC4)依次點(diǎn)亮,間隔時(shí)間0.5S。請(qǐng)?jiān)O(shè)計(jì)電源、復(fù)位、晶振、按鍵、LED電路,畫程序流程,編寫程序。(7)請(qǐng)編寫無條件流水燈程序,要求每次亮兩盞燈,每次左移2盞?!秵纹瑱C(jī)產(chǎn)品設(shè)計(jì)與制作》項(xiàng)目報(bào)告項(xiàng)目2、利用SysTick實(shí)現(xiàn)溫度報(bào)警與控制姓名:學(xué)號(hào):
一、任務(wù)要求1、能畫出系統(tǒng)方框圖并進(jìn)行主要器件選型。2、能畫出基于STM32單片機(jī)的溫度報(bào)警控制器電源電路、輸入電路、輸出電路、復(fù)位電路和外部晶振電路;理解其工作原理;并能進(jìn)行舉一反三的設(shè)計(jì)。3、能畫出程序流程圖;能利用現(xiàn)有框架,通過位帶操作或者GPIO位讀寫函數(shù)編寫溫度采集、蜂鳴器報(bào)警、繼電器控制程序、閃爍程序以及流水燈程序;并能夠根據(jù)電路變化對(duì)程序進(jìn)行適應(yīng)性修改;會(huì)利用普通延時(shí)和SysTick延時(shí)實(shí)現(xiàn)延時(shí)功能。4、能讀懂STM32時(shí)鐘樹;會(huì)根據(jù)需要進(jìn)行時(shí)鐘設(shè)置規(guī)劃,能基本讀懂時(shí)鐘切換程序并調(diào)用程序?qū)⑾到y(tǒng)時(shí)鐘從內(nèi)部切換到外部高速振蕩源。二、要點(diǎn)記錄及成果檢驗(yàn)任務(wù)2.2電路設(shè)計(jì)與測(cè)試姓名學(xué)號(hào)日期分?jǐn)?shù)(一)術(shù)語(yǔ)記錄英文中文翻譯NRST低電平復(fù)位oscillator
振蕩器SystemInit系統(tǒng)初始化SYSCLK系統(tǒng)時(shí)鐘(二)自主設(shè)計(jì)1、請(qǐng)?jiān)O(shè)計(jì)3.3V和備用電池兩組電源供電的系統(tǒng)供電電路。2、請(qǐng)?jiān)O(shè)計(jì)兩個(gè)電接點(diǎn)溫度計(jì)和PF5、PF6連接的外部上下拉輸入電路。3、請(qǐng)?jiān)O(shè)計(jì)PA2連接,高電平驅(qū)動(dòng)的蜂鳴器電路。4、請(qǐng)?jiān)O(shè)計(jì)PD1連接,三極管+繼電器,高電平驅(qū)動(dòng)的電加熱器控制電路。5、請(qǐng)畫出兩種STM32按鈕復(fù)位電路。6、請(qǐng)?jiān)O(shè)計(jì)使用兩個(gè)外部晶振分別做高速和低速振蕩源的外部晶振電路。任務(wù)2.3程序設(shè)計(jì)與調(diào)試姓名學(xué)號(hào)日期分?jǐn)?shù)(一)調(diào)試過程記錄故障現(xiàn)象:解決辦法:原因分析:故障現(xiàn)象:解決辦法:原因分析:(二)術(shù)語(yǔ)記錄英文全稱中文翻譯英文全稱中文翻譯Sensor傳感器delay延遲Buzzer蜂鳴器tick滴答heat加熱SysTick系統(tǒng)滴答(定時(shí)器)(三)自主設(shè)計(jì)(1)針對(duì)如下電路,如果將PE2引腳換為PA0,PE4引腳換為PE3,請(qǐng)修改程序,實(shí)現(xiàn)溫度報(bào)警與控制功能。main.c#include"stm32f1xx.h" //stm32定義頭文件#include"sys.h" //位帶操作頭文件#include"sensor.h" //傳感器定義頭文件#include"buzzer.h" //蜂鳴器定義頭文件#include"heat.h" //繼電器(加熱器)定義頭文件#include"SysTick.h" //滴答時(shí)鐘頭文件intmain(){ HAL_Init();Sensor_Init(); //初始化傳感器 Buzzer_Init(); //初始化蜂鳴器 Heat_Init(); //初始化繼電器(加熱器) SysTick_Init(72); //初始化滴答時(shí)鐘,指出系統(tǒng)時(shí)鐘頻率為72MHz while(1) { if(T_High==0 ) //如果溫度超過上限(如果電路用外部上拉,此處改為==1) { Buzzer=!Buzzer; //蜂鳴器報(bào)警 delay_us(500); //延時(shí)500us Heat=1; //停止加熱 } else //否則 {if(T_Low==0 ) //如果溫度低于下限(如果電路用外部上拉,此處改為==1) { Buzzer=!Buzzer; //蜂鳴器報(bào)警 delay_us(500); //延時(shí)500us Heat=0; //開始加熱 } else //否則 { Buzzer=0; //蜂鳴器停止報(bào)警 } } }}sensor.c#include"sensor.h"voidSensor_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定義GPIO初始化參數(shù) __HAL_RCC_GPIOE_CLK_ENABLE(); /開啟GPIOE時(shí)鐘 __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStructure.Pin=GPIO_PIN_3; //是PE3 GPIO_InitStructure.Mode=GPIO_MODE_INPUT; //做輸入 GPIO_InitStructure.Pull=GPIO_PULLUP; //內(nèi)部上拉 HAL_GPIO_Init(GPIOE,&GPIO_InitStructure); //執(zhí)行GPIOE初始化 GPIO_InitStructure.Pin=GPIO_PIN_0; //是Pa0 GPIO_InitStructure.Mode=GPIO_MODE_INPUT; //做輸入 GPIO_InitStructure.Pull=GPIO_PULLDOWN; //內(nèi)部下拉 HAL_GPIO_Init(GPIOA,&GPIO_InitStructure); //執(zhí)行GPIOA初始化 }Sensor.h#ifndef_SENSOR_H //如果不曾定義符號(hào)_SENSOR_H#define_SENSOR_H //則定義定義符號(hào)_SENSOR_H #define T_High PAin(0) //定義T_High #define T_Low PEin(3) //定義T_Low voidSensor_Init(void); //聲明函數(shù)Sensor_Init()#endifBuzzer.c#include"beep.h"voidBeep_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定義GPIO初始化變量 __HAL_RCC_GPIOB_CLK_ENABLE(); //開啟GPIOB時(shí)鐘 GPIO_InitStructure.Pin=GPIO_PIN_5; //準(zhǔn)備對(duì)PB5初始化 GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP; //推挽輸出Out_PP GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH;//高速輸出 HAL_GPIO_Init(GPIOB,&GPIO_InitStructure); //GPIOB初始化 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);//使PB5輸出0(不響)} Buzzer.h#ifndef_BUZZER_H //如果不曾定義符號(hào)_BUZZER_H#define_BUZZER_H //則定義符號(hào)_BUZZER_H #defineBuzzer PBout(5) //定義蜂鳴器管腿為PB5 voidBuzzer_Init(void); //聲明Buzzer_Init()函數(shù)#endifHeat.c#include"heat.h"voidHeat_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定義初始化變量 __HAL_RCC_GPIOC_CLK_ENABLE(); //開啟GPIOC時(shí)鐘 GPIO_InitStructure.Pin=GPIO_PIN_7; //是PC7 GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH;//高速輸出 GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_OD; //開漏輸出 HAL_GPIO_Init(GPIOC,&GPIO_InitStructure); //GPIOC初始化 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_SET);//PC7輸出1(不加熱)}Heat.h#ifndef_HEAT_H //如果不曾定義符號(hào)_HEAT_H#define_HEAT_H //則定義符號(hào)_HEAT_H #defineHeat PCout(7) //定義加熱器控制引腳 voidHeat_Init(void); //聲明Heat_Init()函數(shù)#endif(2)針對(duì)如下電路,請(qǐng)編寫程序,用GPIO位讀寫或者置位復(fù)位庫(kù)函數(shù)代替位帶操作,實(shí)現(xiàn)溫度報(bào)警與控制功能。main.c#include"stm32f1xx.h" //stm32定義頭文件//#include"sys.h" //位帶操作頭文件#include"sensor.h" //傳感器定義頭文件#include"buzzer.h" //蜂鳴器定義頭文件#include"heat.h" //繼電器(加熱器)定義頭文件#include"SysTick.h" //滴答時(shí)鐘頭文件intmain(){ u8T_High,T_Low;//定義兩個(gè)變量分別用于存儲(chǔ)溫度是否越上限和下限HAL_Init();Sensor_Init(); //初始化傳感器 Buzzer_Init(); //初始化蜂鳴器 Heat_Init(); //初始化繼電器(加熱器) SysTick_Init(72); //初始化滴答時(shí)鐘,指出系統(tǒng)時(shí)鐘頻率為72MHz while(1) { T_High=HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2);//讀上限傳感器輸入T_Low=HAL_GPIO_ReadPint(GPIOE,GPIO_PIN_4);//讀下限傳感器輸入if(T_High==0 ) //如果溫度超過上限 { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);//向蜂鳴器輸出1; delay_us(500); //延時(shí)500usHAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);//向蜂鳴器輸出0;delay_us(500); //延時(shí)500us HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_SET);//向加熱器輸出1,停止加熱 } else //否則 {if(T_Low==0 ) //如果溫度低于下限 {HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);//向蜂鳴器輸出1; delay_us(500); //延時(shí)500usHAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET;//向蜂鳴器輸出0;delay_us(500); //延時(shí)500us HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_RESET);//向加熱器輸出0,加熱 } else //否則 { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET;//向蜂鳴器輸出1; //蜂鳴器停止報(bào)警 } } }}sensor.c#include"sensor.h"voidSensor_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定義GPIO初始化參數(shù) __HAL_RCC_GPIOE_CLK_ENABLE(); //開啟GPIOE時(shí)鐘 GPIO_InitStructure.Pin=GPIO_PIN_2|GPIO_PIN_4; //是PE2和PE4 GPIO_InitStructure.Mode=GPIO_MODE_INPUT; //做輸入 GPIO_InitStructure.Pull=GPIO_PULLUP; //內(nèi)部上拉 HAL_GPIO_Init(GPIOE,&GPIO_InitStructure); //執(zhí)行GPIOE初始化 }Sensor.h#ifndef_SENSOR_H //如果不曾定義符號(hào)_SENSOR_H#define_SENSOR_H //則定義定義符號(hào)_SENSOR_H //#define T_High PEin(2) //定義T_High(可不定義) //#define T_Low PEin(4) //定義T_Low(可不定義) voidSensor_Init(void); //聲明函數(shù)Sensor_Init()#endifBuzzer.c#include"beep.h"voidBeep_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定義GPIO初始化變量 __HAL_RCC_GPIOB_CLK_ENABLE(); //開啟GPIOB時(shí)鐘 GPIO_InitStructure.Pin=GPIO_PIN_5; //準(zhǔn)備對(duì)PB5初始化 GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP; //推挽輸出Out_PP GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH;//高速輸出 HAL_GPIO_Init(GPIOB,&GPIO_InitStructure); //GPIOB初始化 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);//使PB5輸出0(不響) //注意電路不同可能需要輸出1}Buzzer.h#ifndef_BUZZER_H //如果不曾定義符號(hào)_BUZZER_H#define_BUZZER_H //則定義符號(hào)_BUZZER_H //#defineBuzzer PBout(5) //定義蜂鳴器管腿為PB5(可不定義) voidBuzzer_Init(void); //聲明Buzzer_Init()函數(shù)#endifHeat.c#include"heat.h"voidHeat_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定義初始化變量 __HAL_RCC_GPIOC_CLK_ENABLE(); //開啟GPIOC時(shí)鐘 GPIO_InitStructure.Pin=GPIO_PIN_7; //是PC7 GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH;//高速輸出 GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_OD; //開漏輸出 HAL_GPIO_Init(GPIOC,&GPIO_InitStructure); //GPIOC初始化 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_SET);//PC7輸出1(不加熱)}Heat.h#ifndef_HEAT_H //如果不曾定義符號(hào)_HEAT_H#define_HEAT_H //則定義符號(hào)_HEAT_H //#defineHeat PCout(7) //定義加熱器控制引腳(可不定義) voidHeat_Init(void); //聲明Heat_Init()函數(shù)#endif(3)按下K_Left(PE2)按鍵,Led1(PC0)閃爍,亮1S滅1S;松開按鍵,Led1(PC0)熄滅。請(qǐng)?jiān)O(shè)計(jì)電源、晶振、復(fù)位、按鍵、LED電路,畫出程序流程,并利用位帶操作編寫程序。main.c#include"stm32f1xx.h" //stm32定義頭文件#include"sys.h" //位帶操作頭文件#include"SysTick.h" //滴答時(shí)鐘頭文件#include"key.h" //按鍵定義頭文件#include"led.h" //led定義頭文件intmain(){ HAL_Init();SysTick_Init(72); //初始化滴答時(shí)鐘,指出系統(tǒng)時(shí)鐘頻率為72MHzKey_Init(); //初始化按鍵 Led_Init(); //初始化led while(1) { if(K_Left==0 ) //如果按鍵按下 { Led1=!Led1; //LED狀態(tài)取反 delay_ms(1000); //延時(shí)500ms }elseLed1=1;//否則熄滅 }}Key.c#include"key.h" //聲明包含key.h文件#include"stm32f10x.h" //聲明包含stm32f10x.h文件/***********按鍵初始化***********************/voidKey_Init(){ GPIO_InitTypeDef GPIO_InitStructure; //定義結(jié)構(gòu)體變量,用于存放GPIO初始化參數(shù) __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE(); //開啟GPIOA和GPIOE時(shí)鐘(可只開啟GPIOE時(shí)鐘) /*********GPIOA_Pin_0初始化**********/GPIO_InitStructure.Pin=GPIO_PIN_0; GPIO_InitStructure.Mode=GPIO_MODE_INPUT; //做輸入 GPIO_InitStructure.Pull=GPIO_PULLDOWN; //內(nèi)部下拉 HAL_GPIO_Init(GPIOA,&GPIO_InitStructure); //GPIOA_Pin_0初始化 /**********GPIOE_Pin_2、Pin_3、Pin_4初始化********/ GPIO_InitStructure.Pin=GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4; //是PE2和PE4 GPIO_InitStructure.Mode=GPIO_MODE_INPUT; //做輸入 GPIO_InitStructure.Pull=GPIO_PULLUP; //內(nèi)部上拉 HAL_GPIO_Init(GPIOE,&GPIO_InitStructure); //執(zhí)行GPIOE初始化 //GPIOE初始化(可只對(duì)PE2初始化)}key.h#ifndef_KEY_H //如果不曾定義符號(hào)_KEY_H#define_KEY_H //則定義定義符號(hào)_KEY_H #define K_Up PAin(0) //定義K_Up按鍵 #define K_Left PEin(2) //定義K_Left按鍵(可只定義PEin(2)) #define K_Down PEin(3) //定義K_Down按鍵 #define K_Right PEin(4) //定義K_Right按鍵 voidKey_Init(void); //聲明函數(shù)Key_Init()#endif led.c#include"led.h"voidLed_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定義GPIO初始化參數(shù) __HAL_RCC_GPIOC_CLK_ENABLE(); //開啟GPIOC時(shí)鐘 GPIO_InitStructure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3\|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; //是PC0、1、2~7 GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP; //做輸出 GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH;//高速輸出 HAL_GPIO_Init(GPIOC,&GPIO_InitStructure); //執(zhí)行GPIOC初始化 }Led.h#ifndef_LED_H //如果不曾定義符號(hào)_LED_H#define_LED_H //則定義符號(hào)_LED_H #defineLed1 PCout(0) //給輸出引腳起名字(可只定義PC0) #defineLed2 PCout(1) #defineLed3 PCout(2) #defineLed4 PCout(3) #defineLed5 PCout(4) #defineLed6 PCout(5) #defineLed7 PCout(6) #defineLed8 PCout(7) voidLed_Init(void); //聲明Led_Init()函數(shù)#endif //結(jié)束if(5)編寫Led8(PC7)無條件閃爍程序。main.c#include"stm32f1xx.h" //stm32定義頭文件#include"sys.h" //位帶操作頭文件#include"SysTick.h" //滴答時(shí)鐘頭文件//#include"key.h" //按鍵定義頭文件(不需要)#include"led.h" //led定義頭文件intmain(){ HAL_Init();SysTick_Init(72); //初始化滴答時(shí)鐘,指出系統(tǒng)時(shí)鐘頻率為72MHzKey_Init(); //初始化按鍵 Led_Init(); //初始化led while(1) { Led18=!Led8; //LED狀態(tài)取反 delay_ms(500); //延時(shí)500ms }} led.c#include"led.h"#include"stm32f1xx.h"/********LED初始化****************************/voidLed_Init(){ GPIO_InitTypeDef GPIO_InitStructure; //定義變量,用于存儲(chǔ)GPIO初始化參數(shù) __HAL_RCC_GPIOC_CLK_ENABLE(); //開啟GPIOC時(shí)鐘 /**********GPIOC_Pin_0~Pin_7初始化********/ GPIO_InitStructure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3\|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;; //Pin_0~Pin_7(可只對(duì)Pin_7初始化) GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH;//高速輸出 GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_OD; //開漏輸出 HAL_GPIO_Init(GPIOC,&GPIO_InitStructure); //GPIOC初始化 Led1=Led2=Led3=Led4=Led5=Led6=Led7=Led8=1;//GPIOC全部熄滅(可只滅PC7)}Led.h#ifndef_LED_H //如果不曾定義符號(hào)_LED_H#define_LED_H //則定義符號(hào)_LED_H #defineLed1 PCout(0) //給輸出引腳起名字(可只定義PC7) #defineLed2 PCout(1) #defineLed3 PCout(2) #defineLed4 PCout(3) #defineLed5 PCout(4) #defineLed6 PCout(5) #defineLed7 PCout(6) #defineLed8 PCout(7) voidLed_Init(void); //聲明Led_Init()函數(shù)#endif //結(jié)束if(6)按下K_Left按鍵(PE2),Led8(PC7)~Led5(PC4)依次點(diǎn)亮,間隔時(shí)間0.5S。請(qǐng)?jiān)O(shè)計(jì)電源、復(fù)位、晶振、按鍵、LED電路,畫程序流程,編寫程序。電路:main.c#include"stm32f1xx.h" //stm32定義頭文件#include"sys.h" //位帶操作頭文件#include"SysTick.h" //滴答時(shí)鐘頭文件#include"key.h" //按鍵定義頭文件#include"led.h" //led定義頭文件intmain(){ HAL_Init();SysTick_Init(72); //初始化滴答時(shí)鐘,指出系統(tǒng)時(shí)鐘頻率為72MHzKey_Init(); //初始化按鍵 Led_Init(); //初始化led while(1) { if(K_Left==0 ) //如果按鍵按下 { Led8=0;Led7=1;Led6=1;Led5=1;delay_ms(500); //點(diǎn)亮第1盞 Led8=1;Led7=0;Led6=1;Led5=1;delay_ms(500); //點(diǎn)亮第2盞Led8=1;Led7=1;Led6=0;Led5=1;delay_ms(500); //點(diǎn)亮第3盞 Led8=1;Led7=1;Led6=1;Led5=0;delay_ms(500); //點(diǎn)亮第4盞 }}}Key.c#include"key.h" //聲明包含key.h文件#include"stm32f10x.h" //聲明包含stm32f10x.h文件/***********按鍵初始化***********************/voidKey_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定義GPIO初始化參數(shù) __HAL_RCC_GPIOE_CLK_ENABLE(); //開啟GPIOE時(shí)鐘 __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStructure.Pin=GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4; //是PE2和PE4 GPIO_InitStructure.Mode=GPIO_MODE_INPUT; //做輸入 GPIO_InitStructure.Pull=GPIO_PULLUP; //內(nèi)部上拉 HAL_GPIO_Init(GPIOE,&GPIO_InitStructure); //執(zhí)行GPIOE初始化 GPIO_InitStructure.Pin=GPIO_PIN_0; //是PA0 GPIO_InitStructure.Mode=GPIO_MODE_INPUT; //做輸入 GPIO_InitStructure.Pull=GPIO_PULLDOWN; //內(nèi)部下拉 HAL_GPIO_Init(GPIOA,&GPIO_InitStructure); //執(zhí)行GPIOA初始化 }key.h#ifndef_KEY_H //如果不曾定義符號(hào)_KEY_H#define_KEY_H //則定義定義符號(hào)_KEY_H #define K_Up PAin(0) //定義K_Up按鍵 #define K_Left PEin(2) //定義K_Left按鍵(可只定義PEin(2)) #define K_Down PEin(3) //定義K_Down按鍵 #define K_Right PEin(4) //定義K_Right按鍵 voidKey_Init(void); //聲明函數(shù)Key_Init()#endif led.c#include"led.h"voidLed_Init(){GPIO_InitTypeDefGPIO_InitStructure; //定義初始化變量 __HAL_RCC_GPIOC_CLK_ENABLE(); //開啟GPIOC時(shí)鐘 GPIO_InitStructure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; //是PC0~7 GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_HIGH;//高速輸出 GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP; //開漏輸出 HAL_GPIO_Init(GPIOC,&GPIO_InitStructure); //GPIOC初始化 }Led.h#ifndef_LED_H //如果不曾定義符號(hào)_LED_H#define_LED_H //則定義符號(hào)_LED_H #defineLed1 PCout(0) //給輸出引腳起名字(所有引腳可不定義) #defineLed2 PCout(1) #defineLed3 PCout(2) #defineLed4 PCout(3) #defineLed5 PCout(4) #defineLed6 PCout(5) #defineLed7 PCout(6) #defineLed8 PCout(7) voidLed_Init(void); //聲明Led_Init()函數(shù)#endif //結(jié)束if(7)請(qǐng)編寫無條件流水燈程序,要求每次亮兩盞燈,每次左移2盞。main.c#include"stm32f1xx.h" //stm32定
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 牛頓第二定律+高一上學(xué)期物理粵教版(2019)必修第一冊(cè)
- 公司行政管理知識(shí)
- 外賣運(yùn)營(yíng)培訓(xùn)課件
- 2025商務(wù)英語(yǔ)合同翻譯指南
- 遼寧省撫順市八年級(jí)地理上冊(cè) 第二章 中國(guó)的自然環(huán)境教學(xué)實(shí)錄 (新版)新人教版
- Unit 1 Welcome to my new home!Lesson 5 - Lesson 6(教學(xué)設(shè)計(jì))-四年級(jí)英語(yǔ)下學(xué)期同步備課系列(人教精通版)
- 2025年深圳個(gè)人租房合同模板下載
- 國(guó)慶旅游景點(diǎn)介紹
- 2025綜合辦公樓附屬配套工程施工合同
- 醫(yī)院防控疫情常態(tài)化
- 裝配式建筑深化設(shè)計(jì)-1.2.3 裝配式建筑深化設(shè)計(jì)拆分原47課件講解
- 電力工程施工組織措施方案
- T∕HGJ 12404-2021 儀表維修車間設(shè)計(jì)標(biāo)準(zhǔn)
- 【MOOC】園林植物應(yīng)用設(shè)計(jì)-北京林業(yè)大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 繼續(xù)教育《生態(tài)文明建設(shè)的理論與實(shí)踐》考試試題及答案
- 組織部2024年雙擁工作計(jì)劃
- 2023年新疆兵團(tuán)事業(yè)單位開展招聘考試真題
- 防溺水應(yīng)急救援培訓(xùn)
- 教育資源共享平臺(tái)
- 2024年新人教版四年級(jí)數(shù)學(xué)下冊(cè)《第6單元第2課時(shí) 小數(shù)加減法》教學(xué)課件
- 地鐵消防設(shè)施檢測(cè)技術(shù)規(guī)程 -DB13-T 5317-2020 河北
評(píng)論
0/150
提交評(píng)論