RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32基礎(chǔ)知識總結(jié)

電子工程師筆記 ? 來源:CSDN-Hello_96_world ? 2023-08-28 11:03 ? 次閱讀

【認(rèn)識STM32

c83d00de-440a-11ee-a2ef-92fbcf53809c.png?F1 代表了基礎(chǔ)型,基于

Cortex-M3 內(nèi)核,主頻為72MHZ,F(xiàn)4 代表了高性能,基于 Cortex-M4 內(nèi)核,主頻 180M。

c87ea156-440a-11ee-a2ef-92fbcf53809c.png

【GPIO外設(shè)】

一、GPIO的八種工作模式

1、上拉輸入:IO口在無輸入的情況下,保持高電平。

2、下拉輸入:IO口在無輸入的情況下,保持低電平。

3、浮空輸入:浮空輸入狀態(tài)下,IO的電平狀態(tài)是不確定的,完全由外部輸入決定,如果在該引腳懸空的情況下,讀取該端口的電平是不確定的。

4、模擬輸入:輸入信號不經(jīng)施密特觸發(fā)器直接接入,輸入信號為模擬量而非數(shù)字量,其余輸入方式輸入數(shù)字量。

5、推挽輸出:可以輸出高、低電平,連接數(shù)字器件;推挽結(jié)構(gòu)一般是指兩個三極管分別受兩個互補(bǔ)信號的控制,總是在一個三極管導(dǎo)通的時候另一個截止。高低電平由IC電源決定。導(dǎo)通損耗小、效率高。輸出既可以向負(fù)載灌電流,也可以從負(fù)載抽取電流。推拉式輸出級既提高電路的負(fù)載能力,又提高開關(guān)速度。

6、開漏輸出:輸出端相當(dāng)于三極管的集電極,要得到高電平狀態(tài)需要上拉電阻才行。適合于做電流型的驅(qū)動,其吸收電流的能力相對強(qiáng)(一般20mA以內(nèi))。開漏形式的電路有以下幾個特點(diǎn):

(1)利用外部電路的驅(qū)動能力,減少IC內(nèi)部的驅(qū)動。當(dāng)IC內(nèi)部MOSFET導(dǎo)通時,驅(qū)動電流是從外部的VCC流經(jīng)上拉電阻、MOSFET到GND。IC內(nèi)部僅需很小的柵極驅(qū)動電流。

(2)一般來說,開漏是用來連接不同電平的器件,匹配電平用的,因?yàn)殚_漏引腳不連接外部的上拉電阻時,只能輸出低電平,如果需要同時具備輸出高電平的功能,則需要接上拉電阻,很好的一個優(yōu)點(diǎn)是通過改變上拉電源的電壓,便可以改變傳輸電平。比如加上上拉電阻就可以提供TTL/CMOS電平輸出等。(上拉電阻的阻值決定了邏輯電平轉(zhuǎn)換的速度。阻值越大,速度越低功耗越小,所以負(fù)載電阻的選擇要兼顧功耗和速度。)

(3)開漏輸出提供了靈活的輸出方式,但是也有其弱點(diǎn),就是帶來上升沿的延時。因?yàn)樯仙厥峭ㄟ^外接上拉無源電阻對負(fù)載充電,所以當(dāng)電阻選擇小時延時就小,但功耗大;反之延時大功耗小。所以如果對延時有要求,則建議用下降沿輸出。

(4)可以將多個開漏輸出連接到一條線上。通過一只上拉電阻,在不增加任何器件的情況下,形成“與邏輯”關(guān)系,即“線與”??梢院唵蔚睦斫鉃椋涸谒幸_連在一起時,外接一上拉電阻,如果有一個引腳輸出為邏輯0,相當(dāng)于接地,與之并聯(lián)的回路“相當(dāng)于被一根導(dǎo)線短路”,所以外電路邏輯電平便為0,只有都為高電平時,與的結(jié)果才為邏輯1。

7、復(fù)用推挽輸出:此時IO受內(nèi)部外設(shè)控制,比如定時器的PWM,比如SPI的MOSI,MISO等。而普通的推挽輸出,則IO受ODR控制。

8、復(fù)用開漏輸出:參考復(fù)用推挽。

二、總結(jié)在STM32中選用IO模式

1、浮空輸入GPIO_IN_FLOATING ——浮空輸入,可以做KEY識別,RX1。

2、帶上拉輸入GPIO_IPU——IO內(nèi)部上拉電阻輸入。

3、帶下拉輸入GPIO_IPD—— IO內(nèi)部下拉電阻輸入。

4、模擬輸入GPIO_AIN ——應(yīng)用ADC模擬輸入,或者低功耗下省電。

5、開漏輸出GPIO_OUT_OD ——IO輸出0接GND,IO輸出1,懸空,需要外接上拉電阻,才能實(shí)現(xiàn)輸出高電平。當(dāng)輸出為1時,IO口的狀態(tài)由上拉電阻拉高電平,但由于是開漏輸出模式,這樣IO口也就可以由外部電路改變?yōu)榈碗娖交虿蛔???梢宰xIO輸入電平變化,實(shí)現(xiàn)C51的IO雙向功能。

