C語言程序設(shè)計(jì)之STM32,在這里輕松學(xué)習(xí)嵌入式編程

C語言是面向過程的偶惠,而C++是面向?qū)ο蟮?/p>

C和C++的區(qū)別:

C是一個(gè)結(jié)構(gòu)化語言春寿,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計(jì)首要考慮的是如何通過一個(gè)過程忽孽,對(duì)輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過程(事務(wù))控制)绑改。

C++,首要考慮的是如何構(gòu)造一個(gè)對(duì)象模型兄一,讓這個(gè)模型能夠契合與之對(duì)應(yīng)的問題域厘线,這樣就可以通過獲取對(duì)象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過程(事務(wù))控制。 所以C與C++的最大區(qū)別在于它們的用于解決問題的思想方法不一樣出革。之所以說C++比C更先進(jìn)造壮,是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”。

C與C++的最大區(qū)別:在于它們的用于解決問題的思想方法不一樣骂束。之所以說C++比C更先進(jìn)耳璧,是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”,而就語言本身而言展箱,在C中更多的是算法的概念旨枯。那么是不是C就不重要了,錯(cuò)混驰!算法是程序設(shè)計(jì)的基礎(chǔ)攀隔,好的設(shè)計(jì)如果沒有好的算法皂贩,一樣不行。而且昆汹,“C加上好的設(shè)計(jì)”也能寫出非常好的東西先紫。

小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 六九九,四七零筹煮,五九六 】遮精,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)败潦!裙內(nèi)有開發(fā)工具本冲,很多干貨和技術(shù)資料分享!


開發(fā)板實(shí)物圖

上圖是我購買的一塊STM32的開發(fā)板劫扒,大家可以發(fā)現(xiàn)這塊開發(fā)板是由一塊STM32主芯片和很多個(gè)外部設(shè)備組成的檬洞,有大家熟悉的USB、SD卡電源接口等沟饥,等還有大家以前沒有了解過的一些外設(shè)添怔。也就是我以前和大家講過的大腦和手腳,這樣才能形成一個(gè)體系贤旷,如果只有MCU广料,那么它如何去執(zhí)行任務(wù)呢?如果只有外設(shè)幼驶,那么誰去控制它們執(zhí)行呢艾杏?管理者和執(zhí)行者缺一不可。

在學(xué)習(xí)編程之前盅藻,讓我們先來了解一下STM32的內(nèi)部結(jié)構(gòu)购桑。

STM32晶振

每一款芯片都有晶振,晶振又稱為是MCU的“心臟”氏淑,不是通上電MCU就可以正常運(yùn)行了勃蜘,是晶振推動(dòng)程序的執(zhí)行的,這一點(diǎn)大家要注意假残,STM32不響51單片機(jī)只有一個(gè)晶振缭贡,我選的這一款芯片有5個(gè)時(shí)鐘源,為什么它需要這么多時(shí)鐘源呢守问?是為了適應(yīng)自帶的一些設(shè)備匀归,有的設(shè)備需要高頻的時(shí)鐘,而有些低頻的就可以滿足它們的使用要求了耗帕,如果都使用高頻的穆端,那么就會(huì)浪費(fèi)大量的能量,做過產(chǎn)品的同學(xué)肯定知道一個(gè)產(chǎn)品的功效是很嚴(yán)格的仿便,特別是出口產(chǎn)品体啰,如果功效不達(dá)標(biāo)攒巍,也就是造成能源的浪費(fèi)是無法進(jìn)行銷售的,這會(huì)造城很大的損失荒勇。所以這也是STM32在控制領(lǐng)域火爆的原因柒莉,它能很好地控制功效,也就是所謂的低功耗沽翔。

小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 六九九兢孝,四七零,五九六 】仅偎,無論你是大牛還是小白跨蟹,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具橘沥,很多干貨和技術(shù)資料分享窗轩!

STM32功能選擇

我一開始學(xué)習(xí)的時(shí)候就有一個(gè)疑問,開發(fā)板的引腳就那么多座咆,為什么能實(shí)現(xiàn)那么多功能呢痢艺?之后我才明白,STM32自帶了很多強(qiáng)大的功能介陶,但是引腳的數(shù)量有限堤舒,所以很多時(shí)候它們都是共用一些引腳,但是里面有個(gè)功能選擇器斤蔓,我們想使用哪個(gè)功能時(shí)植酥,就設(shè)置功能選擇器,這時(shí)他就會(huì)打通相應(yīng)通道弦牡,并且關(guān)閉其他通道。這樣就實(shí)現(xiàn)了功能的多樣性漂羊。

前一段時(shí)間和大家講過了驾锰,MCU是如何控制這些功能的,MCU中有很多地址走越,它是通過控制這些地址所對(duì)的數(shù)據(jù)從而實(shí)現(xiàn)控制設(shè)備的椭豫,這些地址對(duì)應(yīng)的就是功能,這些地址所對(duì)應(yīng)的內(nèi)容也被稱為寄存器旨指。但是如果直接去控制寄存器步驟會(huì)很繁瑣赏酥,每實(shí)現(xiàn)一個(gè)功能就要配置很多寄存器,量大而且容易配置出錯(cuò)谆构,所以這些芯片的的廠家為了方便大家編程裸扶,封裝了很多庫函數(shù),庫函數(shù)實(shí)現(xiàn)了很多功能初始化的分裝搬素,我們只要簡單調(diào)用他們就能配置好所要使用的寄存器了呵晨,但是寄存器還是建議大家學(xué)習(xí)一下的魏保,因?yàn)槟菢硬拍苷嬲私庑酒墓ぷ髟怼=o大家實(shí)現(xiàn)一個(gè)簡單的程序摸屠,點(diǎn)亮一個(gè)LED燈谓罗,這個(gè)真的是嵌入式中最簡單的程序了,就好比你伸手去開個(gè)燈那么簡單季二。我用寄存器和庫函數(shù)各實(shí)現(xiàn)一下個(gè)大家看看檩咱。

