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