6、推挽輸出GPIO_OUT_PP ——IO輸出0-接GND, IO輸出1 -接VCC,讀輸入值是未知的。

7、復(fù)用功能的推挽輸出GPIO_AF_PP ——片內(nèi)外設(shè)功能(I2C的SCL,SDA)。

8、復(fù)用功能的開漏輸出GPIO_AF_OD——片內(nèi)外設(shè)功能(TX1,MOSI,MISO.SCK.SS)。

【RCC時鐘

RCC時鐘的主要作用:設(shè)置系統(tǒng)時鐘 SYSCLK 、設(shè)置 AHB 分頻因子(決定 HCLK 等于多少)、設(shè)置 APB2 分頻因子(決定 PCLK2 等于多少)、設(shè)置 APB1 分頻因子(決定 PCLK1 等于多少)、設(shè)置各個外設(shè)的分頻因子;控制 AHB 、 APB2 和 APB1 這三條總線時鐘的開啟、控制每個外設(shè)的時鐘的開啟。對于 SYSCLK、HCLK、PCLK2、PCLK1 這四個時鐘的配置一般是:PCLK2 = HCLK = SYSCLK=PLLCLK = 72M, PCLK1=HCLK/2 = 36M。(以stm32f103vet6為例)

c8c294a6-440a-11ee-a2ef-92fbcf53809c.png

使用HSE時,設(shè)置系統(tǒng)時鐘的步驟

* 1、開啟HSE ,并等待 HSE 穩(wěn)定

* 2、設(shè)置 AHB、APB2、APB1的預(yù)分頻因子

* 3、設(shè)置PLL的時鐘來源,和PLL的倍頻因子,設(shè)置各種頻率主要就是在這里設(shè)置

* 4、開啟PLL,并等待PLL穩(wěn)定

* 5、把PLLCK切換為系統(tǒng)時鐘SYSCLK

* 6、讀取時鐘切換狀態(tài)位,確保PLLCLK被選為系統(tǒng)時鐘

【NVIC是嵌套向量中斷控制器

一、優(yōu)先級定義

在 NVIC 有一個專門的寄存器:中斷優(yōu)先級寄存器 NVIC_IPRx,用來配置外部中斷的優(yōu)先級,IPR 寬度為 8bit,原則上每個外部中斷可配置的優(yōu)先級為 0~255,數(shù)值越小,優(yōu)先級越高。但是絕大多數(shù) CM3 芯片都會精簡設(shè)計(jì),以致實(shí)際上支持的優(yōu)先級數(shù)減少,在 F103 中,只使用了高 4bit,用于表達(dá)優(yōu)先級的這 4bit,又被分組成搶占優(yōu)先級和子優(yōu)先級。如果有多個中斷同時響應(yīng),搶占 優(yōu)先級高的就會搶占搶占優(yōu)先級低的優(yōu)先得到執(zhí)行,如果搶占優(yōu)先級相同,就比較子優(yōu)先級。如果搶占優(yōu)先級和子優(yōu)先級都相同的話,就比較他們的硬件中斷編號,編號越小,優(yōu)先級越高。

c90df7e8-440a-11ee-a2ef-92fbcf53809c.png

二、優(yōu)先級分組

優(yōu)先級的分組由內(nèi)核外設(shè) SCB 的應(yīng)用程序中斷及復(fù)位控制寄存器 AIRCR 的 PRIGROUP[10:8] 位 決定,F(xiàn)103 分為了 5 組,具體如下:主優(yōu)先級 = 搶占優(yōu)先級。

c9242dd8-440a-11ee-a2ef-92fbcf53809c.png

【EXTI外部中斷/事件控制器】

EXTI(External interrupt/event controller)—外部中斷/事件控制器,管理了控制器的 20 個中斷/事 件線。每個中斷/事件線都對應(yīng)有一個邊沿檢測器,可以實(shí)現(xiàn)輸入信號的上升沿檢測和下降沿的檢測。EXTI 可以實(shí)現(xiàn)對每個中斷/事件線進(jìn)行單獨(dú)配置,可以單獨(dú)配置為中斷或者事件,以及觸 發(fā)事件的屬性。

【SysTick系統(tǒng)定時器】

SysTick—系統(tǒng)定時器是屬于 CM3 內(nèi)核中的一個外設(shè),內(nèi)嵌在 NVIC 中。系統(tǒng)定時器是一個 24bit 的向下遞減的計(jì)數(shù)器,計(jì)數(shù)器每計(jì)數(shù)一次的時間為 1/SYSCLK,一般我們設(shè)置系統(tǒng)時鐘 SYSCLK 等于 72M。當(dāng)重裝載數(shù)值寄存器的值遞減到 0 的時候,系統(tǒng)定時器就產(chǎn)生一次中斷,以此循環(huán)往 復(fù)。

【通訊的基本概念】

一、串行通訊與并行通訊

