微控制器系列——ST_LINK及中斷
1.1 ST_LINK連線(知識拓展)
1.1.1 參考網址:
1.2 報錯
報錯1:老師給了老版的st-link安裝包(具體版本忘了),安裝後,裝置管理器一直無法識別,後改用新版本安裝即能正常使用,但有意思的是,老版對有些人也是可以用的。具體原因不詳,能用就行了。
2.1 中斷
看完上述資料,仍然一臉懵逼,不明白所謂的中斷向量是什麼,所謂下降沿觸發的事件模式是什麼,也很想知道,所謂的中斷存在的意義是什麼,所以,繼續深挖。
什麼是中斷向量:
(1) 中斷向量是指中斷髮生以後,程式會按照中斷型別執行不同的中斷服務程式,這個中斷向量就是這些
順便明白了向量表:CPU是根據中斷號獲取中斷向量值,即對應中斷服務程式的入口地址值。因此為了讓CPU由中斷號查詢到對應的中斷向量,就需要在記憶體中建立一張查詢表,即中斷向量表(在32位保護模式下該表稱為中斷描述符表)。
突然聯想到,當初莫名其妙加入的庫中,有這樣的介紹:
大致知道他跟中斷有關,查了一下,記住這句話就行了:這是一個中斷處理檔案,_it結尾,就是interrupt(中斷)的意思。而且不能過於拘泥,因為發現有的論壇中提出:最近在寫stm32的中斷示例程式,發現main.c主檔案沒有#include“stm32f10x_it.h”檔案,我寫的中斷函式也能正常執行,為什麼會這樣呢,求大神能解釋一下。
下降沿觸發的事件模式
簡單查了查,感覺這個時候百度文庫最靠譜:
簡單和前面文獻中的知識聯想,其實就是高低電平變化的事件。
中斷存在的意義是什麼
(1) 找到一篇在我理解範圍內,令我瞬間將所有散亂的思緒連起來的簡短文章:
其中有兩句話值得回味:
- 中斷是一種處理器與外設進行通訊的機制。
- 中斷是“上層應用”與“底層程式碼”的“分割邊界”。
(2)第二篇
其開頭段簡直不要太....:
所有的事物都是依靠中斷來解決問題的。計算機更是如此,依靠時鐘發生器,人為的設定沒幾個時鐘週期做一個任務,不管是否做完,一旦規定的時間到了,那麼就要強制“中斷”,以作下一個任務……就這樣,直道所有的任務都作過了(但不一定都做完畢),再接著做第一個沒有做完的任務,就這樣走而復始迴圈工作。完成所謂的“多工”。
要不然,一個cpu,如果即能一邊打字,一邊看到螢幕呢?這就是一個cpu核心,不斷地一會檢測鍵盤,一會檢測螢幕…… 還有就是軟中斷,具體詳細的細節,可以參考微機原理。(本段來自 wlf_go 的CSDN 部落格 )
3.1 實戰
因為了解上面那麼多其實只是一個插曲,目的還是想簡單瞭解一下綜合知識和背景,現在以dht11溫溼度感測器進行實戰(其實就是根據原始碼自己理一遍思路)。
還是採取樹形的結構,從應用函式到底層庫。
3.1.1 main.c
對於溫溼度感測器,應用就是讀取資料,其在主函式中的呼叫如圖:
進入定義:
理一下程式碼思路:
(1)buffer 傳進來的是陣列首地址
原因;
DHT11data資料格式:
一次傳輸40位資料=8bit溼度整數資料+8bit溼度小數資料+8bint溫度整數資料+8bit溫度小數資料+8bit校驗位
(2)dht11_reset()
過程對應於:(dht11百度文庫應用文件:
(3)在繼續時,突發好奇,想了解其中頻繁見到的assert——param函式:
作用:在韌體庫中,它的作用就是檢測傳遞給函式的引數是否是有效的引數
(4)dht11_scan:
由於直接看原始碼,可以看懂原始碼但不理解思路,所以找到了一篇關於GPIO的文章
找到:GPIO_ReadInputDataBit(GPIOx,GPIO_Pin_y);//讀取單個輸入埠的資料
(5)唯一不明白的是,在很多函式中,都存在 while(*==reset),while(*==set),不過具體函式功能都看得出來,對於這個程式碼的理解不是很清楚。
(6)到此有個最大的疑惑讓我莫名其妙:
看原始碼是因為覺得裡面會存在終端的問題,因為在此之前我一直以為感測器和微控制器通訊是串列埠通訊,因而會存在終端問題,然而現實是........他連串列埠標頭檔案都不包括,只是將引腳模式修改過.......所以我看原始碼看半天,只是修改了誤區,稍微瞭解了dht11這個感測器。
(7)PS:寫部落格是覺得有些東西記在電腦上查詢不方便,所以如果真的有大佬默默無聞的看到這裡,求放過。下午有時間去用串列埠通訊,真正去領悟一下中斷。另外:在修改原始碼的前提下使用OLED,簡直不要太簡單,不過就是對於其物理上的理解一點都沒有。