1 STM 32 相關外設介面學習#
1.1 GPIO#
STM 32 F 4 每組通用 GPIO 口由 7 個 32 位的寄存器控制,包括:
- 4 個 32 位配置寄存器(MODER、OTYPER、OSPEEDR、PUPDR)
- 2 個 32 位數據寄存器(IDR、ODR)
- 1 個 32 位置位、復位寄存器(BSRR)
- 1 個 32 位鎖定寄存器(LCKR)
- 2 個 32 位複用功能選擇寄存器(AFRH、AFRL)
1.1.1 寄存器#
1.1.1.1 GPIO 端口模式寄存器(GPIOx_MODER)(x=A.. I)#
用於控制 GPIO 的工作模式
每組 GPIO 下有 16 個 IO 口,兩個寄存器位控制 1 個 IO。PortA 的復位值是 0 xA 800 0000,對應的二進制為 1010 1000 0000 0000 0000 0000 0000 0000,可知 PA 15/14/13 都為複用功能模式,其餘端口為輸入模式。
1.1.1.2 GPIO 端口輸出類型控制器(GPIOx_OTYPER)#
用於控制 GPIO 的輸出類型。
在輸入模式下不起作用。低 16 位有效。默認輸出模式下 IO 口為推挽輸出。
1.1.1.3 GPIO 端口輸出速度寄存器(GPIOx_OSPEEDR)#
也只用於輸出模式。
1.1.1.4 GPIO 端口上拉 / 下拉寄存器(GPIOx_PUPDR)#
- 00:無上拉下拉
- 01:上拉
- 10:下拉
- 11:保留
1.1.1.5 GPIO 輸入數據寄存器(GPIOx_IDR)#
1.1.1.6 GPIO 輸出數據寄存器(GPIOx_ODR)#
1.1.1.7 GPIO 端口置位 / 復位寄存器(GPIOx_BSRR)#
1.2 ADC#
STM 32 F 4 擁有 3 個可獨立使用的 ADC,其中 ADC 1 和 ADC 2 可以組成雙重模式以提高採樣率。STM 32 的 ADC 是 12 位逐次逼近型的 ADC。包含 19 個通道,可測量 16 個外部和 2 個內部信號源以及 Vbat 通道的信號。這些通道的 A/D 轉換可在單次、連續、掃描、不連續採樣模式下進行。轉換後的結果存儲在一個 LSB 或 MSB 的 16 位數據寄存器中。
1.2.1 主要特性#
- 可配置 12 位、10 位、8 位、6 位分辨率
- 在轉換結束、注入轉換結束、發生模擬看門狗或溢出時產生中斷
- 單次和連續轉換模式
- 數據對齊以保證內置數據的一致性
- 獨立設置各通道採樣時間
- 不連續採樣模式
- ADC 電源:全速運行時為 2.4 V 到 3.6 V,慢速運行時為 1.8 V
- ADC 輸入範圍:$V_{REF-} \leq V_{IN}\leq V_{REF+}$
- 規則通道轉換期間可產生 DMA 請求
1.2.2 轉換順序#
當任意 ADCx 多通道以任意順序進行一系列轉換時就誕生了成組轉換,有兩種成組轉換類型:規則組和注入組。規則組最多允許 16 個輸入通道進行轉換,注入組允許最多 4 個輸入通道進行轉換。
1.2.2.1 規則組#
按照一定的順序成組轉換,常用。
1.2.2.2 注入組#
“注入” 即為打破原來的狀態,相當於中斷。如果在規則組轉換的過程中,注入組啟動,則注入組轉換完成後規則組才繼續轉換。
1.2.2.3 轉換速率#
ADC 轉換時間計算公式為 $$
T_{CONV}=Sample_Time+TSAR\times ADC_CLK
採樣時間由 ADC_SMPR 寄存器進行控制。
ADC_CLK 由 APB 2 分配產生,分頻係數由 RCC_CFGR 寄存器中的 PPRE 2 進行設置,2/4/6/8/16 分頻選項。
### 寄存器
## Timer
定時器的基本特性表如下:

## SPI
SPI 全稱為 Serial Peripheral interface,串行外圍設備介面。SPI 的結構框圖如下:

SPI 的引腳信息為
1. MISO(Master In / Slave Out):主設備數據輸入,從設備數據輸出。
2. MOSI(Master Out / Slave In):主設備數據輸出,從設備數據輸入。
3. SCLK(Serial Clock):時鐘信號,主設備輸出。
4. CS(Chip Select):從設備片選信號,主設備輸出。
==工作原理==:在進行 SPI 通信的從機和主機中都有一個 Shift Register,主機通過向它本身的移位寄存器寫入一個 Byte 的數據發起一次傳輸。移位寄存器通過 MOSI 將字節傳輸給從機,同時從機將字節的移位寄存器中的內容通過 MISO 傳輸到主機,這樣即可實現兩個移位寄存器中的數據交換。因此,如果只進行寫操作,主機忽略接收到的數據即可,如果主機想要讀取從機的數據,則發送一個空字節引發從機傳輸。
SPI 支持全雙工、半雙工、單工傳輸方式。
### SPI 工作模式
SPI 的工作模式由 CPOL 和 CPHA 決定,它們都有 0、1 兩種狀態,因此 SPI 有四種工作模式。
| 工作模式 | CPOL | CPHA | SCL 空閒狀態 | 取樣邊緣 | 取樣時刻 |
| ---- | ---- | ---- | -------- | ---- | ---- |
| 0 | 0 | 0 | 低電平 | 上升邊 | 奇數邊 |
| 1 | 0 | 1 | 低電平 | 下降邊 | 偶數邊 |
| 2 | 1 | 0 | 高電平 | 下降邊 | 奇數邊 |
| 3 | 1 | 1 | 高電平 | 上升邊 | 偶數邊 |
由表可知,CPOL 決定 SCL 空閒狀態時為高電平還是低電平,CPHA 決定是在時鐘的奇數邊緣取樣還是在偶數邊緣取樣。
### SPI 寄存器
#### SPI_CR 1(SPI 控制寄存器 1)

- Bit 11 DFF:數據幀格式,0:8 位數據幀,1:16 位
- Bit 10 RXONLY:只接收。0:全雙工,1:只接收
- Bit 7:幀格式。0:先發送 MSB,1:先發送 LSB。**通信時不應該修改此位**
- Bit 6:SPI 使能。0:關閉外設,1:使能外設。
- Bit 5-3:BR[2:0]:控制波特率。
- 
- Bit 2:主模式選擇。0:從模式,1:主模式
- Bit 1:CPOL
- Bit 0:CPHA
#### SPI_SR(SPI 狀態寄存器)

- 15-9 位保留,強制為 0
- Bit 8:幀格式錯誤。0:無幀格式錯誤,1:有幀格式錯誤
- Bit 7:忙標誌。0:未處於忙狀態,1:SPI 处于通信狀態或者 Tx buffer 不空
- Bit 1:發送 buffer 空。0:非空,1:空
- Bit 0:接收 buffer 非空。0:空,1:不空
#### SPI_DR(SPI 數據寄存器)

當數據幀為 8 位時只使用低八位,16 位時使用整個寄存器