STM32學習記錄(1)

2021-10-22 14:08:31 字數 3260 閱讀 2424

1.同時控制同個埠的多個led,在初始化的時候,使用或運算子"|",就不用再cv乙份**進行初始化了。

2.led,發光二極體

二極體:壓降,經過自己的時侯電壓會自動降低額定的伏數,0.3v或0.7v,

電流不能大於10ma,

限流電阻最小值=( 3300-300)/10 = 300歐姆。

3.引腳懸空

答:那麼電阻約等於無限大,且靜電積累會造成影響,導致引腳損壞。

4.按鍵設計的時候,為什麼要加乙個上拉電阻呢?而且電阻阻值設定為10k?

答:給微控制器輸入乙個確定的電平,不加上拉電阻,微控制器的輸入電壓沒有乙個參考物件,無法準確地判斷為高電平還是低電平。接地,地為參考物件,則為低電平,接vcc,有個上拉電阻,上拉電阻為參考物件,為高電平。同時,也增加了抗干擾能力。

5.推挽輸出作用

答:提高驅動電流。

6.上拉電阻設定為多大合適呢?

答:其實330/470/510/1k/2k /3k3/4kt/10k都是沒有問題的。

但是電阻值越小,其功耗會增加,例如330歐,通過的電流則是10ma,如果是電池進行供電,那麼其損耗就太大了,影響續航能力。但是電阻也不是越大越好,否則識別不了電流,所以選擇乙個折衷的方案,也可以說是乙個經驗值。

設定為10k,3.3v/10k=0.33ma。

弱上拉用10k,強一些用4.7k的。

5v一般用10k,3.3用4.7多一點。

總結:上拉電阻的選擇,上拉電阻選擇越大,功耗越低,但是要保證通過的電流能驅動外設和io口,上拉電阻選擇越小,功耗越大,但是要保證當為低電平時,io口端的電壓要在低電平的電壓值的範圍之內, 經驗值為4.7k到10k之間。

7.ttl識別電平如下圖所示

8.晶元外部晶振大小

32.768khz:看時鐘樹的框圖可知,是提供給晶元內部rtc時鐘的,32768剛好被256和128分頻,得到1hz,2的15次冪,即1s的定時。

8mhz:連線到晶元內部的鎖相環迴路,進行倍頻,提供給cpu。

需要注意使得是:掛載在不同匯流排的最高頻率是不一樣的,例如stm32f407,cpu最高168mhz。

apb1,高效能外圍裝置匯流排1,最高42mhz;

apb2,高效能外圍裝置匯流排2,最高84mhz;

中間有個分頻器,用來降低頻率,具體數值從時鐘樹進行檢視。

9.如何檢視外設掛載在哪條匯流排上面

答:具體從stm32f4xx_rcc.h標頭檔案進行檢視外設是哪條匯流排的。

10.mco1和mco2是什麼?

答:控制時鐘輸出,即也可以提供給外部輸出時鐘。

11.main函式之前,還有其他函式需要先執行嗎?

答:系統初始化函式,在啟動檔案中可以看到,systeminit。

裡面主要是配置pll,有個setsysclock()函式。

12.關於配置pll

答:在資料手冊的rcc——pll內容,有計算公式,使用外部時鐘的時候,如果使用外部晶振,那麼要注意好引數因子m/n/p/q的取值,例如在stm32f407的標頭檔案stm32f4xx.h中,所設定的hse為25m,而開發板提供的一般是8m,此時就要進行修改了,ctrl+f查詢到25000000的,修改為8000000,想要輸出想要的數值具體得看引數因子的設定 是否正確,只要涉及到倍頻,就會有計算公式。

繼續13.volatile關鍵字

volatile關鍵字分析,往往應用在三種場合

1)多執行緒程式設計共享全域性變數的時候,該全域性變數要加上volatile進行修飾,讓編譯器不要優化該變數

2)裸機程式設計的時候,某函式與中斷服務函式共享全域性變數的時候,該全域性變數要加上volatile進行修飾,讓編譯器不要優化該變數。

3)arm定義暫存器的時候,暫存器是指向乙個位址,要加上volatile進行修飾,讓編譯器不要優化該變數。

編譯器不要優化該變數也就是不對該資源進行保護,讓任何程式隨時都可以對它修改。

例如,我們在全域性變數定義了乙個變數a,在main函式中賦值為10,a=10;

又在乙個中斷服務函式中,設定a=11;那麼當執行完中斷服務後,a的值還是沒有改變,

因為預設對a進行了資源保護,要想在中斷服務函式修改a變數的值,必須在宣告a變數的時候在前面加上關鍵字volatile,讓變數a可讀可寫,可以被修改。

14.stm32任何乙個gpio引腳都能夠實現外部中斷,但是例如如下圖所示,pa0~pi0只能選擇乙個,stm32總共有16條gpio外部中斷線,即可以設定16個gpio外部中斷。所以在初始化gpio外部中斷的時候,還需要配置外部中斷線,

部分圖示如下,其中中斷優先順序分組只設定一次,防止出現混亂的現象。

只要修改中斷優先順序分組,發現硬體的搶占優先順序和響應優先順序都是發生變化,導致中斷管理紊亂。

中斷服務函式一般寫在stm32f4xx_it.c中,中斷向量名稱在啟動檔案中可以找到

最容易忘記的就是在去驅動開頭開啟系統時鐘!!!

16.搶占優先順序與響應優先順序區別

1)高優先順序的搶占優先順序是可以打斷正在進行的低搶占優先順序中斷的。

2)搶占優先順序相同的中斷,高響應優先順序不可以打斷低響應優先順序的中斷。

3)搶占優先順序相同的中斷,當兩個中斷同時發生的情況下,哪個響應優先順序高,哪個先執行。

4)無論是搶占優先順序還是響應優先順序,優先順序數值越小,就代表優先順序越高。

17.調整堆疊的大小

答:在啟動檔案裡面設定,如果棧大小不足,會導致棧溢位,堆比較少使用。

0x4000 也就是16384位元組,16384÷1024=16,即16kb, stm32的資料ram通常是滿足需求的。

18.值得一提是的,國外在寫底層相關函式的時候,例如sflash_lowlevel_init(void),採用lowlevel來描述。

stm32學習記錄

讓自己別忘了大學裡學的東西,那麼就把它記錄下下來,效率會比忘記然後重新再去找資料再重頭學高的多 先講講定時器的基礎定時功能 1.先做乙個形象的比喻 手錶 秒鐘 時鐘 定時器 定時器內部時鐘 定時器輸出時鐘 它們倆基本相同,不同的是,對於手錶是秒鐘和分鐘之間的進製是固定為60,而對於定時器,定時器內部...

stm32學習記錄(一)

介紹stm32什麼的就不說了,直接從點亮led開始吧 在進行程式設計前,需要知道 1.如果要使用stm32的io口,需要先對io口進行初始化。這個初始化函式包括以下幾個部分 gpio inittypedef gpio initstructure 定義乙個結構體,必須放在開頭 rcc ahb1peri...

STM32學習雜記(1)

野火的 零死角玩轉stm32 裡面的 流水燈的前世今生 中,三個led燈都是連線在乙個埠gpioc的,但是我買的微控制器開發板是乙個在gpioa 乙個在gpiod 野火的led.c的 是 在控制引腳的那行 他並沒有提到說是控制哪個引腳啊?後來我baidu之。2 gpio initstructure....