嵌入式系統(tǒng)基礎(chǔ)與實(shí)踐-基于 ARM Cortex-M3 內(nèi)核的 STM32 微控制器(第2版) 課件 第12章 從模塊到項(xiàng)目_第1頁(yè)
嵌入式系統(tǒng)基礎(chǔ)與實(shí)踐-基于 ARM Cortex-M3 內(nèi)核的 STM32 微控制器(第2版) 課件 第12章 從模塊到項(xiàng)目_第2頁(yè)
嵌入式系統(tǒng)基礎(chǔ)與實(shí)踐-基于 ARM Cortex-M3 內(nèi)核的 STM32 微控制器(第2版) 課件 第12章 從模塊到項(xiàng)目_第3頁(yè)
嵌入式系統(tǒng)基礎(chǔ)與實(shí)踐-基于 ARM Cortex-M3 內(nèi)核的 STM32 微控制器(第2版) 課件 第12章 從模塊到項(xiàng)目_第4頁(yè)
嵌入式系統(tǒng)基礎(chǔ)與實(shí)踐-基于 ARM Cortex-M3 內(nèi)核的 STM32 微控制器(第2版) 課件 第12章 從模塊到項(xiàng)目_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第11章從模塊到項(xiàng)目STM32本章知識(shí)與能力要求理解項(xiàng)目與模塊的關(guān)系;理解從模塊到項(xiàng)目的設(shè)計(jì)思想;掌握由模塊構(gòu)成項(xiàng)目的方法。項(xiàng)目是由兩個(gè)或兩個(gè)以上的功能模塊組成的系統(tǒng),是功能模塊的有機(jī)融合。工作原理:處理輸入事件,經(jīng)微處理器加工處理,產(chǎn)生結(jié)果并輸出。其輸入事件往往來自傳感器、按鍵或觸屏等外圍設(shè)備,處理后,輸出信號(hào)用于驅(qū)動(dòng)電機(jī)等執(zhí)行機(jī)構(gòu)或顯示。第11章從模塊到項(xiàng)目第11章從模塊到項(xiàng)目目錄11.1從模塊到項(xiàng)目11.2項(xiàng)目實(shí)踐11.3面向?qū)ο蟮木幊趟枷?1.1如何從模塊到項(xiàng)目11.1.1項(xiàng)目需求分析11.1.2系統(tǒng)總體架構(gòu)設(shè)計(jì)11.1.3系統(tǒng)軟硬件設(shè)計(jì)11.1.1項(xiàng)目需求分析

