1. 程式人生 > >stm32啟動方式+上(下)拉電阻 二合一

stm32啟動方式+上(下)拉電阻 二合一

最近做stm32專案,糾結過其啟動方式。
看到篇不錯的文章,轉載一下。原文格式不太好,內容也有很多奇怪的地方(尤其是第二篇,就先認為原文是原創,只是作者的思路我不懂吧),都一一刪改。想看原文的朋友連結如下:
http://www.ithao123.cn/content-3065243.html Duanxx的STM32學習: 啟動模式,BOOT0和BOOT1詳解
http://bluefish.blog.51cto.com/214870/1239098 上拉電阻與下拉電阻的作用

所謂啟動,一般來說就是指我們下好程式後,重啟晶片時,SYSCLK的第4個上升沿,BOOT引腳的值將被鎖存。使用者可以通過設定BOOT1和BOOT0引腳的狀態,來選擇在復位後的啟動模式。

啟動方式

啟動方式(漢)

Main Flash memory是STM32內建的Flash,一般我們使用JTAG或者SWD模式下載程式時,就是下載到這個裡面,重啟後也直接從這啟動程式。

System memory從系統儲存器啟動,這種模式啟動的程式功能是由廠家設定的。一般來說,這種啟動方式用的比較少。系統儲存器是晶片內部一塊特定的區域,STM32在出廠時,由ST在這個區域內部預置了一段BootLoader,也就是我們常說的ISP程式,這是一塊ROM,出廠後無法修改。
一般來說,我們選用這種啟動模式時,是為了從串列埠下載程式,因為在廠家提供的BootLoader中,提供了串列埠下載程式的韌體,可以通過這個BootLoader將程式下載到系統的Flash中。但是這個下載方式需要以下步驟:

  1. Step1:將BOOT0設定為1,BOOT1設定為0,然後按下復位鍵,這樣才能從系統儲存器啟動BootLoader
  2. Step2:最後在BootLoader的幫助下,通過串列埠下載程式到Flash中
  3. Step3:程式下載完成後,又有需要將BOOT0設定為GND,手動復位,這樣,STM32才可以從Flash中啟動
    可以看到,利用串列埠下載程式還是比較的麻煩,需要跳帽跳來跳去的,非常的不注重使用者體驗。

Embedded SRAM 內建SRAM,既然是SRAM,自然也就沒有程式儲存的能力了,這個模式一般用於程式除錯。
假如我只修改了程式碼中一個小小的地方,然後就需要重新擦除整個Flash,比較的費時,可以考慮從這個模式啟動程式碼(也就是STM32的記憶體中),用於快速的程式除錯,等程式除錯完成後,在將程式下載到SRAM中。

因此,比較常見的選擇方式是BOOT0接地,當然啦,如果自己畫stm32系統板的話,最好也要留下其他兩個啟動方式。對於大型程式使用SRAM進行除錯還是很有必要的。

下面講一下上拉電阻與下拉電阻的區別:
上拉電阻就是把不確定的訊號通過一個電阻鉗位在高電平,此電阻還起到限流的作用。同理,下拉電阻是把不確定的訊號鉗位在低電平。上拉電阻是指器件的輸入電流,而下拉指的是輸出電流。
那麼在什麼時候使用上、下拉電阻呢?
1、當TTL電路驅動CMOS電路時,如果TTL電路輸出的高電平低於CMOS電路的最低高電平(一般為3.5V),這時就需要在TTL的輸出端接上拉電阻,以提高輸出高電平的值。
2、OC閘電路必須加上拉電阻,以提高輸出的搞電平值。
3、為加大輸出引腳的驅動能力,有的微控制器管腳上也常使用上拉電阻。
4、在CMOS晶片上,為了防止靜電造成損壞,不用的管腳不能懸空,一般接上拉電阻降低輸入阻抗,提供洩荷通路。
5、晶片的管腳加上拉電阻來提高輸出電平,從而提高晶片輸入訊號的噪聲容限,增強抗干擾能力。
6、提高匯流排的抗電磁干擾能力。管腳懸空就比較容易接受外界的電磁干擾。
7、長線傳輸中電阻不匹配容易引起反射波干擾,加上下拉電阻是電阻匹配,有效的抑制反射波干擾。
另外,上拉電阻阻值的選擇原則包括:
1、從節約功耗及晶片的灌電流能力考慮應當足夠大;電阻大,電流小。
2、從確保足夠的驅動電流考慮應當足夠小;電阻小,電流大。
3、對於高速電路,過大的上拉電阻可能邊沿變平緩。
綜合考慮以上三點,通常在1k到10k之間選取。對下拉電阻也有類似道理

關於上拉電阻,看圖。

作為輸入接VCC等於1,接GND=0。
這裡寫圖片描述
如果按鍵短路(按下)電阻為零,按鍵按下,Out=0,當按鍵斷開,Out=?顯然當Out懸空輸出VCC,這可以用儀表測量。這個VCC就是靠R1“上拉”產生的,顧名思義,R1就是上拉電阻。上拉電阻的大小,取決於輸出接負載的需要,通常邏輯電路對高電平輸出阻抗很大,要求輸出電流很小,在上拉電阻上壓降可以忽略,當然上拉電阻不能太大,否則就不能忽略了。

實際電路還有這種結構
這裡寫圖片描述
這裡的R1也是上拉電阻。

微控制器P0口輸出結構一部分電路類似下圖,實際可能用的是場效電晶體。
這裡寫圖片描述
當Q1,Q2分別導通,可以對外輸出0和1,當Q1,Q2都不導通時?要想輸出1,咋辦?外接上拉電阻!

為什麼要使用拉電阻:
一般作單鍵觸發使用時,如果IC本身沒有內接電阻,為了使單鍵維持在不被觸發的狀態或是觸發後回到原狀態,必須在IC外部另接一電阻。

關於下拉電阻,用得少,道理和上面一樣,只不過通過電阻“下拉”到GND。

這裡不再詳細說明

數位電路有三種狀態:高電平、低電平、和高阻狀態,有些應用場合不希望出現高阻狀態,可以通過上拉電阻或下拉電阻的方式使處於穩定狀態,具體視設計要求而定!一般說的是I/O埠,有的可以設定,有的不可以設定,有的是內建,有的是需要外接,I/O埠的輸出類似與一個三極體的C,當C接通過一個電阻和電源連線在一起的時候,該電阻成為上C拉電阻,也就是說,如果該埠正常時為高電平,C通過一個電阻和地連線在一起的時候,該電阻稱為下拉電阻,使該埠平時為低電平。
上拉電阻是用來解決匯流排驅動能力不足時提供電流的。一般說法是拉電流,下拉電阻是用來吸收電流的,也就是灌電流。