# BSRR、BRR、ODR暫存器控制GPIO
----
### 在每一種晶片中,每個腳位的輸出、輸入設定都是可以依靠暫存器的,當暫存器中的某個位置被設置為特定的數值後,就可以對腳位進行設定
----
### 如何做出這種效果?
<iframe src="https://giphy.com/embed/U8avBGg03o633vVRmY" width="480" height="270" frameBorder="0" class="giphy-embed" allowFullScreen></iframe><p><a href="https://giphy.com/gifs/U8avBGg03o633vVRmY"></a></p>
----
# ARDUINO
### 在ARDUINO中我們只能這樣做,非常簡單,因為都包好好了
```
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
```
----
# STM32
```
void mycodes(void){
while(1){
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5); //PB5 High、LOW
HAL_Delay(500);
}
}
```
----
### 那如果要做這樣呢?
<iframe src="https://giphy.com/embed/1eoTx9ET46Hm1HB1kM" width="480" height="270" frameBorder="0" class="giphy-embed" allowFullScreen></iframe><p><a href="https://giphy.com/gifs/1eoTx9ET46Hm1HB1kM"></a></p>
----
### 先在STM32cube內選好我們要使用的腳位

----
### 正常來說我們會這麼做,一個一個設定
```
void mycodes(void){
while(1){
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
HAL_Delay(50);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
HAL_Delay(50);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_SET);
HAL_Delay(50);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,GPIO_PIN_SET);
HAL_Delay(50);
}
}
```
----
### 很明顯的這樣寫太過於麻煩
----
# using BSRR、BRR
### 但是當我們透過操縱BSRR、BRR暫存器來操控GPIO後簡單多了
```
void mycodes(void){
int i;
while(1){
for(i=0;i<=15;i++)
{
GPIOB -> BSRR = (1<<i);
HAL_Delay(50);
}
for(b=14;b>=1;b--)
{
GPIOB -> BRR = (1<<i);
HAL_Delay(50);
}
}
}
```
----
### BSRR、BRR只會對於單一腳位更改其HIGH、LOW
### 假如今天你塞了GPIOB->BSRR = 5,以二進制來說它是0101,所以PB0和PB2會被點亮,其餘IO不論原先是HIGH或LOW會保持原先的狀態就算原本PB1、PB3是亮的也不會因此變暗,並不會被影響,ODR反之
----
# using ODR
<iframe src="https://giphy.com/embed/asNZqj4rVGguBgekJt" width="480" height="270" frameBorder="0" class="giphy-embed" allowFullScreen></iframe><p><a href="https://giphy.com/gifs/asNZqj4rVGguBgekJt"></a></p>
```
void mycodes(void){
int i;
while(1){
for(i=0;i<=15;i++)
{
GPIOB -> ODR = (1<<i);
HAL_Delay(50);
}
for(b=14;b>=1;b--)
{
GPIOB -> ODR = (1<<i);
HAL_Delay(50);
}
}
}
```
----