單片機產品設計與調試-基于STM32F1xx機型和HAL庫函數 項目報告1-答案_第1頁
單片機產品設計與調試-基于STM32F1xx機型和HAL庫函數 項目報告1-答案_第2頁
單片機產品設計與調試-基于STM32F1xx機型和HAL庫函數 項目報告1-答案_第3頁
單片機產品設計與調試-基于STM32F1xx機型和HAL庫函數 項目報告1-答案_第4頁
單片機產品設計與調試-基于STM32F1xx機型和HAL庫函數 項目報告1-答案_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

溫馨提示

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

評論

0/150

提交評論