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)焕济、游戲輔助等