下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第第頁(yè)STM32I2C總線通信與SPI總線通信專題講解
總線介紹:(I2C)(In(te)r-IntegratedCircuit)總線(也稱I(IC)或I2C)是由PHILIPS公司開(kāi)發(fā)的兩線式串行總線(單雙工),用于連接微(控制器)及其外圍設(shè)備,在這兩根線上可以掛很多設(shè)備,同一時(shí)刻只能有一個(gè)節(jié)點(diǎn)處于主機(jī)模式,其他節(jié)點(diǎn)處于從機(jī)模式,總線上數(shù)據(jù)的傳送都由主機(jī)發(fā)起。I2C總線沒(méi)有片選(信號(hào))線,所以需要通過(guò)協(xié)議來(lái)找到對(duì)應(yīng)操作的(芯片)。是微(電子)(通信)控制領(lǐng)域廣泛采用的一種總線標(biāo)準(zhǔn)。它是同步通信的一種特殊形式,具有(接口)線少,控制方式簡(jiǎn)單,期間封裝形式少,通信速率高等優(yōu)點(diǎn)??偩€特征:1.兩條總線線路:一條串行數(shù)據(jù)(SD)A,一條串行(時(shí)鐘)線SCL(主從設(shè)備使用同一時(shí)鐘,屬于同步通信)來(lái)完成數(shù)據(jù)的傳輸及外圍器件的擴(kuò)展
2.I2C總線上的每一個(gè)設(shè)備都可以作為主設(shè)備或者從設(shè)備,而且每一個(gè)設(shè)備都會(huì)對(duì)應(yīng)一個(gè)唯一的地址,通常是7位,有時(shí)候是10位
3.I2C總線數(shù)據(jù)傳輸速率在標(biāo)準(zhǔn)模式下可達(dá)100kbit/s,快速模式下可達(dá)400kbit/s,高速模式下可達(dá)3.4Mbit/s。在開(kāi)發(fā)配置的時(shí)候,最好檢查從設(shè)備的傳輸速率從而對(duì)主設(shè)備(一般是(MCU))進(jìn)行相應(yīng)的配置。一般通過(guò)I2C總線接口可(編程)時(shí)鐘來(lái)實(shí)現(xiàn)傳輸速率的調(diào)整,同時(shí)也跟所接的上拉(電阻)的阻值有關(guān)。
4.I2C總線上的主設(shè)備與從設(shè)備之間以字節(jié)(8位)為單位進(jìn)行單雙工的數(shù)據(jù)傳輸。
拓?fù)浣Y(jié)構(gòu)——總線型I2C總線在物理連接上分別由SDA(串行數(shù)據(jù)線)和SCL(串行時(shí)鐘線)及上拉電阻組成,SCL由主機(jī)發(fā)出,SCL越快,通訊速率越快。通信原理是通過(guò)對(duì)SCL和SDA線高低電平時(shí)序的控制來(lái)產(chǎn)生I2C總線協(xié)議所需要的信號(hào)進(jìn)行數(shù)據(jù)的傳遞。在總線空閑狀態(tài)時(shí),這兩根線一般被上面所接的上拉電阻拉高,保持著高電平。
//w25x16.c#include"w25x16.h"externSPI_HandleTypeDefhspi1;/*讀寫一個(gè)字節(jié)函數(shù),因?yàn)镾PI讀和寫同時(shí)完成*//*發(fā)送數(shù)據(jù)一定會(huì)接收到一個(gè)數(shù)據(jù)*/uint8_tsFLASH_SendByte(uint8_tbyte){uint8_tTX_DATA=byte;uint8_tRX_DATA=0;HAL_SPI_TransmitReceive(returnRX_DATA;}/*等待擦除或者寫數(shù)據(jù)完成*/voidsFLASH_W(ai)(tF)orEnd(void){uint8_tsr_value=0;sFLASH_CS_LOW();sFLASH_SendByte(sFLASH_CMD_RDSR);//讀S0的值,為1表示忙碌,為0表示停止do{//發(fā)一個(gè)空字節(jié),得到S0的值sr_value=sFLASH_SendByte(sFLASH_DUMMY_BYTE);}while(sr_valuesFLASH_CS_HIGH();}voidsFLASH_WriteEnable(void){sFLASH_CS_LOW();sFLASH_SendByte(sFLASH_CMD_WREN);sFLASH_CS_HIGH();}/*讀設(shè)備ID*/uint16_tsFLASH_ReadID(void){uint16_tFLASH_ID;uint8_ttemp0,temp1;sFLASH_CS_LOW();sFLASH_SendByte(W25X_ManufactDeviceID);//讀設(shè)備指令后要發(fā)24位地址,所以要發(fā)三次sFLASH_SendByte(sFLASH_DUMMY_BYTE);sFLASH_SendByte(sFLASH_DUMMY_BYTE);sFLASH_SendByte(sFLASH_DUMMY_BYTE);//制造商IDtemp0=sFLASH_SendByte(sFLASH_DUMMY_BYTE);//設(shè)備商IDtemp1=sFLASH_SendByte(sFLASH_DUMMY_BYTE);sFLASH_CS_HIGH();FLASH_ID=(temp0
>16)sFLASH_SendByte((SectorAddr>
>8)//傳送中8位sFLASH_SendByte((SectorAddr>
>0)//傳送低8位sFLASH_CS_HIGH();/*讀狀態(tài)寄存器,等待擦除完成*/sFLASH_WaitForEnd();}//讀數(shù)據(jù)//讀命令和讀地址發(fā)送后,芯片內(nèi)部會(huì)自動(dòng)不斷遞增讀數(shù)據(jù)voidsFLASH_ReadBuffer(uint8_t*pBuffer,uint32_tReadAddr,uint32_tNumByteToRead){sFLASH_CS_LOW();sFLASH_SendByte(sFLASH_CMD_READ);sFLASH_SendByte((ReadAddr>
>16)//傳送高8位sFLASH_SendByte((ReadAddr>
>8)//傳送中8位sFLASH_SendByte((ReadAddr>
>0)//傳送低8位while(NumByteToRead--){*pBuffer=sFLASH_SendByte(sFLASH_DUMMY_BYTE);pBuffer++;}sFLASH_CS_HIGH();}//寫一頁(yè)最多只能寫256個(gè)字節(jié),一個(gè)扇區(qū)16頁(yè),一個(gè)塊16個(gè)扇區(qū)voidsFLASH_WritePage(uint8_t*pBuffer,uint32_tWriteAddr,uint32_tNumByteToWrite){if(NumByteToWrite>sFLASH_SPI_PAGESIZE){NumByteToWrite=sFLASH_SPI_PAGESIZE;printf("寫數(shù)據(jù)量過(guò)大,超過(guò)一頁(yè)大小n");}sFLASH_WriteEnable();//開(kāi)啟寫使能sFLASH_CS_LOW();sFLASH_SendByte(sFLASH_CMD_WRITE);sFLASH_SendByte((WriteAddr>
>16)//傳送高8位sFLASH_SendByte((WriteAddr>
>8)//傳送中8位sFLASH_SendByte((WriteAddr>
>0)//傳送低8位while(NumByteToWrite--){sFLASH_SendByte(*pBuffer);pBuffer++;}sFLASH_CS_HIGH();/*擦除和寫數(shù)據(jù)都涉及到寫動(dòng)作,一定要等待完成*/sFLASH_WaitForEnd();}//寫任意地址、任意長(zhǎng)度voidsFLASH_WriteBuffer(uint8_t*pBuffer,uint32_tWriteAddr,uint32_tNumByteToWrite){uint16_tNumOfPage,NumOfBytes,count,offset;//求WriteAddr在某一頁(yè)的位置offset=WriteAddr%sFLASH_SPI_PAGESIZE;//求某一頁(yè)剩余的大小count=sFLASH_SPI_PAGESIZE-offset;/*處理頁(yè)不對(duì)齊的情況,防止頁(yè)內(nèi)覆蓋*///先把某一頁(yè)剩下的部分寫掉,之后的就能新頁(yè)的起始處開(kāi)始寫/*offset有值表示需要頁(yè)對(duì)齊,如果要寫的字節(jié)數(shù)小于某一頁(yè)剩余的部分,那就無(wú)需對(duì)齊*//*這兩個(gè)條件必須同時(shí)滿足*/if(offsetNumByteToWrite-=count;//去掉已經(jīng)寫了的,從新頁(yè)開(kāi)始pBuffer+=count;WriteAddr+=count;}/*最多可分多少頁(yè)*/NumOfPage=NumByteToWrite/sFLASH_SPI_PAGESIZE;/*剩余多少字節(jié)*/NumOfBytes=NumByteToWrite%sFLASH_SPI_PAGESIZE;if(NumOfPage){while(NumOf){//每一頁(yè)都發(fā)起頁(yè)編程sFLASH_WritePage(pBuffer,WriteAddr,sFLASH_SPI_PAGESIZE);pBuffer+=sFLASH_SPI_PAGESIZE;WriteAddr+=sFLASH_SPI_PAGESIZE;}}if(NumOfBytes){sFLASH_WritePage(pBuffer,WriteAddr,NumOfBytes);}}為什么會(huì)有兩種寫操作函數(shù),是因?yàn)檫@里的寫操作有兩個(gè)特點(diǎn):
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《俄國(guó)對(duì)人口的抑制》課件
- 《設(shè)計(jì)模式王維雄》課件
- 《認(rèn)識(shí)折線統(tǒng)計(jì)》課件
- 果樹(shù)栽培學(xué)完整課件各論蘋果
- 反比例函數(shù)的圖像與性質(zhì) 課件
- 《教師培訓(xùn)講座》課件
- XXX村黨員個(gè)人整改措施計(jì)劃范文兩篇
- 2024學(xué)年婁底市漣源部分校高三語(yǔ)文(上)12月聯(lián)考試卷附答案解析
- 《嵌入式系統(tǒng)原理與開(kāi)發(fā)》課件-第8章
- 《單片機(jī)原理及應(yīng)用 》課件-第1章
- 《中國(guó)糖尿病地圖》要點(diǎn)解讀
- 《產(chǎn)品生命周期》獲獎(jiǎng)教案
- 殘疾人家庭無(wú)障礙改造投標(biāo)方案(技術(shù)標(biāo))
- 茶樹(shù)害蟲(chóng)生態(tài)調(diào)控技術(shù)
- 國(guó)開(kāi)2024年《中國(guó)法律史》平時(shí)作業(yè)1-3答案
- 核酸測(cè)定方法原理
- 安全生產(chǎn)標(biāo)準(zhǔn)化建設(shè)工作情況匯報(bào)
- 2024年國(guó)家GCP培訓(xùn)考試題庫(kù)及答案(新)
- 中藥厚樸課件
- 飲食的健康哲學(xué)智慧樹(shù)知到期末考試答案章節(jié)答案2024年青島大學(xué)
- MOOC 中國(guó)文化翻譯-河南理工大學(xué) 中國(guó)大學(xué)慕課答案
評(píng)論
0/150
提交評(píng)論