按數(shù)據(jù)傳送的方式,通訊可分為串行通訊與并行通訊,串行通訊是指設(shè)備之間通過少量數(shù)據(jù)信號線 (一般是 8 根以下),地線以及控制信號線,按數(shù)據(jù)位形式一位一位地傳輸數(shù)據(jù)的通訊方式。而并行通訊一般是指使用 8、16、32 及 64 根或更多的數(shù)據(jù)線進(jìn)行傳輸?shù)耐ㄓ嵎绞健?/p>

c93c976a-440a-11ee-a2ef-92fbcf53809c.png

二、全雙工、半雙工及單工通訊

根據(jù)數(shù)據(jù)通訊的方向,通訊又分為全雙工、半雙工及單工通訊,它們主要以信道的方向來區(qū)。

c95aecc4-440a-11ee-a2ef-92fbcf53809c.png

三、同步通訊與異步通訊

根據(jù)通訊的數(shù)據(jù)同步方式,又分為同步和異步兩種,可以根據(jù)通訊過程中是否有使用到時鐘信號。

在同步通訊中,收發(fā)設(shè)備雙方會使用一根信號線表示時鐘信號,在時鐘信號的驅(qū)動下雙方進(jìn)行協(xié) 調(diào),同步數(shù)據(jù),見圖同步通訊 。通訊中通常雙方會統(tǒng)一規(guī)定在時鐘信號的上升沿或下降沿對數(shù) 據(jù)線進(jìn)行采樣。

c977d096-440a-11ee-a2ef-92fbcf53809c.png

在異步通訊中不使用時鐘信號進(jìn)行數(shù)據(jù)同步,它們直接在數(shù)據(jù)信號中穿插一些同步用的信號位, 或者把主體數(shù)據(jù)進(jìn)行打包,以數(shù)據(jù)幀的格式傳輸數(shù)據(jù),見圖某種異步通訊 ,某些通訊中還需要雙方約定數(shù)據(jù)的傳輸速率,以便更好地同步。

c9a8c804-440a-11ee-a2ef-92fbcf53809c.png

在同步通訊中,數(shù)據(jù)信號所傳輸?shù)膬?nèi)容絕大部分就是有效數(shù)據(jù),而異步通訊中會包含有幀的各種標(biāo)識符,所以同步通訊的效率更高,但是同步通訊雙方的時鐘允許誤差較小,而異步通訊雙方的時鐘允許誤差較大。

四、通訊速率

衡量通訊性能的一個非常重要的參數(shù)就是通訊速率,通常以比特率 (Bitrate) 來表示,即每秒鐘傳輸?shù)亩M(jìn)制位數(shù),單位為比特每秒 (bit/s)。容易與比特率混淆的概念是“波特率”(Baudrate),它表示每秒鐘傳輸了多少個碼元。通訊中常用時間間隔相同的符號來表示一個二進(jìn)制數(shù)字,這樣的信號稱為碼元。

例:常見的通訊傳輸中,用 0V 表示數(shù)字 0,5V 表示數(shù)字 1,那么一個碼元可以表示兩種狀態(tài) 0 和 1,所以一個碼元等于一個二進(jìn)制比特位,此時波特率的大小與比特率一致;如果在通訊傳輸中,有 0V、2V、4V 以及 6V 分別表示二進(jìn)制數(shù) 00、01、10、11,那么每個碼元可以表示四種狀態(tài),即兩個二進(jìn)制比特位,所以碼元數(shù)是二進(jìn)制比特位數(shù)的一半,這個時候的波特率為比特率的一半。因?yàn)楹芏喑R姷耐ㄓ嵵幸粋€碼元都是表示兩種狀態(tài),人們常常直接以波特率來表示比特率。

【串口通訊】

一、物理層:

串口通訊的物理層有很多標(biāo)準(zhǔn)及變種,我們主要講解 RS-232 標(biāo)準(zhǔn)。

c9c831b2-440a-11ee-a2ef-92fbcf53809c.png

根據(jù)通訊使用的電平標(biāo)準(zhǔn)不同,串口通訊可分為 TTL 標(biāo)準(zhǔn)及 RS-232 標(biāo)準(zhǔn)。

c9ef7c04-440a-11ee-a2ef-92fbcf53809c.png

TTL 的電平標(biāo)準(zhǔn),理想狀態(tài)下,使用 5V 表示二進(jìn)制邏輯 1,使用 0V 表示邏輯 0;而為了增加串口通訊的遠(yuǎn)距離傳輸及抗干擾能力,它使用-15V 表示邏輯 1,+15V 表示邏輯 0,即RS232。

因?yàn)榭刂破饕话闶褂?TTL 電平標(biāo)準(zhǔn),所以常常會使用 MA3232 芯片對 TTL 及 RS-232 電平的信號進(jìn)行互相轉(zhuǎn)換。

在目前的其它工業(yè)控制使用的串口通訊中,一般只使用 RXD、TXD 以及 GND 三條信號線,直接傳輸數(shù)據(jù)信號,而 RTS、CTS、DSR、DTR 及 DCD 信號都被裁剪掉了。

