|
是時候總結(jié)一下最近所學(xué)的協(xié)議了,就stm32的片內(nèi)外設(shè)資源來說,stm32有3個是關(guān)于通信的:usart、spi 、iic
通過這次的學(xué)習(xí)和以前學(xué)習(xí)對比,我發(fā)現(xiàn)一個極大而又特別讓人忽視的特點:那就是“時序”,因為往往許多初學(xué)者,對所謂的時序表示困惑,不得不承認(rèn) 我也困惑過,甚至不能理解,往往如常人所說的腦洞大開,一個質(zhì)的飛躍,讓我對所謂的通信協(xié)議一通百通。在我看來任何數(shù)字芯片都需要時序,既然有時序,那就有時鐘信號。所以接下來要說的是關(guān)于stm32的時序通信(在這里 我僅代表個人理解成時序協(xié)議)。
我先說說
Usart:所謂的同步異步收發(fā)器,通常需要3根線,rx、tx、和GND,有人提出疑問了,明明沒有時鐘信號還敢瞎說,說錯時序協(xié)議,又或許嘲笑我。可我們不得不承認(rèn)一個事實,在我們配置串口的時候,波特率的配置其實就是所謂的時鐘信號,每秒發(fā)送多少位(或字節(jié)),這就是時鐘信號.。有人又要問了那為什么不把時鐘信號單獨做成時鐘總線給其他通信設(shè)備,這是我們千萬不能被這種死腦筋的人給問蒙了,串口通信還要拉出一條時鐘總線給通信的另一端么?怎么可能需要??通信的另一端也是單片機,要想收到正確的數(shù)據(jù),必須是相同的波特率,這就好像有種無形的時鐘總線,只不過波特率雙方都一樣罷了。還有要說的是,在我看來usart通信協(xié)議最簡單的時序,那就是雙方波特率調(diào)成一致、你只要敢發(fā)數(shù)據(jù)我就能收數(shù)據(jù),至于我要不要回答你,我說了算,這也就是為啥自定義協(xié)議要用串口通信(如modbus通信協(xié)議),我相信時序越簡單的設(shè)備,才會使用方便的協(xié)議。
再說說IIC
通常用于讀寫dataflash的一種協(xié)議,當(dāng)然也可以用作單片機之間的通信協(xié)議,IIC本身就是個時序稍微復(fù)雜的協(xié)議。I2C串行總線一般有兩根信號線,一根是雙向的數(shù)據(jù)線SDA,另一根是時鐘線SCL。所有接到I2C總線設(shè)備上的串行數(shù)據(jù)SDA都接到總線的SDA上,各設(shè)備的時鐘線SCL接到總線的SCL上。大家可以看到SCL時鐘總線,這就是正兒八經(jīng)的時序協(xié)議,根據(jù)時鐘信號,進行數(shù)據(jù)讀寫,數(shù)據(jù)傳輸是根據(jù)高低電平來判斷的,所以它就是時序,在stm32中IIC也屬于外設(shè),不過我們也可以利用IO口來模擬IIC,個人覺得模擬IIC來的更好當(dāng)然前提是(你不需要連續(xù)讀取數(shù)據(jù),對IIC時序熟悉)。如果需要大量讀寫的flash的話,這是可以利用STM32的DMA通道,這里就不細(xì)講了。
最后來說一說
SPI又叫做串行外設(shè)接口,為何這樣說呢?首先看過它的協(xié)議的人都知道,8位或16位數(shù)據(jù)傳輸時是根據(jù)時鐘總線高低跳變來傳輸,主設(shè)備在時鐘信號上升沿發(fā)送,而在下降沿接受數(shù)據(jù),SPI既可以全雙工雙向通信,又可以單向通信(此模式下只能主設(shè)備發(fā)送,不接受,而從設(shè)備接受不發(fā)送)。對于全雙工來說,屬于四線制,為啥呢?對于主設(shè)備,有發(fā)送,要有接受,還有使能,還有個時鐘總線(該時鐘總線只能是主設(shè)備給從設(shè)備,當(dāng)主從切換的時候也是一樣)。而單向數(shù)據(jù)傳輸只要2根線就可以解決了 我認(rèn)為,sck和SDO。那可以說SPI的數(shù)據(jù)交換可就是玩玩全全按照時鐘信號的高低電平來傳輸了,這也就是為什么 我把它也看作是時序協(xié)議了。至于具體的還是要看時序協(xié)議。這里需要注意:
通過以上可以看出,這些協(xié)議都是和時序有著密不可分的關(guān)系,時鐘信號就相當(dāng)于一個載體。沒有它,就沒有數(shù)據(jù)傳輸。
最終我有個以前的想法得說一下,在以前沒學(xué)過單片機通信的時候,不會用串口,更沒有聽過IIC,那時我假想過兩個單片機的通信可不可以通過IO口設(shè)置高低電平來通信呢,其實我就是想得到一個標(biāo)志,無奈用單片機的IO口輸出高電平,而另一個單片機接受這個電平,如果能收到高電平,那我就任務(wù)這個標(biāo)志就出現(xiàn)了。其實現(xiàn)在想想 這并不好笑,這類方式就類似IIC,只不過高低信號沒時序罷了,我只需檢測這個高低信號就好,其實IIC也是基于這個想法而來的,只不過為了更規(guī)范,有時鐘總線,規(guī)定了更詳細(xì)的時序,這就好比,我們通信可以,必須按照規(guī)約通信。呵呵,基于這些天的突然開竅,我覺得SCCB協(xié)議也是非常簡單的了。總結(jié)完畢,這里再貼出外設(shè)地址 以便日后查詢:
|
|