對(duì)綜合項(xiàng)目進(jìn)行需求分析,明晰功能,明確一個(gè)系統(tǒng)/項(xiàng)目的輸入輸出,弄清楚項(xiàng)目/系統(tǒng)的應(yīng)用范圍或詳細(xì)的規(guī)格要求。這一階段思考得越詳細(xì)、考慮得越深入,對(duì)后期的開發(fā)就越有利。項(xiàng)目/系統(tǒng)需要達(dá)到的各項(xiàng)性能指標(biāo)有哪些;系統(tǒng)功能目前有哪些可行的解決方案;系統(tǒng)的功耗、體積有何要求;微控制器如何選型,傳感器采用數(shù)字的還是模擬的?輸出顯示設(shè)備是采用OLED還是上位機(jī)(PC)顯示?系統(tǒng)運(yùn)行時(shí)突發(fā)故障的處理。硬件實(shí)現(xiàn)成本高,但執(zhí)行效率高;軟件實(shí)現(xiàn)開發(fā)難度大,但成本低,采用自頂向下、逐步細(xì)分為功能相對(duì)獨(dú)立的模塊化設(shè)計(jì),會(huì)使得程序框架更為清晰。軟件和硬件的劃分系統(tǒng)功能模塊的劃分11.1.2系統(tǒng)總體架構(gòu)設(shè)計(jì)對(duì)系統(tǒng)進(jìn)行功能模塊劃分、軟件和硬件劃分。硬件模塊如電源模塊、通信模塊、存儲(chǔ)模塊、顯示模塊等多以具體功能進(jìn)行劃分,功能模塊之間應(yīng)滿足低偶合、高內(nèi)聚的要求應(yīng)用功能模塊高內(nèi)聚:一個(gè)C文件中函數(shù),只有相互之間的調(diào)用,而不存在調(diào)用其它文件中函數(shù)的情況實(shí)現(xiàn)硬件的初始化操作,通常使用相應(yīng)硬件名稱命名,如LED硬件驅(qū)動(dòng)模塊定義為led.c一種硬件對(duì)應(yīng)一個(gè)硬件驅(qū)動(dòng)模塊低耦合:模塊與模塊之間應(yīng)相對(duì)獨(dú)立,模塊與模塊之間的接口應(yīng)盡量少而簡(jiǎn)單。11.1.2系統(tǒng)總體架構(gòu)設(shè)計(jì)一個(gè)嵌入式系統(tǒng)通常包括兩大類模塊硬件驅(qū)動(dòng)模塊11.1.2系統(tǒng)總體架構(gòu)設(shè)計(jì)嵌入式系統(tǒng)應(yīng)遵循的編程原則1.每一個(gè)功能模塊都由源文件.c和頭文件.h組成2.每一個(gè).c源文件都對(duì)應(yīng)一個(gè)同名的.h頭文件3.使用頭文件共享函數(shù)、變量4.使用頭文件共享宏及類型定義5.防止頭文件被重復(fù)包含11.1.2系統(tǒng)總體架構(gòu)設(shè)計(jì)嵌入式系統(tǒng)應(yīng)遵循的編程原則1.每一個(gè)功能模塊都由源文件.c和頭文件.h組成.c源文件是每個(gè)功能模塊具體功能的實(shí)現(xiàn)。.h頭文件是對(duì)該模塊接口的聲明,對(duì)外提供接口供外部程序調(diào)用,2.每一個(gè).c源文件都對(duì)應(yīng)一個(gè)同名的.h頭文件把相對(duì)獨(dú)立的功能放在.c源文件中用代碼實(shí)現(xiàn),把需要對(duì)外使用的函數(shù)或變量聲明放在對(duì)應(yīng)的.h頭文件中供其它模塊使用。3.使用頭文件共享函數(shù)、變量將某模塊提供給其它模塊調(diào)用的函數(shù)、變量在對(duì)應(yīng)模塊的.h頭文件中用extern關(guān)鍵字聲明,而模塊內(nèi)的函數(shù)和全局變量應(yīng)在.c文件開頭部分用static關(guān)鍵字聲明。11.1.2系統(tǒng)總體架構(gòu)設(shè)計(jì)嵌入式系統(tǒng)應(yīng)遵循的編程原則4.使用頭文件共享宏及類型定義針對(duì)復(fù)雜的系統(tǒng),由于模塊較多,涉及到的文件多,模塊間全局變量也較多,可以將全局變量定義在一個(gè).h頭文件內(nèi)例如:將寄存器的位操作及常用的數(shù)據(jù)類型用typedef定義在頭文件中,方便以后調(diào)用以及移植修改。#ifndef__SYS_H#define__SYS_H #include"stm32f10x.h"#include"stdio.h" //位操作宏定義#defineBIT0 (0x0001)#defineBIT1 (0x0002)……#defineBIT30 (0x40000000)#defineBIT31 (0x80000000)11.1.2系統(tǒng)總體架構(gòu)設(shè)計(jì)嵌入式系統(tǒng)應(yīng)遵循的編程原則4.使用頭文件共享宏及類型定義

//常用的數(shù)據(jù)類型定義,采用宏定義方式,便于移植和更改#defineu8 uint8_t#defineu16 uint16_t#defineu32 uint32_t#defines8 int8_t#defines16 int16_t#defines32 int32_t#definebool _Bool#definefalse 0#definetrue !false

//結(jié)構(gòu)體定義typedefstruct{unsignedshortb0:1;unsignedshortb1:1;……unsignedshortb15:1;}REG16_TypeDef;/*位帶操作,實(shí)現(xiàn)51類似的GPIO控制功能*///IO口宏定義操作#definePAout((volatileREG16_TypeDef*)GPIOA_ODR_Addr)

//輸出#definePain((volatileREG16_TypeDef*)GPIOA_IDR_Addr)

//輸入

……#definePFout((volatileREG16_TypeDef*)GPIOF_ODR_Addr)