二、協(xié)議層

串口通訊的數(shù)據(jù)包由發(fā)送設(shè)備通過自身的 TXD 接口傳輸?shù)浇邮赵O(shè)備的 RXD 接口。在串口通訊的協(xié)議層中,規(guī)定了數(shù)據(jù)包的內(nèi)容,它由啟始位、主體數(shù)據(jù)、校驗(yàn)位以及停止位組成,通訊雙方的數(shù)據(jù)包格式要約定一致才能正常收發(fā)數(shù)據(jù)。

ca11606c-440a-11ee-a2ef-92fbcf53809c.png

波特率:串口異步通訊,異步通訊中由于沒有時鐘信號 (如前面講解的 DB9 接口中是 沒有時鐘信號的),所以兩個通訊設(shè)備之間需要約定好波特率,即每個碼元的長度,以便對信號 進(jìn)行解碼,圖串口數(shù)據(jù)包的基本組成 中用虛線分開的每一格就是代表一個碼元。常見的波特率為 4800、9600,115200 等。

通訊的起始和停止信號:串口通訊的一個數(shù)據(jù)包從起始信號開始,直到停止信號結(jié)束。數(shù)據(jù)包的起始信號由一個邏輯 0 的數(shù)據(jù)位表示,而數(shù)據(jù)包的停止信號可由 0.5、1、1.5 或 2 個邏輯 1 的數(shù)據(jù)位表示。

有效數(shù)據(jù):在數(shù)據(jù)包的起始位之后緊接著的就是要傳輸?shù)闹黧w數(shù)據(jù)內(nèi)容,也稱為有效數(shù)據(jù),有效數(shù)據(jù)的長度常被約定為 5、6、7 或 8 位長。

數(shù)據(jù)校驗(yàn):在有效數(shù)據(jù)之后,有一個可選的數(shù)據(jù)校驗(yàn)位。由于數(shù)據(jù)通信相對更容易受到外部干擾導(dǎo)致傳輸數(shù)據(jù)出現(xiàn)偏差,可以在傳輸過程加上校驗(yàn)位來解決這個問題。校驗(yàn)方法有奇校驗(yàn) (odd)、偶校驗(yàn) (even)、0 校驗(yàn) (space)、1 校驗(yàn) (mark) 以及無校驗(yàn) (noparity)。

【I2C】

I2C 通訊協(xié)議 (Inter - Integrated Circuit) 是由 Phiilps 公司開發(fā)的,由于它引腳少,硬件實(shí)現(xiàn)簡單, 可擴(kuò)展性強(qiáng),不需要 USART、CAN 等通訊協(xié)議的外部收發(fā)設(shè)備。

一、物理層

1、I2C 通訊設(shè)備之間的常用連接方式:

ca3100e8-440a-11ee-a2ef-92fbcf53809c.png

它的物理層有如下特點(diǎn):

(1) 它是一個支持設(shè)備的總線?!翱偩€”指多個設(shè)備共用的信號線。在一個 I2C 通訊總線中,可連接多個 I2C 通訊設(shè)備,支持多個通訊主機(jī)及多個通訊從機(jī)。

(2) 一個 I2C 總線只使用兩條總線線路,一條雙向串行數(shù)據(jù)線 (SDA) ,一條串行時鐘線 (SCL)。數(shù) 據(jù)線即用來表示數(shù)據(jù),時鐘線用于數(shù)據(jù)收發(fā)同步。

(3) 每個連接到總線的設(shè)備都有一個獨(dú)立的地址,主機(jī)可以利用這個地址進(jìn)行不同設(shè)備之間的訪問。

(4) 總線通過上拉電阻接到電源。當(dāng) I2C 設(shè)備空閑時,會輸出高阻態(tài),而當(dāng)所有設(shè)備都空閑,都 輸出高阻態(tài)時,由上拉電阻把總線拉成高電平。

(5) 多個主機(jī)同時使用總線時,為了防止數(shù)據(jù)沖突,會利用仲裁方式?jīng)Q定由哪個設(shè)備占用總線。

(6) 具有三種傳輸模式:標(biāo)準(zhǔn)模式傳輸速率為 100kbit/s ,快速模式為 400kbit/s ,高速模式下可達(dá) 3.4Mbit/s,但目前大多 I2C 設(shè)備尚不支持高速模式。

(7) 連接到相同總線的 IC 數(shù)量受到總線的最大電容 400pF 限制。

二、協(xié)議層

1、I2C 基本讀寫過程

ca624856-440a-11ee-a2ef-92fbcf53809c.png

ca915808-440a-11ee-a2ef-92fbcf53809c.png

2、通訊的起始和停止信號

當(dāng) SCL 線是高電平時 SDA 線從高電平向低電平切換,這個情況表示通訊的起始。當(dāng) SCL 是高電平時 SDA 線由低電平向高電平切換,表示通訊的停止。起始和停止信號一般由主機(jī)產(chǎn)生。

