一、GPIO
1、概念
通用輸入輸出口;開發者可以根據自己的需求將其配置為輸入或輸出模式,以實現與外部設備進行數據交互、控制外部設備等功能。簡單來說,GPIO 就像是計算機或微控制器與外部世界溝通的 “橋梁”。
2、工作模式
工作模式 | 性質 | 特征 |
上拉輸入 | 數字輸入 | 可讀取引腳電平,內部連接上拉電阻,懸空時默認高電平 |
下拉輸入 | 數字輸入 | 可讀取引腳電平,內部鏈接下拉電阻,懸空時默認低電平 |
模擬輸入 | 模擬輸入 | GPIO無效,引腳直接接入內部ADC |
浮空輸入 | 數字輸入 | 可讀取引腳電平,若引腳懸空,則電平不穩定 |
推挽輸出 | 數字輸出 | 可輸出引腳電平,高電平為VDD,低電平接VSS |
開漏輸出 | 數字輸出 | 可輸出引腳電平,高電平為高阻態,低電平接VSS |
復用推挽輸出 | 數字輸出 | 由片上外設控制,高電平為VDD,低電平接VSS |
復用開漏輸出 | 數字輸出 | 由片上外設控制,高電平為高阻態,低電平接VSS |
3、外設寄存器
外設寄存器 | 功能 | 模式選擇 |
GPIOx_MODER(GPIO端口模式寄存器) | 用于配置 GPIO 引腳的工作模式,每個 GPIO 引腳對應 2 位,通過設置這 2 位的值,可以將引腳配置為不同的模式。 | 00:輸入模式;01:通用輸出模式;10:復用功能模式;11:模擬模式。 |
GPIOx_OTYPER(GPIO端口輸出類寄存器) | 當 GPIO 引腳配置為輸出模式(通用輸出或復用功能輸出)時,該寄存器用于選擇輸出類型,即推挽輸出或開漏輸出。每個 GPIO 引腳對應 1 位。 | 0:推挽輸出;1:開漏輸出。 |
GPIOx_OSPEEDR(GPIO端口輸出速度寄存器) | 用于配置 GPIO 引腳的輸出速度,每個 GPIO 引腳對應 2 位。輸出速度影響引腳的信號上升和下降時間,不同的速度適用于不同的應用場景。 | 00:低速;01:中速;10:高速;11:超高速。 |
GPIOx_PUPDR(GPIO端口上拉/下拉) | 用于配置 GPIO 引腳的上拉或下拉電阻,每個 GPIO 引腳對應 2 位。上拉或下拉電阻可以確保引腳在沒有外部信號輸入時保持穩定的電平狀態。 | 00:無上下拉;01:上拉;10:下拉;11:保留。 |
GPIOx_IDR(GPIO端口輸入數據寄存器) | 用于讀取 GPIO 引腳的輸入電平狀態。該寄存器是只讀的,每個引腳對應 1 位,讀取相應的位可以獲取該引腳當前的電平(高電平或低電平)。 | 無 |
GPIOx_ODR(GPIO端口輸出數據寄存器) | 用于設置 GPIO 引腳的輸出電平狀態。當 GPIO 引腳配置為輸出模式時,向該寄存器的相應位寫入?0 ?或?1 ?可以將引腳設置為低電平或高電平。 | 無 |
GPIOx_BSRR(GPIO端口置位/復位寄存器) | 用于原子性地設置或清除 GPIO 引腳的輸出電平。該寄存器分為兩部分,低 16 位用于置位(將引腳設置為高電平),高 16 位用于復位(將引腳設置為低電平)。 | 無 |
GPIOx_BRR(GPIO端口復位寄存器) | 專門用于將 GPIO 引腳的輸出電平復位(設置為低電平)。該寄存器的每一位對應一個 GPIO 引腳,向相應的位寫入?1 ?可以將對應的引腳設置為低電平。 | 無 |
二、TIM
1、概念
定時器是一種能夠對時間進行奇數的硬件設備。它可以按照預設的規則對時鐘信號進行計數,當計數值達到設定的閾值時,會觸發相應的事件,如產生中斷、輸出特定的信號等。通過對定時器的配置和使用,開發者可以實現精確的時間控制,滿足各種不同的應用需求。
2、工作原理
定時器的核心是一個計數器,它會在時鐘信號的驅動下進行計數操作。時鐘信號可以來自于內部時鐘源(如系統時鐘),也可以來自外部時鐘源。計數器從初始值開始,每接收到一個時鐘脈沖,計數值就會加1(或減1,具體取決于定時器的工作模式)。當計數值達到預設的自動重載函數值時,計數器會產生溢出事件,根據定時器的配置,可能會觸發中斷、更新輸出信號等。?
?計數模式:①遞增計數模式;②遞減計數模式;③中心對齊模式。
?內部工作框圖:
3、PWM脈沖寬度調劑
1、概念:
PWM是一種對模擬信號電平進行數字編碼的方法。通過定時器產生一系列脈沖信號,這些脈沖信號的頻率通常保持不變,但是脈沖的寬度(即高電平持續的時間)可以根據需要進行調整。通過改變脈沖的寬度,可以等效地控制輸出信號的平均電平,從而實現對一些設備的模擬控制。
2、工作原理:
定時器是產生PWM信號的核心部件。定時器內部有一個計數器,它會在時鐘信號的驅動下不斷計數。同時,還有一個比較寄存器,用于存儲一個比較值。當計數器的值小于比較值時,定時器輸出高電平;當計數器的值大于比較值時,定時器輸出低電平。計數器計數到自動重裝載值后會重新歸零,開始下一個計數周期。通過改變比較寄存器的值,就可以更改脈沖的寬度。
3、關鍵參數:
周期:
pwm信號完成一個完整的脈沖循環所需的時間,它決定了pwm信號的頻率。周期的倒數就是頻率。在定時器中,周期通常由自動重裝載值和時鐘頻率共同決定。
占空比:
指的是脈沖信號中高電平持續時間與整個周期的比值,通常用百分比表示。通過改變占空比,可以控制pwm信號的平均電平。
4、外設寄存器?
外設寄存器 | 功能 | 具體功能位及其作用 | |||
TIMx_CR1(定時器控制寄存器1) | 該寄存器用于對定時器的基本工作模式和運行狀態進行配置和控制。 | 計數器使能位:當該位置為 1 時,定時器計數器開始計數;置為 0 時,計數器停止計數。 | 計數器方向位:用于設置計數器的計數方向,0 表示向上計數(從 0 開始遞增到自動重裝載值),1 表示向下計數(從自動重裝載值開始遞減到 0)。 | 自動重裝載預裝載使能位:若該位置 1,自動重裝載寄存器(TIMx_ARR )的值會在更新事件發生時才被傳送到影子寄存器;置 0 時,TIMx_ARR ?的值會立即生效 | 單位脈沖模式位:置 1 時,定時器在發生一次更新事件后停止計數,常用于只需要單次定時操作的場景。 |
TIMx_CCMR1(定時器捕獲/比較模式寄存器) | 主要用于配置定時器的捕獲 / 比較通道 1 和通道 2 的工作模式,包括輸入捕獲模式和輸出比較模式。 | 模式選擇位:用于選擇通道 1 或通道 2 的輸出比較模式,例如 PWM 模式 1、PWM 模式 2 等。不同的模式決定了計數器值與比較值的比較方式以及輸出引腳的電平變化規則。 | 輸入捕獲預分頻器位:在輸入捕獲模式下,用于設置輸入信號的預分頻系數,以減少捕獲不必要的信號邊沿,提高捕獲精度。 | 輸出比較預裝載使能位:置 1 時,比較寄存器的值會在更新事件發生時才被傳送到影子寄存器;置 0 時,比較寄存器的值會立即生效。 | |
TIMx_CCER(定時器捕獲/比較使能寄存器) | 該寄存器用于控制定時器捕獲 / 比較通道的使能和極性。 | 捕獲/比較使能位:用于使能相應的捕獲 / 比較通道。例如,CC1E 置 1 時,通道 1 的捕獲或比較功能被使能;置 0 時,功能被禁用。 | 捕獲/比較極性位:用于設置捕獲 / 比較通道的輸入或輸出極性。例如,在輸入捕獲模式下,該位決定是捕獲上升沿還是下降沿;在輸出比較模式下,決定輸出信號的初始電平。 | ||
TIMx_PSC(定時器預分頻器寄存器) | 用于設置定時器時鐘的預分頻系數,從而調整定時器計數器的計數頻率。 | 定時器的時鐘源通常具有較高的頻率,通過設置預分頻器,可以將時鐘頻率降低到合適的范圍,以滿足不同的定時需求。例如,若預分頻系數設置為 10,則計數器每接收到 10 個時鐘脈沖才會加 1。 | |||
TIMx_ARR(定時器自動重裝載寄存器) | 存儲定時器計數器的自動重裝載值。當計數器的值達到該寄存器存儲的值時,會產生更新事件,計數器可能會重新歸零(取決于計數方向和配置)。 | 自動重裝載值與預分頻系數共同決定了定時器的定時周期。通過改變自動重裝載值,可以調整定時器的定時時間。 | |||
TIMx_CCR1(定時器捕獲/比較寄存器1) | 在輸入捕獲模式下,該寄存器用于存儲捕獲到的計數器值;在輸出比較模式下,用于存儲與計數器值進行比較的值。 | 輸入捕獲模式:當定時器檢測到指定的輸入信號邊沿(上升沿或下降沿)時,會將當前計數器的值捕獲到?TIMx_CCR1 ?中,通過分析這些捕獲值,可以測量輸入信號的周期、脈寬等參數。 | 輸出比較模式:計數器的值會不斷與?TIMx_CCR1 ?中的值進行比較,當兩者相等時,會根據配置產生相應的輸出動作,如改變輸出引腳的電平狀態,常用于產生 PWM 信號等。 |
5、看門狗定時器
1、概念(工作原理):
它會在系統正常運行時按照一定的時間間隔進行計數。在系統運行過程中,程序需要定期對看門狗定時器進行 “喂狗” 操作,即重置定時器的計數值。如果由于某種原因(如程序跑飛、硬件故障等)導致系統未能及時 “喂狗”,看門狗定時器就會溢出,進而觸發一個復位信號,使系統重新啟動,以恢復到正常的工作狀態。
2、設置看門狗的步驟:
①確定看門狗的時鐘頻率
②對時鐘頻率進行分頻
③給看門狗一個看門閾值
④主程序中正常喂狗
三、IIC
1、概述
iic是一種同步串行通信協議,有Philips(現為NXP)開發,廣泛用于低速、短距離的多設備通信。iic允許多個設備(包括多個主設備和從設備)共享2根線路:數據線(SDA)和時鐘線(SCL)。
2、工作原理?
由主設備控制時鐘線(SCL),通過數據線(SDA)與多個從設備通信。每個設備由唯一的地址,主設備通過設備地址選擇要通信的設備。
3、應用場景
傳感器、EEPROM、RTC(實時時鐘)、顯示屏等。
4、iic的信號
起始信號(SCL為高電平期間,SDA由高電平向低電平變化)。
終止信號(SCL為高電平期間,SDA由低電平向高電平變化)。
應答信號(接收方接收到數據后,還可以進行下一次8bit數據的接收)。
非應答信號(接收方接收到數據后,不可以進行下一次8bit數據的接收)
數據接收和發送信號。
5、主機和從機通信過程分析
①主機給從機發送數據
②主機從從機讀取數據
四、SPI
1、概述
spi是一種同步串行通信協議,用于主從設備之間的高速數據傳輸。spi是全雙工通信,意味著數據可以同時在兩個方向上傳輸。它使用四根信號線:時鐘線(SCK)、主設備輸入從設備輸出線(MISO)、主設備輸出從設備輸入線(MOSI)和片選線(SS)來進行通信。
?
2、工作原理?
主設備提供時鐘信號(SCK),通過數據線(MISO和MOSI)與從設備進行雙向數據傳輸。每個從設備需要一個單獨的片選信號(SS)來進行通信。
3、應用場景
存儲設備(如Flash、SD卡)、顯示屏、傳感器、音頻解碼器等。
4、硬件連接方式
①基本的連接方式(四線)
當一個SPI主機和多個從機進行通信時,會通過片選線 選擇和哪一個從機進行通信。
② 三線連接
當單主機單從機進行SPI通信時不需要片選線選擇和哪一個從機進行通信,所以在進行連接時只需SCK\MOSI\MISO三根線就可以完成通信。
5、時序分析
spi主從機通信需要通過兩個時鐘特性進行約定:
1、時鐘極性(CPOL):空閑狀態下時鐘線電平的高低
? ? ? ? 時鐘極性為1:空閑狀態下時鐘線保持高電平;
? ? ? ? 時鐘極性為0:空閑狀態下時鐘線保持低電平。
2、時鐘相位(CPHA):通信進行數據采樣(數據讀取)在時鐘前沿還是時鐘后沿
? ? ? ? 時鐘相位1:在時鐘后沿進行數據采樣,在時鐘前沿進行數據輸出;
? ? ? ? 時鐘相位1:在時鐘前沿進行數據采樣,在時鐘后沿進行數據輸出。
五、UART
1、概述
uart一種異步串行通信協議,用于在兩個設備之間傳輸數據。它將數據按位發送,不需要時鐘信號進行同步。在uart通信中,數據通過兩根線路傳輸:發送線(TX)和接收線(RX)。它主要用于簡單的點對點通信。
2、工作原理?
數據被拆分成多個數據位,并通過串行方式(一個接一個地)發送,接收方根據預定的波特率解析數據。
3、應用場景
常見于調試接口、串口通信、GPS模塊、藍牙、WIFI模塊等。
4、數據幀格式
異步通信,雙方各自使用自己的時鐘信號進行數據傳輸,由于雙方的始終不一樣,就算提前約定好了波特率,隨著傳輸數據量的增加,雙方數據收發就會累計一定的誤差,所以為了避免這個誤差,我們需要對傳輸收發的數據進行約定,規范好收發的格式來消除誤差。
?
空閑位:當不進行數據收發時,數據線處于高電平狀態
起始位:1bit低電平,一幀數據傳輸的開始
數據位:5-8bit數據位,傳輸的數據
校驗位:1bit,可有可無
? ? ? ? 奇校驗:一幀數據傳輸后保證數據位和校驗位1的個數是一個奇數;
? ? ? ? 偶校驗:一幀數據傳輸后保證數據位和校驗位1的個數是一個偶數。
停止位:1-2bit高電平,一幀數據結束的標志
六、三種總線對比
1、總線
總線:連接多個部件的信息傳輸線,是各部件共享的傳輸介質
2、總線類型?
片內總線:連接處理器內核和外設的總線,在芯片內部。
片外總線:連接芯片和其他芯片或者模塊的總線。
?
3、模塊之間進行總線通信的方式
①串行通信和并行同行
串行通信:
指的是同一時刻只能收或發一個bit位信息,因此只用一根信號線即可。
優點:占用的引腳資源少。
缺點:速度相對較慢。
并行通信:
指的是同一時刻可以收或發多個bit位信息,因此需要多跟信號線才行。
優點:速度快。
缺點:占用引腳資源多。
②單工、半雙工、全雙工通信
單工:
要么收,要么發,只能做接收設備或發送設備。
半雙工:
可以收,可以發,但不能同時收發,通信雙方只有同一個信道。
全雙工:
可以在同一時刻接收和發送。
③同步通信與異步通信
1、同步通信:
同步通信是一種在數據傳輸過程中,發送方和接收方使用同一個時鐘源或通過特定的同步機制來保證雙方時鐘嚴格同步的通信方式。在這種方式下,發送方和接收方的時鐘信號頻率和相位保持一致,從而使數據能夠在準確的時間被發送和接收。
優點:
傳輸效率高,數據傳輸速率快。
缺點:
硬件成本高,對時鐘精度要求高。
2、異步通信:
異步通信是一種發送方和接收方不需要使用同一個時鐘源,而是通過在數據中添加起始位、停止位等控制信息來實現數據傳輸同步的通信方式。
優點:
硬件簡單,靈活性高。
缺點:
傳輸效率低,數據傳輸效率慢。
4、總結對比
?