單片機產(chǎn)品設計與調(diào)試-基于STM32F1xx機型和HAL庫函數(shù) 項目報告及答案匯 石梅香 項目1-6_第1頁
單片機產(chǎn)品設計與調(diào)試-基于STM32F1xx機型和HAL庫函數(shù) 項目報告及答案匯 石梅香 項目1-6_第2頁
單片機產(chǎn)品設計與調(diào)試-基于STM32F1xx機型和HAL庫函數(shù) 項目報告及答案匯 石梅香 項目1-6_第3頁
單片機產(chǎn)品設計與調(diào)試-基于STM32F1xx機型和HAL庫函數(shù) 項目報告及答案匯 石梅香 項目1-6_第4頁
單片機產(chǎn)品設計與調(diào)試-基于STM32F1xx機型和HAL庫函數(shù) 項目報告及答案匯 石梅香 項目1-6_第5頁
已閱讀5頁,還剩158頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PAGEPAGE19《單片機產(chǎn)品設計與制作》項目作業(yè)項目1、利用GPIO和位帶操作實現(xiàn)溫度報警姓名:學號:

任務目標能說出單片機的定義、作用;能說出3種以上常見的單片機產(chǎn)品和生產(chǎn)廠家;能說出STM32單片機的生產(chǎn)廠家、主要系列產(chǎn)品和主要性能指標;能說出學習單片機的目的。能畫出系統(tǒng)方框圖并說出溫度傳感器和報警燈的選型理由及其工作原理。能畫出程序流程圖;寫出程序框架、寫出程序并對程序做出解釋。會使用庫函數(shù)GPIO_ReadInputDataBit()、GPIO_WriteBit()、GPIO_SetBits()、GPIO_ResetBits()、RCC_APB2PeriphClockCmd()、GPIO_Init()編寫程序。理解位帶操作的基本概念,會利用給出的框架和位帶操作文件編寫帶有位帶操作的程序。會給程序加入宏定義,提高程序的移植性。理解分組管理的模塊化程序設計思路,會利用現(xiàn)有框架設計自己的模塊化程序。能畫出分組管理的溫度報警器程序框架,寫出程序。要點記錄及成果檢驗(一)術語記錄英文簡稱英文全稱中文翻譯英文簡稱英文全稱中文翻譯CPUSCMMemoryMCUI/OEmbeddedComputerInterface(二)概念明析1、簡要說明什么是單片機?2、指出3家單片機廠商及其主要產(chǎn)品。3、舉例說明三種使用了單片機的產(chǎn)品。4、指出STM32單片機的生產(chǎn)廠家、主要系列產(chǎn)品和主要性能指標。5、總結(jié)一下學習單片機的目的。6、單片機開發(fā)常使用的編程語言有哪些?各自有什么特點?7、學習單片機需要的工具有哪些?《單片機產(chǎn)品設計與制作》項目作業(yè)項目1、利用GPIO和位帶操作實現(xiàn)溫度報警姓名:學號:

任務目標能說出單片機的定義、作用;能說出3種以上常見的單片機產(chǎn)品和生產(chǎn)廠家;能說出STM32單片機的生產(chǎn)廠家、主要系列產(chǎn)品和主要性能指標;能說出學習單片機的目的。能畫出系統(tǒng)方框圖并說出溫度傳感器和報警燈的選型理由及其工作原理。能畫出程序流程圖;寫出程序框架、寫出程序并對程序做出解釋。會使用庫函數(shù)GPIO_ReadInputDataBit()、GPIO_WriteBit()、GPIO_SetBits()、GPIO_ResetBits()、RCC_APB2PeriphClockCmd()、GPIO_Init()編寫程序。理解位帶操作的基本概念,會利用給出的框架和位帶操作文件編寫帶有位帶操作的程序。會給程序加入宏定義,提高程序的移植性。理解分組管理的模塊化程序設計思路,會利用現(xiàn)有框架設計自己的模塊化程序。能畫出分組管理的溫度報警器程序框架,寫出程序。要點記錄及成果檢驗任務1.1認識單片機姓名學號日期分數(shù)(一)術語記錄英文簡稱英文全稱中文CPUCentralProcessingUnit中央處理器SCMSingleChipMicrocomputer單片機Memory存儲器MCUMicroControlUnit微控制器I/OInput/Output輸入/輸出EmbeddedComputer嵌入式計算機Interface接口(二)概念明析1、簡要說明什么是單片機?單片機是將CPU、存儲器、I/O接口等部件集成在一起的一個芯片。2、指出3家單片機廠商及其主要產(chǎn)品。單片機廠家包括Intel、Motorola、Zilog、Philips、Atmel、宏晶科技、Rockwell、NEC、EPSON、Hitachi、SiliconLabs、ST等等。其中最著名的是Intel的MCS-51單片機。此外還有Atmel公司的AT89S51/52。宏晶科技的STC于51系列單片機等。意法半導體的STM32也是一款單片機。3、舉例說明三種使用了單片機的產(chǎn)品。智能空調(diào)、智能玩具、汽車控制系統(tǒng)、智能儀器儀表等……4、指出STM32單片機的生產(chǎn)廠家、主要系列產(chǎn)品和主要性能指標。生產(chǎn)廠家:意法半導體公司主要系列產(chǎn)品及其位數(shù):CPU位數(shù)內(nèi)核系列描述32Cortex-M0STM32L0低功耗STM32F0入門級Cortex-M3STM32L1低功耗STM32F1基礎型,主頻72MHzSTM32F2高性能Cortex-M4STM32L4低功耗STM32F3混合信號STM32F4高性能,主頻180MHzCortex-M7STM32F7高性能8超級版6502STM8S標準系列STM8AF標準系列的汽車應用STM8AL低功耗的汽車應用STM8L低功耗5、總結(jié)一下學習單片機的目的。學習單片機目的是為了理解單片機產(chǎn)品的電路組成和程序組成,掌握使用、維護、維修、改造和開發(fā)單片機產(chǎn)品的方法。6、單片機開發(fā)常使用的編程語言有哪些?各自有什么特點?機器語言匯編語言C語言用二進制的機器指令表示例如0010010000000101用指令助記符表示例如MOVSr4,#0x05用語句表示例如用賦值語句:AAA=5;是唯一能被CPU識別和執(zhí)行的語言需要轉(zhuǎn)換(匯編)成機器碼才可以被執(zhí)行需要轉(zhuǎn)換(編譯)成機器碼才可以被執(zhí)行不容易理解和記憶相比機器語言更易于理解和記憶類似于自然語言,更好理解記憶CPU不同,機器語言不同CPU不同,指令助記符不同CPU不同,但C語言的語法不變一條匯編指令對應一條機器指令一條C語句,常對應若干條機器指令不如C語言功能強,編程難度大于C語言功能強、編程簡便生成的代碼占內(nèi)存少,速度快生成的代碼一般不如匯編語言精簡7、學習單片機需要的工具有哪些?1、硬件開發(fā)平臺(1)開發(fā)板或?qū)嶒炏?,其上應配有單片機芯片以及按鍵、LED燈、數(shù)碼管、蜂鳴器、LCD、溫度傳感器等多種常用外設。(2)下載器或調(diào)試器下載器可以將PC機中的程序下載到單片機的程序存儲器。調(diào)試器除了程序下載還提供程序調(diào)試功能。2、軟件開發(fā)平臺除了電腦,還需要一個專門的開發(fā)軟件,一般稱為IDE(IntegratedDevelopmentEnvironment集成開發(fā)環(huán)境)用于程序開發(fā)與調(diào)試。支持STM32的IDE很多,比較著名的有IARSystems公司的EWARM和Keil公司的MDK-ARM。3、工具和測量儀器主要用到萬用表、電烙鐵、信號源、電源、示波器等儀器和工具。任務1.2方案設計與器件選型姓名學號日期分數(shù)(一)術語記錄英文全稱中文翻譯英文簡稱英文全稱中文翻譯TemperatureSensor溫度傳感器LEDLightEmittingDiode發(fā)光二極管TemperatureSwitch溫度開關(二)要點記錄1、畫出以單片機為核心的溫度報警器方框圖,簡述其工作原理。2、簡述電接點水銀溫度開關工作原理。水銀溫度計是利用水銀熱膨脹特性進行溫度測量的,溫度增加,水銀柱升高。電接點水銀溫度計與普通水銀溫度計不同的是,在其外部可以看到兩根導線。在水銀柱內(nèi)部,每一根導線都連有一根電極。其中長電極插到溫度計的下部,短電極則可根據(jù)需要調(diào)整到設定溫度例如30℃處。當溫度下降到低于設定值時,長短電極之間斷開。當溫度上升超過設定值時,長短電極之間通過水銀導通。因此兩根電極之間相當于一個開關,溫度越限時,開關閉合。通過導線可以方便地將溫度開關信號遠傳到控制電路。這就是電接點水銀溫度計的工作原理。任務1.3電路設計與測試姓名學號日期分數(shù)(一)術語記錄英文簡稱英文全稱中文翻譯GPIOGeneralPurposeInputOutput通用輸入輸出(二)自主設計請畫出使用兩組電源,一組為數(shù)字電源、模擬電源、基準電源供電,另一組是備用電池的供電電路?;蛘埉嫵鍪褂萌M電源,一組為數(shù)字電源和模擬電源供電、一組為基準電源供電,另一組是備用電池的供電電路。如果用PF5接收傳感器輸入,用PF6控制LED輸出,并且PF6接LED正極,請畫出輸入電路和輸出電路。任務1.4程序設計與調(diào)試姓名學號日期分數(shù)(一)調(diào)試過程記錄故障現(xiàn)象:解決辦法:原因分析:故障現(xiàn)象:解決辦法:原因分析:(二)術語記錄英文中文翻譯英文中文翻譯Library庫IPD下拉輸入Project項目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設備時鐘控制命令Option選項Enable使能,允許Target目標Disable禁止,失能Debug調(diào)試AnalogInput模擬量輸入Settings設置Digital/DiscreteInput數(shù)字量/離散量輸入Setup設置DigitalOutput數(shù)字量輸出Download下載(三)自主設計1、如果用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時鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; //指出準備對Pin_5做初始化 //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; //指出本引腳為內(nèi)部下拉輸入IPD GPIO_Init(GPIOB,&GPIO_InitStructure); //按照以上設置,對GPIOB初始化(PB5) }voidGPIOB6_Init()//GPIOB6初始化函數(shù) {GPIO_InitTypeDef GPIO_InitStructure; //定義變量,用于存儲GPIO初始化參數(shù) //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//開啟GPIOB時鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6; //指出準備對Pin_6初始化 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //指定輸出速度為50MHz GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //設置為推挽輸出Out_PP GPIO_Init(GPIOB,&GPIO_InitStructure); //按照以上設置初始化GPIOB(PB6) GPIO_SetBits(GPIOB,GPIO_Pin_6); //向PB6輸出1(熄滅) }intmain(){u8temperature; //定義變量temperature,用于存儲溫度值 GPIOB5_Init(); //調(diào)用子函數(shù)GPIOB5_Init(),進行PB5初始化 GPIOB6_Init(); //調(diào)用子函數(shù)GPIOB6_Init(),進行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);} //則點亮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時鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; //指出準備對Pin_5做初始化 //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; //指出本引腳為內(nèi)部下拉輸入IPD GPIO_Init(GPIOB,&GPIO_InitStructure); //按照以上設置,對GPIOB初始化(PB5) }voidGPIOB6_Init()//GPIOB6初始化函數(shù) {GPIO_InitTypeDef GPIO_InitStructure; //定義變量,用于存儲GPIO初始化參數(shù) //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//開啟GPIOB時鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6; //指出準備對Pin_6初始化 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //指定輸出速度為50MHz GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //設置為推挽輸出Out_PP GPIO_Init(GPIOB,&GPIO_InitStructure); //按照以上設置初始化GPIOB(PB6) GPIO_ResetBits(GPIOB,GPIO_Pin_6); //向PB6輸出0(熄滅) }intmain(){u8temperature; //定義變量temperature,用于存儲溫度值 GPIOB5_Init(); //調(diào)用子函數(shù)GPIOB5_Init(),進行PB5初始化 GPIOB6_Init(); //調(diào)用子函數(shù)GPIOB6_Init(),進行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);} //則點亮LED else //否則 {GPIO_WriteBit(GPIOB,GPIO_Pin_6,Bit_RESET);} //熄滅LED }}3、用GPIO_SetBits()和GPIO_ResetBits()庫函數(shù),題2怎么改?題2的主程序改變?nèi)缦拢篿ntmain(){u8temperature; //定義變量temperature,用于存儲溫度值 GPIOB5_Init(); //調(diào)用子函數(shù)GPIOB5_Init(),進行PB5初始化 GPIOB6_Init(); //調(diào)用子函數(shù)GPIOB6_Init(),進行PB6初始化 while(1) //循環(huán)程序 {temperature=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5);//讀取PB5引腳輸入并送給temperature if(temperature==1) //如果溫度越限 {GPIO_SetBits(GPIOB,GPIO_Pin_6);} //則點亮LED else //否則 {GPIO_ResetBits(GPIOB,GPIO_Pin_6);} //熄滅LED }}4、如果按鍵采用如圖電路,應如何編寫PA0初始化程序?PA0初始化中應設置為IPU模式voidGPIOA_Init() //GPIOA初始化函數(shù) {GPIO_InitTypeDef GPIO_InitStructure; //定義結(jié)構(gòu)體變量,用于存放GPIO初始化參數(shù) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//開啟GPIOA時鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; //指出準備對Pin_0做初始化 //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //指出本引腳為內(nèi)部上拉輸入IPU GPIO_Init(GPIOA,&GPIO_InitStructure); //按照以上設置,對GPIOA初始化(PA0) }5、如果采用圖示輸入電路,應如何編寫初始化程序?PA0初始化中應設置為IN_FLOATING(浮空)模式voidGPIOA_Init() //GPIOA初始化函數(shù) {GPIO_InitTypeDef GPIO_InitStructure; //定義結(jié)構(gòu)體變量,用于存放GPIO初始化參數(shù) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//開啟GPIOA時鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; //指出準備對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); //按照以上設置,對GPIOA初始化(PA0) }6、用PE2接收傳感器輸入,設置為內(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時鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2; //指出準備對Pin_2做初始化 //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //指出本引腳為內(nèi)部下拉輸入IPU GPIO_Init(GPIOE,&GPIO_InitStructure); //按照以上設置,對GPIOE初始化(PE2) }voidGPIOC_Init()//GPIOC初始化函數(shù) {GPIO_InitTypeDef GPIO_InitStructure; //定義變量,用于存儲GPIO初始化參數(shù) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//開啟GPIOC時鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1; //指出準備對Pin_1初始化 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //指定輸出速度為50MHz GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //設置為推挽輸出Out_PP GPIO_Init(GPIOC,&GPIO_InitStructure); //按照以上設置初始化GPIOC(PC1) GPIO_ResetBits(GPIOC,GPIO_Pin_6); //向PC1輸出0(熄滅) }intmain(){u8temperature; //定義變量temperature,用于存儲溫度值 GPIOE_Init(); //調(diào)用子函數(shù)GPIOE_Init(),進行PE2初始化 GPIOC_Init(); //調(diào)用子函數(shù)GPIOC_Init(),進行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);} //則點亮LED else //否則 {GPIO_WriteBit(GPIOC,GPIO_Pin_1,Bit_RESET);} //熄滅LED }}任務1.5利用位操作實現(xiàn)溫度報警器姓名學號日期分數(shù)(一)調(diào)試過程記錄故障現(xiàn)象:解決辦法:原因分析:故障現(xiàn)象:解決辦法:原因分析:(二)術語記錄英文全稱中文翻譯英文全稱中文翻譯Public公共Application應用System系統(tǒng)Group組define定義compile編譯Startup啟動IncludePaths包含路徑User用戶FolderSetup文件夾Periph_Driver設備驅(qū)動BitBand位帶(三)自主設計1、用分組管理的方法,對圖示電路進行編程,要求:按下按鍵K_Right,LED5點亮,否則熄滅。請畫出文件夾的框架,寫出文件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時鐘 /*********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 //如果不曾定義符號_KEY_H#define_KEY_H //則定義定義符號_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; //定義變量,用于存儲GPIO初始化參數(shù) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//開啟GPIOC時鐘 /**********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 //如果不曾定義符號_LED_H#define_LED_H //則定義符號_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點亮,否則熄滅。壓力低于下限,LED2點亮,否則熄滅。請利用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產(chǎn)品設計與制作》項目報告項目2、利用SysTick實現(xiàn)溫度報警與控制姓名:學號:

一、任務要求1、能畫出系統(tǒng)方框圖并進行主要器件選型。2、能畫出基于STM32單片機的溫度報警控制器電源電路、輸入電路、輸出電路、復位電路和外部晶振電路;理解其工作原理;并能進行舉一反三的設計。3、能畫出程序流程圖;能利用現(xiàn)有框架,通過位帶操作或者GPIO位讀寫函數(shù)編寫溫度采集、蜂鳴器報警、繼電器控制程序、閃爍程序以及流水燈程序;并能夠根據(jù)電路變化對程序進行適應性修改;會利用普通延時和SysTick延時實現(xiàn)延時功能。4、能讀懂STM32時鐘樹;會根據(jù)需要進行時鐘設置規(guī)劃,能基本讀懂時鐘切換程序并調(diào)用程序?qū)⑾到y(tǒng)時鐘從內(nèi)部切換到外部高速振蕩源。二、要點記錄及成果檢驗任務2.2電路設計與測試姓名學號日期分數(shù)(一)術語記錄英文中文翻譯NRSToscillator

SystemInitSYSCLK(二)自主設計1、請設計3.3V和備用電池兩組電源供電的系統(tǒng)供電電路。2、請設計兩個電接點溫度計和PF5、PF6連接的外部上下拉輸入電路。3、請設計PA2連接,高電平驅(qū)動的蜂鳴器電路。4、請設計PD1連接,三極管+繼電器,高電平驅(qū)動的電加熱器控制電路。5、請畫出兩種STM32按鈕復位電路。6、請設計使用兩個外部晶振分別做高速和低速振蕩源的外部晶振電路。任務2.3程序設計與調(diào)試姓名學號日期分數(shù)(一)調(diào)試過程記錄故障現(xiàn)象:解決辦法:原因分析:故障現(xiàn)象:解決辦法:原因分析:(二)術語記錄英文全稱中文翻譯英文全稱中文翻譯SensordelayBuzzertickheatSysTick(三)自主設計(1)針對如下電路,如果將PE2引腳換為PA0,PE4引腳換為PE3,請修改程序,實現(xiàn)溫度報警與控制功能。(2)針對如下電路,請編寫程序,用GPIO位讀寫或者置位復位庫函數(shù)代替位帶操作,實現(xiàn)溫度報警與控制功能。(3)按下K_Left(PE2)按鍵,Led1(PC0)閃爍,亮1S滅1S;松開按鍵,Led1(PC0)熄滅。請設計電源、晶振、復位、按鍵、LED電路,畫出程序流程,并利用位帶操作編寫程序。(4)針對題(3),請用GPIO位讀寫庫函數(shù)完成如上功能。(5)編寫Led8(PC7)無條件閃爍程序。(6)按下K_Left按鍵(PE2),Led8(PC7)~Led5(PC4)依次點亮,間隔時間0.5S。請設計電源、復位、晶振、按鍵、LED電路,畫程序流程,編寫程序。(7)請編寫無條件流水燈程序,要求每次亮兩盞燈,每次左移2盞?!秵纹瑱C產(chǎn)品設計與制作》項目報告項目2、利用SysTick實現(xiàn)溫度報警與控制姓名:學號:

一、任務要求1、能畫出系統(tǒng)方框圖并進行主要器件選型。2、能畫出基于STM32單片機的溫度報警控制器電源電路、輸入電路、輸出電路、復位電路和外部晶振電路;理解其工作原理;并能進行舉一反三的設計。3、能畫出程序流程圖;能利用現(xiàn)有框架,通過位帶操作或者GPIO位讀寫函數(shù)編寫溫度采集、蜂鳴器報警、繼電器控制程序、閃爍程序以及流水燈程序;并能夠根據(jù)電路變化對程序進行適應性修改;會利用普通延時和SysTick延時實現(xiàn)延時功能。4、能讀懂STM32時鐘樹;會根據(jù)需要進行時鐘設置規(guī)劃,能基本讀懂時鐘切換程序并調(diào)用程序?qū)⑾到y(tǒng)時鐘從內(nèi)部切換到外部高速振蕩源。二、要點記錄及成果檢驗任務2.2電路設計與測試姓名學號日期分數(shù)(一)術語記錄英文中文翻譯NRST低電平復位oscillator

振蕩器SystemInit系統(tǒng)初始化SYSCLK系統(tǒng)時鐘(二)自主設計1、請設計3.3V和備用電池兩組電源供電的系統(tǒng)供電電路。2、請設計兩個電接點溫度計和PF5、PF6連接的外部上下拉輸入電路。3、請設計PA2連接,高電平驅(qū)動的蜂鳴器電路。4、請設計PD1連接,三極管+繼電器,高電平驅(qū)動的電加熱器控制電路。5、請畫出兩種STM32按鈕復位電路。6、請設計使用兩個外部晶振分別做高速和低速振蕩源的外部晶振電路。任務2.3程序設計與調(diào)試姓名學號日期分數(shù)(一)調(diào)試過程記錄故障現(xiàn)象:解決辦法:原因分析:故障現(xiàn)象:解決辦法:原因分析:(二)術語記錄英文全稱中文翻譯英文全稱中文翻譯Sensor傳感器delay延遲Buzzer蜂鳴器tick滴答heat加熱SysTick系統(tǒng)滴答(定時器)(三)自主設計(1)針對如下電路,如果將PE2引腳換為PA0,PE4引腳換為PE3,請修改程序,實現(xiàn)溫度報警與控制功能。main.c#include"stm32f1xx.h" //stm32定義頭文件#include"sys.h" //位帶操作頭文件#include"sensor.h" //傳感器定義頭文件#include"buzzer.h" //蜂鳴器定義頭文件#include"heat.h" //繼電器(加熱器)定義頭文件#include"SysTick.h" //滴答時鐘頭文件intmain(){ HAL_Init();Sensor_Init(); //初始化傳感器 Buzzer_Init(); //初始化蜂鳴器 Heat_Init(); //初始化繼電器(加熱器) SysTick_Init(72); //初始化滴答時鐘,指出系統(tǒng)時鐘頻率為72MHz while(1) { if(T_High==0 ) //如果溫度超過上限(如果電路用外部上拉,此處改為==1) { Buzzer=!Buzzer; //蜂鳴器報警 delay_us(500); //延時500us Heat=1; //停止加熱 } else //否則 {if(T_Low==0 ) //如果溫度低于下限(如果電路用外部上拉,此處改為==1) { Buzzer=!Buzzer; //蜂鳴器報警 delay_us(500); //延時500us Heat=0; //開始加熱 } else //否則 { Buzzer=0; //蜂鳴器停止報警 } } }}sensor.c#include"sensor.h"voidSensor_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定義GPIO初始化參數(shù) __HAL_RCC_GPIOE_CLK_ENABLE(); /開啟GPIOE時鐘 __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 //如果不曾定義符號_SENSOR_H#define_SENSOR_H //則定義定義符號_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時鐘 GPIO_InitStructure.Pin=GPIO_PIN_5; //準備對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 //如果不曾定義符號_BUZZER_H#define_BUZZER_H //則定義符號_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時鐘 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 //如果不曾定義符號_HEAT_H#define_HEAT_H //則定義符號_HEAT_H #defineHeat PCout(7) //定義加熱器控制引腳 voidHeat_Init(void); //聲明Heat_Init()函數(shù)#endif(2)針對如下電路,請編寫程序,用GPIO位讀寫或者置位復位庫函數(shù)代替位帶操作,實現(xiàn)溫度報警與控制功能。main.c#include"stm32f1xx.h" //stm32定義頭文件//#include"sys.h" //位帶操作頭文件#include"sensor.h" //傳感器定義頭文件#include"buzzer.h" //蜂鳴器定義頭文件#include"heat.h" //繼電器(加熱器)定義頭文件#include"SysTick.h" //滴答時鐘頭文件intmain(){ u8T_High,T_Low;//定義兩個變量分別用于存儲溫度是否越上限和下限HAL_Init();Sensor_Init(); //初始化傳感器 Buzzer_Init(); //初始化蜂鳴器 Heat_Init(); //初始化繼電器(加熱器) SysTick_Init(72); //初始化滴答時鐘,指出系統(tǒng)時鐘頻率為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); //延時500usHAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);//向蜂鳴器輸出0;delay_us(500); //延時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); //延時500usHAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET;//向蜂鳴器輸出0;delay_us(500); //延時500us HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_RESET);//向加熱器輸出0,加熱 } else //否則 { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET;//向蜂鳴器輸出1; //蜂鳴器停止報警 } } }}sensor.c#include"sensor.h"voidSensor_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定義GPIO初始化參數(shù) __HAL_RCC_GPIOE_CLK_ENABLE(); //開啟GPIOE時鐘 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 //如果不曾定義符號_SENSOR_H#define_SENSOR_H //則定義定義符號_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時鐘 GPIO_InitStructure.Pin=GPIO_PIN_5; //準備對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 //如果不曾定義符號_BUZZER_H#define_BUZZER_H //則定義符號_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時鐘 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 //如果不曾定義符號_HEAT_H#define_HEAT_H //則定義符號_HEAT_H //#defineHeat PCout(7) //定義加熱器控制引腳(可不定義) voidHeat_Init(void); //聲明Heat_Init()函數(shù)#endif(3)按下K_Left(PE2)按鍵,Led1(PC0)閃爍,亮1S滅1S;松開按鍵,Led1(PC0)熄滅。請設計電源、晶振、復位、按鍵、LED電路,畫出程序流程,并利用位帶操作編寫程序。main.c#include"stm32f1xx.h" //stm32定義頭文件#include"sys.h" //位帶操作頭文件#include"SysTick.h" //滴答時鐘頭文件#include"key.h" //按鍵定義頭文件#include"led.h" //led定義頭文件intmain(){ HAL_Init();SysTick_Init(72); //初始化滴答時鐘,指出系統(tǒng)時鐘頻率為72MHzKey_Init(); //初始化按鍵 Led_Init(); //初始化led while(1) { if(K_Left==0 ) //如果按鍵按下 { Led1=!Led1; //LED狀態(tài)取反 delay_ms(1000); //延時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時鐘(可只開啟GPIOE時鐘) /*********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初始化(可只對PE2初始化)}key.h#ifndef_KEY_H //如果不曾定義符號_KEY_H#define_KEY_H //則定義定義符號_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時鐘 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 //如果不曾定義符號_LED_H#define_LED_H //則定義符號_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" //滴答時鐘頭文件//#include"key.h" //按鍵定義頭文件(不需要)#include"led.h" //led定義頭文件intmain(){ HAL_Init();SysTick_Init(72); //初始化滴答時鐘,指出系統(tǒng)時鐘頻率為72MHzKey_Init(); //初始化按鍵 Led_Init(); //初始化led while(1) { Led18=!Led8; //LED狀態(tài)取反 delay_ms(500); //延時500ms }} led.c#include"led.h"#include"stm32f1xx.h"/********LED初始化****************************/voidLed_Init(){ GPIO_InitTypeDef GPIO_InitStructure; //定義變量,用于存儲GPIO初始化參數(shù) __HAL_RCC_GPIOC_CLK_ENABLE(); //開啟GPIOC時鐘 /**********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(可只對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 //如果不曾定義符號_LED_H#define_LED_H //則定義符號_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)依次點亮,間隔時間0.5S。請設計電源、復位、晶振、按鍵、LED電路,畫程序流程,編寫程序。電路:main.c#include"stm32f1xx.h" //stm32定義頭文件#include"sys.h" //位帶操作頭文件#include"SysTick.h" //滴答時鐘頭文件#include"key.h" //按鍵定義頭文件#include"led.h" //led定義頭文件intmain(){ HAL_Init();SysTick_Init(72); //初始化滴答時鐘,指出系統(tǒng)時鐘頻率為72MHzKey_Init(); //初始化按鍵 Led_Init(); //初始化led while(1) { if(K_Left==0 ) //如果按鍵按下 { Led8=0;Led7=1;Led6=1;Led5=1;delay_ms(500); //點亮第1盞 Led8=1;Led7=0;Led6=1;Led5=1;delay_ms(500); //點亮第2盞Led8=1;Led7=1;Led6=0;Led5=1;delay_ms(500); //點亮第3盞 Led8=1;Led7=1;Led6=1;Led5=0;delay_ms(500); //點亮第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時鐘 __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 //如果不曾定義符號_KEY_H#define_KEY_H //則定義定義符號_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時鐘 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 //如果不曾定義符號_LED_H#define_LED_H //則定義符號_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)請編寫無條件流水燈程序,要求每次亮兩盞燈,每次左移2盞。main.c#include"stm32f1xx.h" //stm32定

溫馨提示

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

評論

0/150

提交評論