moerjielovecookie

Sawen_Blog

一个普通工科牲的博客网站
x
github
follow
email

STM32F407學習

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 的工作模式
image
每組 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 的輸出類型。
image
在輸入模式下不起作用。低 16 位有效。默認輸出模式下 IO 口為推挽輸出。

1.1.1.3 GPIO 端口輸出速度寄存器(GPIOx_OSPEEDR)#

image
也只用於輸出模式。

1.1.1.4 GPIO 端口上拉 / 下拉寄存器(GPIOx_PUPDR)#

image

  • 00:無上拉下拉
  • 01:上拉
  • 10:下拉
  • 11:保留

1.1.1.5 GPIO 輸入數據寄存器(GPIOx_IDR)#

image

1.1.1.6 GPIO 輸出數據寄存器(GPIOx_ODR)#

image

1.1.1.7 GPIO 端口置位 / 復位寄存器(GPIOx_BSRR)#

image

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 主要特性#

  1. 可配置 12 位、10 位、8 位、6 位分辨率
  2. 在轉換結束、注入轉換結束、發生模擬看門狗或溢出時產生中斷
  3. 單次和連續轉換模式
  4. 數據對齊以保證內置數據的一致性
  5. 獨立設置各通道採樣時間
  6. 不連續採樣模式
  7. ADC 電源:全速運行時為 2.4 V 到 3.6 V,慢速運行時為 1.8 V
  8. ADC 輸入範圍:$V_{REF-} \leq V_{IN}\leq V_{REF+}$
  9. 規則通道轉換期間可產生 DMA 請求

1.2.2 轉換順序#

當任意 ADCx 多通道以任意順序進行一系列轉換時就誕生了成組轉換,有兩種成組轉換類型:規則組和注入組。規則組最多允許 16 個輸入通道進行轉換,注入組允許最多 4 個輸入通道進行轉換。

1.2.2.1 規則組#

按照一定的順序成組轉換,常用。

1.2.2.2 注入組#

“注入” 即為打破原來的狀態,相當於中斷。如果在規則組轉換的過程中,注入組啟動,則注入組轉換完成後規則組才繼續轉換。
image

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 定時器的基本特性表如下: ![|455](ipfs://QmezCyADZUZwpuUCQftwB6pmgZyupStk8UCHjKUKRRo2jY) ## SPI SPI 全稱為 Serial Peripheral interface,串行外圍設備介面。SPI 的結構框圖如下: ![|535](ipfs://QmaKpmxfqkbGY5jPn96xt46ahN8ocjwPtPSUWRt6EDrhdb) 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) ![](ipfs://QmbXeQQ2Uqcecx3ohHDHJFdGwBPyJ2BNnjyCa1ijdwbEed) - 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]:控制波特率。 - ![](ipfs://QmYJ3Q21c8Sxrwopy11pESKP15g9boiAbiwsy6EU3i7hoq) - Bit 2:主模式選擇。0:從模式,1:主模式 - Bit 1:CPOL - Bit 0:CPHA #### SPI_SR(SPI 狀態寄存器) ![](ipfs://QmV5Ggb2fgjvNuSuy9mzMg7NqvkC4SC7cHKz4HGR8XLA2Q) - 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 數據寄存器) ![](ipfs://QmYDcgSDE4dmfbJANB4hjZxjrnpB6r4hx4zR4Uzpor68Nk) 當數據幀為 8 位時只使用低八位,16 位時使用整個寄存器
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。