關於STM32_GPIO的BSRR和BRR寄存器

首先,

typedef struct
{
  vu32 CRL;
  vu32 CRH;
  vu32 IDR;
  vu32 ODR;
  vu32 BSRR;
  vu32 BRR;
  vu32 LCKR;
} GPIO_TypeDef;

BSRR和BRR寄存器是32位的。

比較:

1)置GPIOA->BSRR低16位的某位爲'1',則對應的I/O端口管腳置'1';

     置GPIOA->BSRR低16位的某位爲'0',則對應的I/O端口管腳保持不變。 
2)置GPIOA->BSRR高16位的某位爲'1',則對應的I/O端口管腳置'0';

     置GPIOA->BSRR高16位的某位爲'0',則對應的I/O端口管腳保持不變。 
3)置GPIOA->BRR低16位的某位爲'1',則對應的I/O端口管腳置'0';

     置GPIOA->BRR低16位的某位爲'0',則對應的I/O端口管腳保持不變。

例如:

1)要設置端口A的D0、D5、D10、D11爲高,而保持其它I/O口不變,則
  GPIOA->BSRR = 0x0C21(0000 1100 0010 0001);

反過頭來再好好消化上述第1條特徵!!!

2)要設置端口A的D1、D3、D14、D15爲低,而保持其它I/O口不變,則
  GPIOA->BRR = 0xC00A;

假設有16位data需要寫入高8位的數據,則

GPIO_SetBits(GPIOA, data & 0xff00); 
GPIO_ResetBits(GPIOA, (~data & 0xff00)); 

也可以直接操作這兩個寄存器: 
GPIOA->BSRR = data & 0xff00; 
GPIOA->BRR = ~data & 0xff00;

發佈了24 篇原創文章 · 獲贊 28 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章