caff4d18-440a-11ee-a2ef-92fbcf53809c.png

2、 數(shù)據(jù)有效性

SDA 數(shù)據(jù)線在 SCL 的每個時鐘周期傳輸一位數(shù)據(jù)。傳輸時,SCL 為高電平的時候 SDA 表示的數(shù)據(jù)有效,即此時的 SDA 為高電平時表示數(shù)據(jù)“1”,為低電平時表示數(shù)據(jù)“0”。當(dāng) SCL 為低電平時,SDA的數(shù)據(jù)無效,一般在這個時候 SDA 進(jìn)行電平切換,為下一次表示數(shù)據(jù)做好準(zhǔn)備。

cb186334-440a-11ee-a2ef-92fbcf53809c.png

每次數(shù)據(jù)傳輸都以字節(jié)為單位,每次傳輸?shù)淖止?jié)數(shù)不受限制。

3、地址及數(shù)據(jù)方向

I2C 協(xié)議規(guī)定設(shè)備地址可以是 7 位或 10 位,實(shí)際中 7 位的地址應(yīng)用比較廣泛。緊跟設(shè)備地址的一個數(shù)據(jù)位用來表示數(shù)據(jù)傳輸方向,它是數(shù)據(jù)方向位 (R/),第 8 位或第 11 位。數(shù)據(jù)方向位為“1”時表示主機(jī)由從機(jī)讀數(shù)據(jù),該位為“0”時表示主機(jī)向從機(jī)寫數(shù)據(jù)。

cb44bcd6-440a-11ee-a2ef-92fbcf53809c.png

讀數(shù)據(jù)方向時,主機(jī)會釋放對 SDA 信號線的控制,由從機(jī)控制 SDA 信號線,主機(jī)接收信號,寫 數(shù)據(jù)方向時,SDA 由主機(jī)控制,從機(jī)接收信號。

4、響應(yīng)

作為數(shù)據(jù)接收端時,當(dāng)設(shè)備 (無論主從機(jī)) 接收到 I2C 傳輸?shù)囊粋€字節(jié)數(shù)據(jù)或地址后,若希望對方繼續(xù)發(fā)送數(shù)據(jù),則需要向?qū)Ψ桨l(fā)送“應(yīng)答 (ACK)”信號,發(fā)送方會繼續(xù)發(fā)送下一個數(shù)據(jù);若接收端 希望結(jié)束數(shù)據(jù)傳輸,則向?qū)Ψ桨l(fā)送“非應(yīng)答 (NACK)”信號,發(fā)送方接收到該信號后會產(chǎn)生一個 停止信號,結(jié)束信號傳輸。

cb5f3f02-440a-11ee-a2ef-92fbcf53809c.png

傳輸時主機(jī)產(chǎn)生時鐘,在第 9 個時鐘時,數(shù)據(jù)發(fā)送端會釋放 SDA 的控制權(quán),由數(shù)據(jù)接收端控制 SDA,若 SDA 為高電平,表示非應(yīng)答信號 (NACK),低電平表示應(yīng)答信號 (ACK)。

【SPI】

SPI 協(xié)議是由摩托羅拉公司提出的通訊協(xié)議 (Serial Peripheral Interface),即串行外圍設(shè)備接口,是 一種高速全雙工的通信總線。它被廣泛地使用在 ADC、LCD 等設(shè)備與 MCU 間,要求通訊速率 較高的場合。

一、SPI物理層

SPI 通訊設(shè)備之間的常用連接方式:SPI 通訊使用 3 條總線及片選線,3 條總線分別為 SCK、MOSI、MISO,片選線NSS。(SPI 通訊以 NSS 線置低電平為開始信號,以 NSS 線被拉高作為結(jié)束信號)

cb96924a-440a-11ee-a2ef-92fbcf53809c.png

二、協(xié)議層

1、SPI 通訊的通訊時序

cbc8c134-440a-11ee-a2ef-92fbcf53809c.png

2、通訊的起始和停止信號

NSS 信號線由高變低,是 SPI 通訊的起始信號。NSS 是每個從機(jī)各自獨(dú)占的信號線,當(dāng)從機(jī)在自己的 NSS 線檢測到起始信號后,就知道自己被主機(jī)選中了,開始準(zhǔn)備與主機(jī)通訊。NSS 信號由低變高,是 SPI 通訊的停止信號,表示本次通訊結(jié)束,從機(jī)的選中狀態(tài)被取消。

3、數(shù)據(jù)有效性

MOSI 及 MISO 的數(shù)據(jù)在 SCK 的上升沿期間變化輸出,在 SCK 的下降沿時被采樣。即在 SCK 的下降沿時刻,MOSI 及 MISO 的數(shù)據(jù)有效,高電平時表示數(shù)據(jù)“1”,為低電平時表示數(shù)據(jù)“0”。在其它時刻,數(shù)據(jù)無效,MOSI 及 MISO 為下一次表示數(shù)據(jù)做準(zhǔn)備。

