既然ODR能控制管腳高低電平,為什么還需要BSRR寄存器呢?
為什么需要BSRR寄存器
在單片機中,為了控制端口的輸出狀態,我們需要使用特定的寄存器。其中,ODR寄存器負責直接控制端口輸出電平,但是在某些情況下,我們需要更高效、更精準的控制電平狀態,這時就需要使用BSRR寄存器了。
BSRR寄存器全稱Bit Set/Reset Register,中文名稱為位設置/重置寄存器,其作用是能夠快速切換輸入輸出引腳的電平狀態。通過BSRR寄存器的配置,我們可以簡單、高效地設置或者重置對應的引腳電平,而無需進行其他操作。
BSRR寄存器的結構
BSRR寄存器總共32位,其中前16位是用于設置對應引腳的高電平,后16位是用于設置對應引腳的低電平。
在BSRR寄存器的低16位中,每4位對應一個引腳,以16進制的形式表示。例如:低16位的0號位(LSB)至3號位分別對應的引腳號為0~3,以此類推。對于高16位,它們與低16位的區別在于,它們控制對應引腳的低電平狀態,即為清零操作。
例如,如果要使引腳1變為高電平,那么我們可以給BSRR寄存器的第17位(低16位的1號位)寫入1,這將會把引腳1設置為高電平。如果想要將引腳1的電平設置為低電平,我們只需要給BSRR寄存器的第33位(高16位的1號位)寫入1,即可實現。
BSRR寄存器與ODR寄存器的區別
雖然ODR和BSRR都可以控制引腳的電平狀態,但是它們在實現上還是有一些區別的。
首先,ODR寄存器的寫入操作是瞬時的,即寫入后立即生效。而BSRR寄存器的寫入操作是有延遲的,需要在CPU時鐘上升沿時才能夠生效,因此,如果需要精準地控制電平狀態,我們需要根據CPU主頻等因素,精確地計算出延遲時間。
其次,在使用BSRR寄存器時,我們可以直接通過對應電平位的寫入操作,來實現針對某一位的設置或重置操作。這樣,在高頻率操作時,會比使用ODR寄存器更具有優勢,不僅可以提高效率,還能保證電平狀態的準確性。
還有一個重要區別是,在使用BSRR寄存器時,如果想要對某個引腳進行設置或重置,我們只需要對對應的位進行操作即可,而使用ODR寄存器時,我們需要同時對所有引腳進行設置或重置,這樣會導致效率降低。
綜上所述,BSRR寄存器與ODR寄存器相比,更加靈活高效,能夠更好地滿足實際需求,特別是在高頻率控制電平情況下更為顯著。
結語
在單片機的開發中,對端口的輸入輸出狀態控制是一項非常基礎的操作,因此理解和掌握相關的寄存器是非常重要的。在實際應用中,根據不同的場景需求,選擇合適的寄存器會使我們的開發更加方便、高效。
BSRR寄存器雖然只是一個小小的寄存器,但是在高頻率作業中,能夠發揮出強大的功能和優勢。因此,對于端口輸出狀態的控制需求得到了更好的滿足。
-
寄存器
+關注
關注
31文章
5372瀏覽量
121282 -
odr
+關注
關注
0文章
5瀏覽量
3583 -
bsrr
+關注
關注
0文章
2瀏覽量
1279
發布評論請先 登錄
相關推薦
ADS1298如果使用寄存器命令RESET去復位,那么其RESET管腳是接高電平還是低電平,還是懸空?
DAC7565 SYNC這個IO腳在常態應該置為低電平還是高電平?
DAC5681z從FPGA讀數據,為什么還需要一個DCLKP/N呢?
ADS8678是否可以把CS直接拉低或者拉高,SDI保持低電平,使得ADC一直保持在STDBY模式?
ADS62P49降低采樣率,使用50M采樣,除了“enable low speed mode”的寄存器,還需要更改其他的設置嗎?
接口的控制與狀態寄存器什么作用
請問tlv320dac3100設成喇叭輸出時,應該怎樣配置寄存器呢?
寄存器是什么意思?寄存器是如何構成的?
![<b class='flag-5'>寄存器</b>是什么意思?<b class='flag-5'>寄存器</b>是如何構成的?](https://file1.elecfans.com/web2/M00/00/2C/wKgZomasr0-AZeFEAAQm5QfLT8M176.png)
評論