|
今天2016的4月2日,所謂的大學(xué)周六,其實(shí)大學(xué)周末與否都沒(méi)什么區(qū)別,這幾天做著stm32,在我大二上學(xué)期剛開(kāi)始接觸單片機(jī),無(wú)非與大家是一樣的從51開(kāi)始,在近半年的時(shí)間,基本上已經(jīng)掌握了部分,而后有在學(xué)長(zhǎng)的帶領(lǐng)下接觸了avr的單片機(jī),然而內(nèi)心躁動(dòng)的我準(zhǔn)備開(kāi)始接觸stm32,因?yàn)樽约旱哪繕?biāo)早已經(jīng)定在嵌入式開(kāi)發(fā),希望自己能夠成功吧,所以以此來(lái)記錄自己的學(xué)習(xí)過(guò)程,本人處女座與天秤座的結(jié)合,沉醉于記憶。。。
前幾天在51自學(xué)網(wǎng)里看了stm32的視頻,花了近3天的時(shí)間,勉強(qiáng)學(xué)會(huì)了如何建立一個(gè)工程,光做筆記就做了近12頁(yè)的筆記,最大的感受就是太難了,與51和avr相差太大了,建個(gè)工程都這么難,相關(guān)的資料也特別難找,不過(guò)還是自己激勵(lì)自己,加油吧,要不然畢業(yè)之后連飯都沒(méi)得吃。!所以堅(jiān)持吧!
查詢(xún)了一些資料,大多數(shù)都說(shuō)要學(xué)這個(gè)要學(xué)會(huì)調(diào)用庫(kù)函數(shù),然而在沒(méi)有人的帶領(lǐng)下,這些太難了,盡管這只是開(kāi)始。所以自己現(xiàn)在瘋狂的搜羅著網(wǎng)上的資料,下一步就是點(diǎn)亮一個(gè)led,似乎所有的單片機(jī)都是以點(diǎn)亮led開(kāi)始的,恩,個(gè)人覺(jué)得很有道理。
好了不說(shuō)了,去做點(diǎn)實(shí)事吧,點(diǎn)亮led的過(guò)程。!
此時(shí)已經(jīng)是晚上的11點(diǎn),但是此時(shí)我還是抑制不住自己內(nèi)心的激動(dòng)之情,因?yàn)榻?jīng)過(guò)近一周的努力,終于可以順利的點(diǎn)亮了led的燈,或許高手們都不以為然,但是這就是一個(gè)漫長(zhǎng)的進(jìn)步過(guò)程,從中也學(xué)習(xí)了不少,當(dāng)然從一個(gè)技術(shù)控的角度講,每一次進(jìn)步都是對(duì)自己的莫大鼓舞,讓自己更有動(dòng)力走下去。
早上醒來(lái)已經(jīng)是9點(diǎn),最近老是加夜班,身體疲憊不堪,真的猶如那句廣告詞“感覺(jué)身體被掏空”。。。起來(lái)看看電影娛樂(lè)一下就已經(jīng)是中午,真的有時(shí)候自己感覺(jué)時(shí)間完全不夠用!吃過(guò)飯之后就立即投入到學(xué)習(xí)的過(guò)程,又去重復(fù)看了51自學(xué)網(wǎng)的stm視頻,還有騰訊里面劉洋老師的視頻,感觸頗深。有時(shí)候兩種途徑獲得信息就會(huì)抓住某些規(guī)律,此時(shí)在第三次觀看視頻之后,我覺(jué)得可以通過(guò)自己的一些方式來(lái)寫(xiě)程序,因?yàn)樗麄兊囊曨l里面對(duì)于主程序都是在一個(gè)文件夾下,所以自己在查詢(xún)網(wǎng)上的建議,跨越各大論壇,詢(xún)問(wèn)各大網(wǎng)友,明白這樣做是可行的!呵呵,有時(shí)候猜想就是靈感的體現(xiàn)。然后按照老師給的步驟書(shū)寫(xiě),發(fā)現(xiàn)不對(duì),因?yàn)槌绦蚓幾g不了。!作為一個(gè)編程的人,最恐懼的是編譯不了,還不知道怎么改,然后又是看視頻,又找實(shí)例,查固件庫(kù)。。。這樣大概六點(diǎn)吧,終于知道是函數(shù)沒(méi)使用對(duì),然后改!還是不成功,不知不覺(jué)又是2個(gè)小時(shí)過(guò)去。。。幸運(yùn)的是在微博上找到了一個(gè)相似的程序,在自己加以修改的情況下,終于實(shí)現(xiàn)了led的亮!。〈藭r(shí)的自己已經(jīng)是興奮之情溢于言表,沖動(dòng)的像只猴子抓住床柱不停搖晃著床,室友都有些驚訝,或許在他們眼里,這人是不是瘋了,但是無(wú)所謂啦,因?yàn)槲译x成功又進(jìn)了一步。!再一個(gè)或許有人不知道的是這種單片機(jī)只要學(xué)會(huì)編led后就會(huì)了接下來(lái)的,可以說(shuō)是進(jìn)步了不少!
或許成功總是那么捉弄人,自己編的程序能編譯,但是還是不能讓燈亮!激動(dòng)的心又被潑盆涼水,難道這東西認(rèn)人?不!然后自己又翻出譚浩強(qiáng)的c語(yǔ)言書(shū)復(fù)習(xí),查看結(jié)構(gòu)體和數(shù)組,還有函數(shù)這幾節(jié),收獲頗多!又反復(fù)調(diào)啊調(diào)啊。。。眼角飄進(jìn)來(lái)時(shí)間已經(jīng)是22:30分,這時(shí)間真是叫飛逝啊!然后調(diào)到函數(shù)的調(diào)用和聲明和定義這塊,突然又是靈感一現(xiàn),因?yàn)樽约嚎吹搅俗约褐皇锹暶髁撕瘮?shù),并沒(méi)有調(diào)用,所以會(huì)出錯(cuò),然后改正之后,果不其然,燈亮了。!燈亮了。!燈亮了。。∵@幾天的努力就是這樣一個(gè)現(xiàn)象,不過(guò),今天我滿(mǎn)足了。!
明天加油。!
----------------------------
哎呀!這一天沒(méi)有什么收獲,身心還疲憊! 凌晨來(lái)寫(xiě)這篇博文,或許這個(gè)道路只是自己的一篇篇日記了。。。在大學(xué)里有許多的東西都是身不由己,當(dāng)自己真正的踏入自己的大學(xué)的第一步就感受到了那種大學(xué)就是一個(gè)微型社會(huì)的表現(xiàn),這也就是一個(gè)初體驗(yàn),而當(dāng)如今自己深入其中的時(shí)候。。。哎。。。
早上起來(lái)的很早,但是身上似乎就沒(méi)有那種積蓄的力量來(lái)激勵(lì)自己起床,直到自己實(shí)在無(wú)法忍受口中的的那股氣息。。。本以為可以好好的在剩下的時(shí)間好好學(xué)習(xí)那塊開(kāi)發(fā)板,然而形式主義的大學(xué)各種安排,各種命令無(wú)法讓自己真真的安靜下來(lái)學(xué)習(xí)。。。因?yàn)樽约喝绻唤邮苣菢拥陌才,現(xiàn)有的所有硬件都會(huì)消失,最后也就功虧一簣,半途而廢。。。
達(dá)到特定地點(diǎn)之后本以為想通過(guò)自己的方式讓現(xiàn)有條件變得更好,然而事與愿違,整個(gè)地點(diǎn)的網(wǎng)絡(luò)被自己整癱瘓了,頭似乎就有些不高興,但沒(méi)辦法打碎的牙齒還是自己吞,就是這樣只有自己在這種環(huán)境下,才能成長(zhǎng),或許這就是逆境。。。
好吧,下一步就是stm32的話(huà)題。今天打開(kāi)電腦還是挺興奮的,因?yàn)樽蛱煲煌砩弦驗(yàn)槌晒Φ牡谝徊蕉鴽](méi)睡好覺(jué),而今早打開(kāi)餓第一幕,自己卻不知道學(xué)點(diǎn)什么,感覺(jué)什么都想學(xué),但自己的能力始終在那擺著,所以還是看視頻的節(jié)奏。今天定的是systick這一節(jié),然而看著是視頻的30多分鐘,但自己花的時(shí)間在一下午的時(shí)間還是那么多,真的是臺(tái)上一分鐘,臺(tái)下十年功。。?戳艘曨l,本以為按照庫(kù)文件里面按照gpio的方式配置,然而發(fā)現(xiàn)這種方法是失敗的,因?yàn)樵谧约航酉聛?lái)的時(shí)間里看著網(wǎng)友的留言,發(fā)現(xiàn)這些庫(kù)文件也有不靠譜的時(shí)候!之后自己找資料,又發(fā)現(xiàn),又嘗試,最大的感受就是,一個(gè)符號(hào)就會(huì)讓自己花費(fèi)很多的時(shí)間,或許這就是基礎(chǔ)!!!
有些人不懂我們有時(shí)興奮的像個(gè)瘋子,只有自己當(dāng)花費(fèi)一兩天的時(shí)間解決一個(gè)問(wèn)題后的感受才能明白。。。
--------------------------
今天能夠早些寫(xiě)下這篇,還是因?yàn)榻裉斓慕Y(jié)束也就預(yù)示著清明假期的結(jié)束,同時(shí)也是明天上課!有時(shí)自己感到大學(xué)學(xué)的東西太少,因?yàn)槔蠋熤v的太淺,知識(shí)太老,與社會(huì)嚴(yán)重脫節(jié),要想獲得一線(xiàn)資料只有通過(guò)自己的方式,到社會(huì)上汲取。長(zhǎng)而久之,自己對(duì)于這些必修的大學(xué)課程也就比較反感的,浪費(fèi)時(shí)間,最后只為那次的點(diǎn)名沒(méi)有遲到而獲得不重修的資格,贏得更多的時(shí)間來(lái)讓自己去學(xué)習(xí)別的東西!
昨天由于回寢太晚,室友鎖門(mén)了,自己磨不開(kāi)面子在旁邊寢室借宿了一晚,不過(guò)在夜晚是輾轉(zhuǎn)反側(cè),還有就是那個(gè)自己下達(dá)的任務(wù)沒(méi)完成,讓自己難以入眠!因?yàn)闄M躺在床上,實(shí)在不舒服,2點(diǎn)睡,四點(diǎn)就行,獨(dú)自一人漫步在宿舍的走廊等待著天明。。。
早上實(shí)在忍受不住身體的困倦,待室友打開(kāi)門(mén)之后,又回到自己的床上睡到9點(diǎn),到下午到工作地點(diǎn),又是與那個(gè)硬件奮斗,到處找資料,問(wèn)好友,逛論壇,貼吧。。。最后,找到一絲靈感,復(fù)制了一份博友的程序,發(fā)現(xiàn)成功了!這次沒(méi)有第一次的興奮,但還是有那么一絲的成就感,很慶幸自己能夠有這么好的運(yùn)氣。。。順便把自己復(fù)制的程序的網(wǎng)址發(fā)出來(lái):http://blog.csdn.net/yx_l128125/article/details/7884423
接下來(lái)的時(shí)間自己又看獨(dú)立鍵盤(pán),因?yàn)樽约簺](méi)有學(xué)習(xí)這個(gè)板子的經(jīng)驗(yàn),只有跟著視頻的腳步,或許過(guò)來(lái)人更有體會(huì),所以才會(huì)那樣安排吧!因?yàn)橐郧白约簩?duì)于51上的鍵盤(pán)花了很大一部分功夫在上面,而自己此次的32芯片也就來(lái)的比較快,大概一個(gè)小時(shí)的時(shí)間搞定了,此時(shí)自己感受到32芯片的調(diào)用庫(kù)函數(shù)的簡(jiǎn)潔與方便,如果是自己強(qiáng)行寫(xiě)寄存器代碼,那將是一個(gè)巨大的工作量。。。
整個(gè)一天,對(duì)于自己的收獲還算比較滿(mǎn)意,希望明天能夠繼續(xù)保持!
------------------------
由于某些原因,昨晚沒(méi)時(shí)間更新。。。
第一就是忙活了一下午,程序?qū)懗隽耍怯布䦂?zhí)行的就是有問(wèn)題,心難免會(huì)受傷,或許搞技術(shù)的就是這樣的一種境地。。。如今自己似乎患上了社交恐懼癥了,感覺(jué)跟機(jī)器打交道是那么的舒服,而每次遇到人之后,卻不知所措,交流也不是,不交流也不是,所以每次都盡量避開(kāi)人群。。。
言歸正傳,談?wù)勛蛱斓膶W(xué)習(xí)之路吧。首先前天粗略看了一下視頻,感覺(jué)這一章很混沌,就像自己學(xué)習(xí)c51的中斷的時(shí)候的同樣的感覺(jué),因?yàn)閭(gè)人學(xué)習(xí)過(guò)來(lái),發(fā)現(xiàn)基礎(chǔ)中偏難的就是那個(gè)中斷的過(guò)程,想當(dāng)初學(xué)51的時(shí)候,到處求人,問(wèn)一些大神,差不多花了近10天才明白;蛟S就是這樣給自己留下了陰影,所以在第一次看32的視頻的時(shí)候先是粗略看看,探探路,通過(guò)比較網(wǎng)上已有的視頻發(fā)現(xiàn)課時(shí)并不多。昨天回到工作地點(diǎn)靜下心來(lái)學(xué)習(xí),差不多一直坐了6個(gè)小時(shí)看視頻一步一步做。期間各種錯(cuò)誤,或許從一個(gè)初學(xué)者的角度來(lái)看這是夸張的,有些函數(shù)的結(jié)構(gòu)多余那么一個(gè)空格都是錯(cuò)誤的,讓我感到有些質(zhì)疑的是官方的固件庫(kù)中有很多的錯(cuò)誤,直接調(diào)用會(huì)報(bào)錯(cuò),自己又一步一步重新核實(shí),并改正。。。
昨天快結(jié)束的時(shí)候,程序編譯不錯(cuò),但是硬件的相應(yīng)有問(wèn)題,最后,還是放棄了,因?yàn)橛袝r(shí)腦袋的混沌會(huì)阻止自己的思想,直到自己今早再次捋了思路,發(fā)現(xiàn)在中斷服務(wù)函數(shù)的現(xiàn)象寫(xiě)反了,再次燒寫(xiě),就這樣。。。。成功了。。∮謮蜃约焊吲d一陣了!!
此次學(xué)習(xí)的是32的中斷,
自己寫(xiě)的按鍵相應(yīng)led的程序:
#include"stm32f10x.h"
void led_gpio_init();//led燈的gpio函數(shù)的聲明
void key_gpio_init();
void NVIC_Configration();//中斷控制初始化
void EXTI_Configration();//中斷初始化
void delay();//消抖延時(shí)初始化
void main()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//外部復(fù)用功能時(shí)鐘
key_gpio_init();//鍵盤(pán)函數(shù)的調(diào)用
led_gpio_init();
EXTI_Configration();//中斷函數(shù)的配置
NVIC_Configration();//中斷控制函數(shù)初始化
while(1);//等待
}
void led_gpio_init()
{
//led
GPIO_InitTypeDef GPIO_InitStructure;//定義結(jié)構(gòu)體
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//定義引腳速度
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;//定義引腳
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//定義輸出模式
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化
}
void key_gpio_init()
{
//key
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;//定義結(jié)構(gòu)體
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//定義引腳速度
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;//定義讀取引腳
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//定義上拉輸入模式
GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化
}
voidEXTI_Configration()//外部中斷初始化
{
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_ClearITPendingBit(EXTI_Line7);//////
//EXTI_ClearITpendingBit(EXTI_Line7); p的大小寫(xiě)
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource7);//連接外部中斷和引腳的關(guān)系/////
//后面語(yǔ)句為固件庫(kù)里面的有錯(cuò)誤GPIO_EXTILineConfig(GPIO_PortSource_GPIOB,GPIO_PinSource8);
EXTI_InitStructure.EXTI_Line = EXTI_Line7;//PB7在EXIT7上
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//模式為中斷
EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;//下降沿觸發(fā)
EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能
EXTI_Init(&EXTI_InitStructure);//初始化
}
voidNVIC_Configration()//嵌套向量中斷控制器
{
NVIC_InitTypeDefNVIC_InitStructure;//定義結(jié)構(gòu)體
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//選擇優(yōu)先級(jí)組
NVIC_InitStructure.NVIC_IRQChannel =EXTI9_5_IRQn;//////////////定義屬于第7組的中斷頻道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;//搶占式優(yōu)先級(jí)位
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//從優(yōu)先級(jí)位
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
NVIC_Init(&NVIC_InitStructure);////////初始化
}
void delay()//延時(shí)函數(shù)1ms
{
int i=720000;
for(;i>=0;i--);
}
voidEXTI9_5_IRQHandler()//中斷函數(shù)行使函數(shù)
{
if(EXTI_GetITStatus(EXTI_Line7)==SET)//判斷中斷是否觸發(fā)
{
EXTI_ClearITPendingBit(EXTI_Line7);//清空掛載在7線(xiàn)上的中斷
delay();//延時(shí)消抖
{
if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_7)==1)//引腳高低電平讀取函數(shù)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
//a7口為高電平
}
else
{
GPIO_SetBits(GPIOA,GPIO_Pin_7); //a7口為低電平
}
}
}
}
-----------------------------------------------
這幾天一直沒(méi)有更新!
只因?yàn)檫@幾天選路錯(cuò)誤,一直耽擱了不少行程。所以到處尋相關(guān)的例程,中途在騰訊里面的視頻看見(jiàn)有相關(guān)的視頻已經(jīng)全部傳入網(wǎng)上,然而自己看的額視頻是隨意傳上網(wǎng)上的,所以中間的視頻有特別的跳躍之處。而后在那一直卡著不能動(dòng)。然后呢?zé)o意之間在優(yōu)酷上又看到相關(guān)的視頻,發(fā)現(xiàn)中間有一節(jié)被跳過(guò),就是定時(shí)器中斷這一節(jié),而我這最近的學(xué)的就是pwm,由于需要用到定時(shí)器,所以pwm一直把我前進(jìn)的道路阻擋著,讓個(gè)人十分苦惱,所以在此時(shí)自己深切體會(huì)到學(xué)習(xí)的道路上有人指導(dǎo)是那樣的重要!!
經(jīng)過(guò)三天的掙扎,重新回到定時(shí)器的學(xué)習(xí)當(dāng)中,發(fā)現(xiàn)真的學(xué)習(xí)到了之前不知道的,所以學(xué)習(xí)就是這樣一個(gè)事情,。。《〞r(shí)器這塊需要注意的就是period和prescaler這兩個(gè)參數(shù)的關(guān)系。不過(guò)光是學(xué)習(xí)這個(gè)定時(shí)器自己也費(fèi)了不少周張,由于自己的定時(shí)器中斷服務(wù)函數(shù)出錯(cuò),也讓進(jìn)度變得緩慢下來(lái),好在最后改正了過(guò)來(lái)。
接下來(lái)就是pwm的學(xué)習(xí),發(fā)現(xiàn)還是有不少的難度,這東西或許對(duì)于老手來(lái)說(shuō)根本不值得一提,但是對(duì)新手來(lái)說(shuō)就是一大門(mén)檻,為此自己又是到處尋找論壇,到處找實(shí)例,好在各大博客的開(kāi)通對(duì)于這個(gè)模式的操作有很多的實(shí)例,還是挺好的,又是近2天的時(shí)間,最后還是解決,在這里面的時(shí)候,自己最開(kāi)始把ocinit當(dāng)成輸出比較初始化,實(shí)則是輸出頻道初始化的縮寫(xiě)。。。
好了不說(shuō)了,繼續(xù)下一步usart的學(xué)習(xí),發(fā)現(xiàn)這個(gè)塊還是挺難。。。
|
|