SPI 每次數(shù)據(jù)傳輸可以 8 位或 16 位為單位,每次傳輸?shù)膯挝粩?shù)不受限制。

數(shù)據(jù)傳輸時,MSB先行或 LSB 先行并沒有作硬性規(guī)定,但要保證兩個 SPI 通訊設(shè)備之間使用同樣的協(xié)定,一般都會采用圖 SPI 通訊時序 中的 MSB 先行模式。

4、CPOL/CPHA 及通訊模式

時鐘極性 CPOL 是指 SPI 通訊設(shè)備處于空閑狀態(tài)時,SCK 信號線的電平信號 (即 SPI 通訊開始前、 NSS 線為高電平時 SCK 的狀態(tài))。CPOL=0 時,SCK 在空閑狀態(tài)時為低電平,CPOL=1 時,則相反。

時鐘相位 CPHA 是指數(shù)據(jù)的采樣的時刻,當(dāng) CPHA=0 時,MOSI 或 MISO 數(shù)據(jù)線上的信號將會在 SCK 時鐘線的“奇數(shù)邊沿”被采樣。當(dāng) CPHA=1 時,數(shù)據(jù)線在 SCK 的“偶數(shù)邊沿”采樣。

由 CPOL 及 CPHA 的不同狀態(tài),SPI 分成了四種模式,見表 SPI 的四種模式 ,主機(jī)與從機(jī)需要工 作在相同的模式下才可以正常通訊,實(shí)際中采用較多的是“模式 0”與“模式 3”

cbefa6dc-440a-11ee-a2ef-92fbcf53809c.png

DMA直接存儲區(qū)訪問】

DMA(Direct Memory Access)—直接存儲器存取,是單片機(jī)的一個外設(shè),它的主要功能是用來搬數(shù) 據(jù),但是不需要占用 CPU,即在傳輸數(shù)據(jù)的時候,CPU 可以干其他的事情,好像是多線程一樣。數(shù)據(jù)傳輸支持從外設(shè)到存儲器或者存儲器到存儲器。

DMA 控制器包含了 DMA1 和 DMA2,其中 DMA1 有 7 個通道,DMA2 有 5 個通道,這里的通道 可以理解為傳輸數(shù)據(jù)的一種管道。要注意的是 DMA2 只存在于大容量的單片機(jī)中。

【常用存儲器】

一、存儲器種類

cc0b4446-440a-11ee-a2ef-92fbcf53809c.png

存儲器按其存儲介質(zhì)特性主要分為“易失性存儲器”和“非易失性存儲器”兩大類。其中的“易失/非易失”是指存儲器斷電后,它存儲的數(shù)據(jù)內(nèi)容是否會丟失的特性。

二、易失性存儲器——RAM 存儲器

RAM 是“Random Access Memory”的縮寫,被譯為隨機(jī)存儲器。所謂“隨機(jī)存取”,指的是當(dāng)存 儲器中的消息被讀取或?qū)懭霑r,所需要的時間與這段信息所在的位置無關(guān)。

1、DRAM動態(tài)隨機(jī)存儲器

DRAM 的存儲單元以電容的電荷來表示數(shù)據(jù),有電荷代表 1,無電荷代表 0。但時間一長,代表 1 的電容會放電,代表 0 的電容會吸收電荷,因此它需要定期刷新操作,這就是“動態(tài) (Dynamic)”一詞所形容的特性。

2、SRAM靜態(tài)隨機(jī)存儲器

靜態(tài)隨機(jī)存儲器 SRAM 的存儲單元以鎖存器來存儲數(shù)據(jù),見圖 SRAM 存儲單元 。這種電路結(jié)構(gòu) 不需要定時刷新充電,就能保持狀態(tài) (當(dāng)然,如果斷電了,數(shù)據(jù)還是會丟失的),所以這種存儲器 被稱為“靜態(tài) (Static)”RAM。

cc2eef90-440a-11ee-a2ef-92fbcf53809c.png

三、非易失性存儲器

1、ROM 存儲器:ROM 是“Read Only Memory”的縮寫,意為只能讀的存儲器。由于技術(shù)的發(fā)展,后來設(shè)計(jì)出了可以方便寫入數(shù)據(jù)的 ROM,而這個“Read Only Memory”的名稱被沿用下來了。

MASK ROM:MASK(掩膜) ROM 就是正宗的“Read Only Memory”,存儲在它內(nèi)部的數(shù)據(jù)是在出廠時使用特殊工藝固化的,生產(chǎn)后就不可修改,其主要優(yōu)勢是大批量生產(chǎn)時成本低。

OTPROM:OTPROM(One Time Programable ROM) 是一次可編程存儲器。這種存儲器出廠時內(nèi)部并沒有資料,用戶可以使用專用的編程器將自己的資料寫入,但只能寫入一次,被寫入過后,它的內(nèi)容也不可再修改。