//輸出#definePfin((volatileREG16_TypeDef*)GPIOF_IDR_Addr)

/輸入#endif11.1.2系統(tǒng)總體架構(gòu)設(shè)計(jì)嵌入式系統(tǒng)應(yīng)遵循的編程原則5.防止頭文件被重復(fù)包含每個(gè)模塊都對(duì)應(yīng)有.h頭文件,為了避免頭文件被重復(fù)包含,導(dǎo)致編譯錯(cuò)誤,通常使用條件編譯命令#ifndef……#endif和#define宏定義實(shí)現(xiàn)。模塊化設(shè)計(jì)中頭文件的一般格式#ifndef__XXX_H#define__XXX_H #include"stm32f10x.h"#ifdefIN_XXX#defineXXX_EXT#else#defineXXX_EXT extern#endif#defineSpeaker PBout->b9#pragmapack(1) //偽指令#pragmapack(n)的作用是自定義字節(jié)對(duì)齊方式,n為字節(jié)個(gè)數(shù)

11.1.2系統(tǒng)總體架構(gòu)設(shè)計(jì)嵌入式系統(tǒng)應(yīng)遵循的編程原則5.防止頭文件被重復(fù)包含//結(jié)構(gòu)體定義typedefstruct {volatileu32Weight_ADC; volatileu8Device_BH[10]; volatileu16Alarm_Time;volatileu8Lock_State;}Device_Type; #pragmapack()//取消自定義字節(jié)對(duì)齊方式//聲明外部變量MAIN_EXTvolatileu8Device_State; MAIN_EXTvolatileu16Weight; MAIN_EXTvolatileu32Weight_Buf[20]; //聲明外部函數(shù)voidSys_Init(void);voidOn_MeasureProcess(void);voidOn_SpeakAlarm(void);#endif11.1.3系統(tǒng)軟硬件設(shè)計(jì)系統(tǒng)總體架構(gòu)設(shè)計(jì)確定后,接下來就需要進(jìn)行系統(tǒng)的詳細(xì)設(shè)計(jì),即具體的硬件設(shè)計(jì)和軟件設(shè)計(jì)。系統(tǒng)軟硬件設(shè)計(jì)硬件設(shè)計(jì)芯片的選型CPU引腳配置、線路layout設(shè)計(jì)等軟件設(shè)計(jì)繪制系統(tǒng)(控制)流程圖繪制子模塊流程圖繪制數(shù)據(jù)處理流程圖11.1.3系統(tǒng)軟硬件設(shè)計(jì)

可擴(kuò)充性和可移植性反映在系統(tǒng)架構(gòu)設(shè)計(jì)中,就是系統(tǒng)必須采用模塊化、層次化的設(shè)計(jì)思想。系統(tǒng)驅(qū)動(dòng)層硬件驅(qū)動(dòng)層I/O引腳的分配定時(shí)器……板級(jí)驅(qū)動(dòng)層系統(tǒng)應(yīng)用層調(diào)用硬件驅(qū)動(dòng)層、板級(jí)驅(qū)動(dòng)層提供的接口函數(shù)11.1.3系統(tǒng)軟硬件設(shè)計(jì)系統(tǒng)層次化模塊設(shè)計(jì)框圖將與硬件相關(guān)的模塊和與硬件無(wú)關(guān)的模塊明確區(qū)分開來;各模塊之間通過API函數(shù)進(jìn)行溝通;實(shí)現(xiàn)系統(tǒng)層次化、功能模塊化;有利于調(diào)試階段的系統(tǒng)整合以及后續(xù)的系統(tǒng)維護(hù)和升級(jí)改造。11.2項(xiàng)目實(shí)踐項(xiàng)目實(shí)踐01020311.2.1項(xiàng)目需求分析11.2.3系統(tǒng)硬件設(shè)計(jì)11.2.2項(xiàng)目總體架構(gòu)設(shè)計(jì)0411.2.4系統(tǒng)軟件設(shè)計(jì)11.2.1項(xiàng)目案例背景分析餐廚垃圾產(chǎn)出量大餐廚垃圾危害大引起重視,探索利用與管理方法餐廚垃圾的無(wú)害化處理及資源化利餐廚垃圾數(shù)字化管理平臺(tái),保障回收負(fù)責(zé)監(jiān)控的前端設(shè)備11.2.2項(xiàng)目總體架構(gòu)設(shè)計(jì)

