新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 從STM32中學(xué)到的工程建立方法

從STM32中學(xué)到的工程建立方法

作者: 時(shí)間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
這陣子通過STM32的學(xué)習(xí),學(xué)到的不僅僅是硬件的知識(shí),關(guān)于工程的結(jié)構(gòu)也學(xué)到了一些實(shí)用的東西。以前學(xué)習(xí)51的時(shí)候就是一個(gè)文件寫到底,把所有的函數(shù)寫到一個(gè)c文件中,所有的變量也定義在一個(gè)c文件中。

但是這陣子接觸到了模塊化的思想,每一個(gè)外設(shè),對(duì)應(yīng)著一個(gè)單獨(dú)的驅(qū)動(dòng)程序,包括一個(gè)c文件還有一個(gè)h文件。在建立工程之后,先建立組,包括USER,可以把主文件放在這個(gè)組里面;SYSTEM組,可以吧系統(tǒng)的一些通用型文件放在這個(gè)組里面;HARDWEAR組,可以把外設(shè)放在這個(gè)組里面。還可以建立一個(gè)組放說明性的文件。這樣使得整個(gè)工程的結(jié)構(gòu)十分的清晰,在調(diào)試程序的時(shí)候十分方便,在以后自己重新看這個(gè)工程的時(shí)候也可以很快的理清整個(gè)工程個(gè)脈絡(luò)。

本文引用地址:http://www.butianyuan.cn/article/201612/324409.htm

在主文件里面,也就是main.c文件里面,寫主程序的代碼,其他的函數(shù)通過調(diào)用頭文件的方式來調(diào)用。對(duì)于每一個(gè)外設(shè),都要有一個(gè)單獨(dú)的驅(qū)動(dòng)程序,這樣的話可以十分方便的進(jìn)行移植,記得在假期寫的MSP430驅(qū)動(dòng)12864液晶以及矩陣鍵盤的程序,修改了很少的地方就可以移植到STM32上進(jìn)行使用,大大的縮短了自己的開發(fā)時(shí)間。在電設(shè)正式比賽的時(shí)候,我寫程序基本上就是在復(fù)制粘貼,重新構(gòu)架程序的框架,因?yàn)橹暗挠?xùn)練中基本上把各個(gè)模塊的驅(qū)動(dòng)程序都寫好了。

在外設(shè)驅(qū)動(dòng)程序的H文件中,主要進(jìn)行函數(shù)的聲明,一定要切忌在頭文件中定義變量或者定義函數(shù),因?yàn)樵谝粋€(gè)工程中,同一個(gè)變量或者函數(shù)可以被聲明很多次,但是只可以進(jìn)行一次定義!因?yàn)轭^文件可能不只是在一個(gè)文件中調(diào)用,所以不可以出現(xiàn) 定義!否則編譯會(huì)出錯(cuò)的!函數(shù)的聲明就是函數(shù)聲明的一般形式。變量的聲明可以采用 extern int i;的形式。但是一定要注意extern int i;和extern int i=0;的區(qū)別,前者是聲明,后者是定義。只要是需要調(diào)用此外設(shè)驅(qū)動(dòng)函數(shù)和變量的文件中,就要加上#include。H的結(jié)構(gòu)一般為第一行寫#ifndef _xx_H,這句話判斷xx.h是否已經(jīng)被定義,第二行寫#define ,兩行的意思就是若果xx.h沒有定義,就定義xx.h,下面就是寫變量的聲明和函數(shù)的聲明了。最后一行一定要寫#endif,這是和ifndef和define想匹配的一個(gè)結(jié)構(gòu),不可以少。

#ifndef _LED_H

#define _LED_H

#define LED0 PAout(9)

extern u8 x;

void LED(void);

#endif

在外設(shè)的c文件中,主要是定義相關(guān)的變量,還有相關(guān)的驅(qū)動(dòng)函數(shù),本文件所涉及到的函數(shù)使用也要通過頭文件的調(diào)用進(jìn)行聲明。

所以,頭文件可以理解為就是各個(gè)c文件之間連接的橋梁。在各個(gè)c文件中才是變量以及函數(shù)的聲明。



關(guān)鍵詞: STM32工程建

評(píng)論


技術(shù)專區(qū)

關(guān)閉