C

寄存器版本:

#define LED PFout(8) // 定義LED為相應(yīng)的管腳

void LED_Init(void) //初始化函數(shù)

{

RCC->AHB1ENR|=1<<5; //使能管腳時(shí)鐘

GPIO_Set(GPIOF,PIN8,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PD); //配置管腳功能

LED=0;//關(guān)閉LED燈 ,LED做過宏定義胯舷,要自己去定義LED代表管腳

}

int main(void) //主函數(shù)

{

Stm32_Clock_Init(336,8,2,7); //配置時(shí)鐘

LED_Init(); //初始化LED

LED=1; //點(diǎn)亮LED

}

庫函數(shù)版本:

void LED_Init(void) //初始化函數(shù)

{

GPIO_InitTypeDef GPIO_InitStructure; //定義管腳

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//打開管腳時(shí)鐘

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //選擇是第幾號(hào)管腳

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //配置管腳為輸出

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //配置管腳為推挽方式

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //配置管腳輸入輸出頻率為100MHz

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //配置管腳為下拉電阻

GPIO_Init(GPIOF, &GPIO_InitStructure); //初始化管腳刻蚯,按照上述配置

GPIO_ResetBits(GPIOF,GPIO_Pin_8); //·將輸出置為0,關(guān)閉LED燈

}

int main(void) //主函數(shù)

{

LED_Init(); //初始化LED

GPIO_SetBits(GPIOF,GPIO_Pin_8); //將輸出置為1需纳,打開LED燈

}

小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 六九九芦倒,四七零,五九六 】不翩,無論你是大牛還是小白兵扬,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具口蝠,很多干貨和技術(shù)資料分享器钟!

看了上述方式,很多人就說庫函數(shù)配置那么復(fù)雜妙蔗,明明就是寄存器版本好傲霸,其實(shí)用過之后你就會(huì)發(fā)現(xiàn),庫函數(shù)配置都是有規(guī)律的眉反,而寄存器的的配置都是沒有章法可循的昙啄,因?yàn)樵O(shè)備的多樣性,要配置的也是千差萬別寸五。但是寄存器執(zhí)行要比庫函數(shù)執(zhí)行效率高梳凛,你要問我為什么?因?yàn)閹旌瘮?shù)等于多了一個(gè)步驟梳杏,你是調(diào)用人家的函數(shù)韧拒,人家的函數(shù)是對(duì)寄存器的配置,所以速度顯而易見十性,當(dāng)然一般是感覺不出來的叛溢,除非是一丁點(diǎn)時(shí)間都不容易許浪費(fèi)的設(shè)備。

STM32

好了今天就介紹到這里劲适,從今天開始楷掉,我們也正式開始學(xué)習(xí)STM32了,以后的日子還望大家一起努力减响,覺得寫的還行的幫忙點(diǎn)個(gè)贊唄靖诗,不好的還望提出意見和批評(píng)郭怪,謝謝大家了。

這些是C/C++能做的

服務(wù)器開發(fā)工程師刊橘、人工智能鄙才、云計(jì)算工程師、信息安全(黑客反黑客)促绵、大數(shù)據(jù) 攒庵、數(shù)據(jù)平臺(tái)晨仑、嵌入式工程師胖喳、流媒體服務(wù)器歇终、數(shù)據(jù)控解茉继、圖像處理、音頻視頻開發(fā)工程師煌妈、游戲服務(wù)器坤塞、分布式系統(tǒng)焕济、游戲輔助等

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末慢味,一起剝皮案震驚了整個(gè)濱河市场梆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纯路,老刑警劉巖或油,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異驰唬,居然都是意外死亡顶岸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門叫编,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辖佣,“玉大人,你說我怎么就攤上這事搓逾×杓颍” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵恃逻,是天一觀的道長。 經(jīng)常有香客問我藕施,道長寇损,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任裳食,我火速辦了婚禮矛市,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诲祸。我一直安慰自己浊吏,他們只是感情好而昨,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著找田,像睡著了一般歌憨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上墩衙,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天务嫡,我揣著相機(jī)與錄音,去河邊找鬼漆改。 笑死心铃,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挫剑。 我是一名探鬼主播去扣,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼樊破!你這毒婦竟也來了愉棱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤捶码,失蹤者是張志新(化名)和其女友劉穎羽氮,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惫恼,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡档押,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了祈纯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片令宿。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖腕窥,靈堂內(nèi)的尸體忽然破棺而出粒没,到底是詐尸還是另有隱情,我是刑警寧澤簇爆,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布癞松,位于F島的核電站,受9級(jí)特大地震影響入蛆,放射性物質(zhì)發(fā)生泄漏响蓉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一哨毁、第九天 我趴在偏房一處隱蔽的房頂上張望枫甲。 院中可真熱鬧,春花似錦、人聲如沸想幻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脏毯。三九已至闹究,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抄沮,已是汗流浹背跋核。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叛买,地道東北人砂代。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像率挣,于是被迫代替她去往敵國和親刻伊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容