系統(tǒng)總體架構(gòu)設(shè)計(jì)是把系統(tǒng)功能需求分析的結(jié)果轉(zhuǎn)換為系統(tǒng)體系結(jié)構(gòu),形成系統(tǒng)模塊結(jié)構(gòu)圖。需求分析功能分析系統(tǒng)分解架構(gòu)確立系統(tǒng)功能示意圖11.2.2項(xiàng)目總體架構(gòu)設(shè)計(jì)采用ST公司的STM32F103系列微處理器作為主控芯片,實(shí)現(xiàn)餐廚垃圾智能監(jiān)測(cè)系統(tǒng)的前端設(shè)備。功能基本數(shù)據(jù)采集稱重液位溫度數(shù)據(jù)處理通信控制驅(qū)動(dòng)開鎖加熱系統(tǒng)功能設(shè)置ID密碼時(shí)間零點(diǎn)標(biāo)定工作狀態(tài)指示與輸出報(bào)警重量超限液位超限溫度超限開鎖超時(shí)11.2.2項(xiàng)目總體架構(gòu)設(shè)計(jì)

嵌入式系統(tǒng)開發(fā)有裸機(jī)開發(fā)(單片機(jī)的開發(fā)模式)和基于嵌入式操作系統(tǒng)(RTOS)開發(fā)兩種,本系統(tǒng)模塊少,流程簡(jiǎn)單,采用基于裸機(jī)的開發(fā)更為適合。餐廚垃圾智能監(jiān)測(cè)系統(tǒng)設(shè)計(jì)框圖11.2.3系統(tǒng)硬件設(shè)計(jì)主要涉及各硬件模塊的I/O引腳配置、微控制器最小系統(tǒng)設(shè)計(jì)(晶振、調(diào)試和復(fù)位電路等)以及電源電路的設(shè)計(jì)等。硬件設(shè)計(jì)稱重測(cè)量電路液位測(cè)量電路蜂鳴器報(bào)警電路按鍵電路其它模塊11.2.3系統(tǒng)硬件設(shè)計(jì)稱重測(cè)量電路

稱重傳感器信號(hào)采用差分輸入模式從通道A輸入,與引腳INNA(通道A負(fù)輸入端)和INPA(通道A正輸入端)相連接。

利用HX711模塊采集廢棄油脂收集桶的壓力信號(hào),用于廢棄油脂的稱重。

HX711是一款專為高精度電子秤設(shè)計(jì)的24位AD轉(zhuǎn)換器芯片,內(nèi)部集成了穩(wěn)壓電源、時(shí)鐘振蕩器等AD轉(zhuǎn)換所必需的電路,具有集成度高、響應(yīng)速度快、抗干擾能力強(qiáng)等優(yōu)點(diǎn),提高了性能和可靠性。11.2.3系統(tǒng)硬件設(shè)計(jì)液位測(cè)量電路液位檢測(cè)采用投入式液位變送器,輸出4~20mA標(biāo)準(zhǔn)模擬電流信號(hào);AD轉(zhuǎn)換過程則由微控制器內(nèi)部集成的AD轉(zhuǎn)換器實(shí)現(xiàn);電路中的TVS管SMBJ5.0CA用于消除瞬時(shí)脈沖對(duì)電路的影響,經(jīng)過調(diào)理后的液位傳感器信號(hào)連接到微控制器的I/O引腳。11.2.3系統(tǒng)硬件設(shè)計(jì)蜂鳴器報(bào)警電路需要報(bào)警時(shí)微控制器經(jīng)I/O引腳送出低電平,三極管Q1導(dǎo)通,蜂鳴器報(bào)警按鍵模塊用于設(shè)置系統(tǒng)參數(shù),比如設(shè)置當(dāng)前日期、壓力傳感器的參數(shù)標(biāo)定等按鍵電路11.2.4系統(tǒng)軟件設(shè)計(jì)

系統(tǒng)必須采用模塊化、層次化的設(shè)計(jì)思想:將與硬件相關(guān)的部分和與硬件無(wú)關(guān)的模塊分開;各模塊之間的信息交互通過API來實(shí)現(xiàn)。