EPROM:EPROM(Erasable Programmable ROM) 是可重復(fù)擦寫的存儲器,它解決了 PROM 芯片只能寫入一次的問題。這種存儲器使用紫外線照射芯片內(nèi)部擦除數(shù)據(jù),擦除和寫入都要專用的設(shè)備?,F(xiàn)在這種存儲器基本淘汰,被 EEPROM 取代。

EEPROM:EEPROM(Electrically Erasable Programmable ROM) 是電可擦除存儲器。EEPROM 可以重復(fù)擦寫,它的擦除和寫入都是直接使用電路控制,不需要再使用外部設(shè)備來擦寫。而且可以按字節(jié)為單位修改數(shù)據(jù),無需整個芯片擦除。

2、FLASH 存儲器

FLASH 存儲器又稱為閃存,它也是可重復(fù)擦寫的儲器,部分書籍會把 FLASH 存儲器稱為 FLASH ROM,但它的容量一般比 EEPROM 大得多,且在擦除時,一般以多個字節(jié)為單位。根據(jù)存儲單元電路的不同,F(xiàn)LASH 存儲器又分為 NOR FLASH 和 NAND FLASH。

cc551efe-440a-11ee-a2ef-92fbcf53809c.png

【ADC】

STM32f103 系列有 3 個 ADC,精度為 12 位,每個 ADC 最多有 16 個外部通道。其中 ADC1 和 ADC2 都有 16 個外部通道,ADC3 根據(jù) CPU 引腳的不同通道數(shù)也不同,一般都有 8 個外部通道。

DAC

STM32 具有片上 DAC 外設(shè),它的分辨率可配置為 8 位或 12 位的數(shù)字輸入信號,具有兩個 DAC 輸出通道,這兩個通道互不影響,每個通道都可以使用 DMA 功能,都具有出錯檢測能力,可外 部觸發(fā)。

【TIM】

一、定時器的分類

STM32F1 系列中,除了互聯(lián)型的產(chǎn)品,共有 8 個定時器,分為基本定時器,通用定時器和高級 定時器。

cc8b4448-440a-11ee-a2ef-92fbcf53809c.png

【IWDG獨(dú)立看門狗/WWDG窗口看門狗】

一、獨(dú)立看門狗定義及使用場景

獨(dú)立看門狗:是一個 12 位的遞減計(jì)數(shù)器,當(dāng)計(jì)數(shù)器的值從某個值一直減到 0 的時候,系統(tǒng)就會產(chǎn)生一個復(fù)位信號,即 IWDG_RESET。如果在計(jì)數(shù)沒減到 0 之前,刷新了計(jì)數(shù)器的值的話,那么就不會產(chǎn)生復(fù)位信號,這個動作就是我們經(jīng)常說的喂狗。

獨(dú)立看門狗的時鐘由獨(dú)立的 RC 振蕩器 LSI 提供,即使主時鐘發(fā)生故障它仍然有效,非常獨(dú)立。LSI 的頻率一般在 30~60KHZ 之間,根據(jù)溫度和工作場合會有一定的漂移,我們一般取 40KHZ, 所以獨(dú)立看門狗的定時時間并一定非常精確,只適用于對時間精度要求比較低的場合。

二、窗口看門狗定義及使用場景

窗口看門狗:跟獨(dú)立看門狗一樣,也是一個遞減計(jì)數(shù)器不斷的往下遞減計(jì)數(shù),當(dāng)減到一個固定值 0X40 時還不喂狗的話,產(chǎn)生復(fù)位,這個值叫窗口的下限,是固定的值,不能改變。這個是跟獨(dú)立看門狗類似的地方,不同的地方是窗口看門狗的計(jì)數(shù)器的值在減到某一個數(shù)之前喂狗的話也會產(chǎn)生 復(fù)位,這個值叫窗口的上限,上限值由用戶獨(dú)立設(shè)置。窗口看門狗計(jì)數(shù)器的值必須在上窗口和下 窗口之間才可以喂狗。

ccdb00dc-440a-11ee-a2ef-92fbcf53809c.png

三、圖解看門狗

RLR 是重裝載寄存器,用來設(shè)置獨(dú)立看門狗的計(jì)數(shù)器的值。TR 是窗口看門狗的計(jì)數(shù)器的值,由 用戶獨(dú)立設(shè)置,WR 是窗口看門狗的上窗口值,由用戶獨(dú)立設(shè)置。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16332

    瀏覽量

    177803
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1372

    瀏覽量

    40276
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10895

    瀏覽量

    355728
  • Cortex-M3
    +關(guān)注

    關(guān)注

    9

    文章

    269

    瀏覽量

    59463
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1204

    瀏覽量

    52051

原文標(biāo)題:STM32基礎(chǔ)知識總結(jié)

文章出處:【微信號:電子工程師筆記,微信公眾號:電子工程師筆記】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    STM32單片機(jī)中的C語言基礎(chǔ)知識

    C語言是單片機(jī)開發(fā)中的必備基礎(chǔ)知識,本文列舉了部分STM32學(xué)習(xí)中比較常見的一些C語言基礎(chǔ)知識。
    發(fā)表于 09-21 17:21 ?4553次閱讀

    STM32基礎(chǔ)知識總結(jié)

    F1 代表了基礎(chǔ)型,基于 Cortex-M3 內(nèi)核,主頻為72MHZ,F(xiàn)4 代表了高性能,基于 Cortex-M4 內(nèi)核,主頻 180M。
    發(fā)表于 03-27 10:06 ?632次閱讀

    linux_,Android基礎(chǔ)知識總結(jié)

    linux_,Android基礎(chǔ)知識總結(jié)
    發(fā)表于 08-20 13:32

    第5章 PHY芯片和STM32的MAC基礎(chǔ)知識

    轉(zhuǎn)帖:最新教程 本章節(jié)為大家講解STM32自帶的MAC和PHY芯片的基礎(chǔ)知識,為下一章底層驅(qū)動的講解做一個鋪墊。5.1初學(xué)者重要提示5.2什么是MAC5.3 MAC地址5.4 STM32自帶MAC
    發(fā)表于 10-14 19:56

    有關(guān)STM32看門狗基礎(chǔ)知識

    STM32看門狗總結(jié)調(diào)原子哥的開發(fā)板一年多,基本上能用,但是對于STM32某些基本外設(shè)的工作機(jī)理還不甚明了。借此暑假的機(jī)會對各個外設(shè)的功能做一個簡短的總結(jié),在提高自己
    發(fā)表于 07-30 06:14

    STM32開發(fā)基礎(chǔ)知識點(diǎn)匯總,總結(jié)的太棒了

    STM32開發(fā)基礎(chǔ)知識點(diǎn)匯總,總結(jié)的太棒了
    發(fā)表于 11-30 08:01

    路由器常用基礎(chǔ)知識總結(jié)

    路由器常用基礎(chǔ)知識總結(jié)路由器常用基礎(chǔ)知識總結(jié)路由器常用基礎(chǔ)知識總結(jié)
    發(fā)表于 10-30 18:08 ?0次下載

    linux+Android基礎(chǔ)知識總結(jié)

    linux+Android基礎(chǔ)知識總結(jié)
    發(fā)表于 03-19 11:23 ?0次下載

    linux /Android 基礎(chǔ)知識總結(jié)大全

    本文檔介紹了linux /Android 基礎(chǔ)知識總結(jié)大全,包含了源代碼以及詳解,供網(wǎng)友參考。
    發(fā)表于 09-11 17:46 ?7次下載

    linux Android基礎(chǔ)知識總結(jié)

    linux Android基礎(chǔ)知識總結(jié)
    發(fā)表于 10-24 09:00 ?6次下載
    linux Android<b class='flag-5'>基礎(chǔ)知識</b><b class='flag-5'>總結(jié)</b>

    適合C語言小白看的基礎(chǔ)知識梳理總結(jié)

    C語言是當(dāng)代人學(xué)習(xí)及生活中的必備基礎(chǔ)知識,應(yīng)用十分廣泛,下面為大家?guī)鞢語言基礎(chǔ)知識梳理總結(jié),C語言零基礎(chǔ)入門絕對不是天方夜譚!
    的頭像 發(fā)表于 01-04 11:07 ?4735次閱讀

    51單片機(jī)學(xué)習(xí) 基礎(chǔ)知識總結(jié)

    51單片機(jī)學(xué)習(xí) 基礎(chǔ)知識總結(jié)
    發(fā)表于 11-11 19:21 ?39次下載
    51單片機(jī)學(xué)習(xí)    <b class='flag-5'>基礎(chǔ)知識</b><b class='flag-5'>總結(jié)</b>

    Arduino入門必備基礎(chǔ)知識(基礎(chǔ)認(rèn)證考前總結(jié))

    Arduino入門必備基礎(chǔ)知識(基礎(chǔ)認(rèn)證考前總結(jié))
    發(fā)表于 11-15 20:51 ?16次下載
    Arduino入門必備<b class='flag-5'>基礎(chǔ)知識</b>(基礎(chǔ)認(rèn)證考前<b class='flag-5'>總結(jié)</b>)

    【51單片機(jī)】考試基礎(chǔ)知識總結(jié)(引腳)

    這里寫目錄標(biāo)題單片機(jī)考試基礎(chǔ)知識總結(jié)串口:單片機(jī)考試基礎(chǔ)知識總結(jié)串口:
    發(fā)表于 11-22 17:51 ?18次下載
    【51單片機(jī)】考試<b class='flag-5'>基礎(chǔ)知識</b><b class='flag-5'>總結(jié)</b>(引腳)

    STM32中C語言的基礎(chǔ)知識

    C語言是單片機(jī)開發(fā)中的必備基礎(chǔ)知識,本文列舉了部分STM32學(xué)習(xí)中比較常見的一些C語言基礎(chǔ)知識,希望能對大家有所幫助。
    的頭像 發(fā)表于 04-27 17:42 ?1296次閱讀
    <b class='flag-5'>STM32</b>中C語言的<b class='flag-5'>基礎(chǔ)知識</b>
    RM新时代网站-首页