嵌入式系統(tǒng)的開發(fā)需要考慮兩個(gè)特性,一個(gè)是可擴(kuò)充性,一個(gè)是可移植性。驅(qū)動(dòng)層完全與硬件相關(guān)的硬件驅(qū)動(dòng)層與所用硬件平臺(tái)密切相關(guān),主要涉及微控制器I/O引腳的分配、微控制器內(nèi)部定時(shí)器、串口和ADC等功能模塊的使用,實(shí)現(xiàn)接口的驅(qū)動(dòng)功能,可移植性和可重用性較低;與底層硬件隔離的板級(jí)驅(qū)動(dòng)層通過調(diào)用底層硬件驅(qū)動(dòng)提供的API函數(shù)實(shí)現(xiàn)硬件隔離,用于隱藏具體的硬件特性,并提供API供系統(tǒng)應(yīng)用層或其它程序模塊調(diào)用。11.2.4系統(tǒng)軟件設(shè)計(jì)餐廚垃圾監(jiān)測(cè)系統(tǒng)工程文件架構(gòu)圖硬件驅(qū)動(dòng)層的主要是各硬件驅(qū)動(dòng)模塊的劃分和設(shè)計(jì),涉及到.c和.h的模塊化劃分思想。系統(tǒng)應(yīng)用程序?qū)拥脑O(shè)計(jì)主要是全局變量的定義、系統(tǒng)功能函數(shù)實(shí)現(xiàn)等,涉及到流程圖的繪制、C語(yǔ)言函數(shù)模塊規(guī)范化編寫規(guī)范等。每個(gè)功能模塊對(duì)應(yīng)一個(gè)相應(yīng)的頭文件。硬件驅(qū)動(dòng)層11.2.4系統(tǒng)軟件設(shè)計(jì)#defineIN_KEY#include"key.h"#include"delay.h"voidKEY_Init(void)//按鍵初始化函數(shù){GPIO_InitTypeDefGPIO_InitStructure;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);//按鍵

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(GPIOB,&GPIO_InitStructure);}//按鍵處理函數(shù)u8KEY_Scan(void){staticu8key_up=1;//按鍵按松開標(biāo)志 key.cif(key_up==1&&(KEY_SET==0||KEY_ADD==0||KEY_DEC==0||KEY_OK==0)){delay_ms(50);//去抖動(dòng)

key_up=0;if(KEY_SET==0) return1;if(KEY_ADD==0) return2;if(KEY_DEC==0) return3;if(KEY_OK==0) return4;}elseif(KEY_SET==1&&KEY_ADD==1&&KEY_DEC==1&&KEY_OK==1)

{if(key_up==0){key_up=1;}}

return0;//無(wú)按鍵按下}11.2.4系統(tǒng)軟件設(shè)計(jì)#ifndef__KEY_H#define__KEY_H

#include"sys.h"#ifdefIN_KEY#defineKEY_EXT#else#defineKEY_EXT extern#endifkey.h#defineKEY_SET PBin->b11#defineKEY_ADD PBin->b12#defineKEY_DEC PBin->b13#defineKEY_OK PBin->b14voidKEY_Init(void);//按鍵I/O引腳初始化u8KEY_Scan(void);//按鍵掃描函數(shù),用于判斷是哪個(gè)按鍵操作#endif11.2.4系統(tǒng)軟件設(shè)計(jì)

板級(jí)驅(qū)動(dòng)層劃分為:稱重測(cè)量模塊、藍(lán)牙或GSM通信控制模塊、功能菜單顯示模塊等u32HX711_ReadCount(void)//讀取HX711的AD數(shù)值{u32i,Count;HX711_SCK=0;

//使能ADCount=0;while(HX711_DT==1);

//AD轉(zhuǎn)換未結(jié)束則等待,否則開始讀取

for(i=0;i<24;i++){HX711_SCK=1;//PD_SCK置高(發(fā)送脈沖)

Count<<=1;

//下降沿來時(shí)變量Count左移一位,右側(cè)補(bǔ)零

HX711_SCK=0;

//PD_SCK置低

if(HX711_DT==1)Count++; }HX711_SCK=1;Count

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論