中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

怎么提高網(wǎng)站曝光武漢seo優(yōu)化服務(wù)

怎么提高網(wǎng)站曝光,武漢seo優(yōu)化服務(wù),網(wǎng)站制作 連云港,佛山網(wǎng)站推廣I2C模塊內(nèi)部結(jié)構(gòu) I2C(Inter-Integrated Circuit)模塊是一種由Philips公司開發(fā)的二線式串行總線協(xié)議,用于短距離通信,允許多個設(shè)備共享相同的總線?。 ?硬件連接簡單?:I2C通信僅需要兩條總線,即SCL&…

I2C模塊內(nèi)部結(jié)構(gòu)

I2C(Inter-Integrated Circuit)模塊是一種由Philips公司開發(fā)的二線式串行總線協(xié)議,用于短距離通信,允許多個設(shè)備共享相同的總線?。

  • ?硬件連接簡單?:I2C通信僅需要兩條總線,即SCL(時鐘線)和SDA(數(shù)據(jù)線),大大簡化了系統(tǒng)的硬件設(shè)計?12。
  • ?支持多設(shè)備共享?:在I2C總線中,可以掛載多個從設(shè)備,每個設(shè)備都有一個唯一的地址,主設(shè)備通過廣播地址的方式與從設(shè)備進行通信?25。
  • ?傳輸速率靈活?:I2C總線傳輸模式具有向下兼容性,傳輸速率在標準模式下可達100kbps,快速模式下可達400kbps,高速模式下更是可達3.4Mbps?34。

引腳初始化

引腳映射表

引腳實現(xiàn)代碼

void My_I2C_Init(){
//對I2C進行重映射RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_PinRemapConfig(GPIO_Remap_I2C1,ENABLE);
//對PB8和PB9進行初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(GPIOB,&GPIO_InitStruct)
}

連接電路

波特率

?I2C的波特率指的是I2C總線上的數(shù)據(jù)傳輸速率,它可以根據(jù)不同的模式達到不同的速率?。具體來說:

  • 在?標準模式?下,I2C的波特率為100kHz?12。
  • 在?快速模式?下,I2C的波特率可以達到400kHz?12。
  • 還有一些更高速的模式,如?快速模式+?,波特率可以達到1MHz?1。

I2C總線中的波特率由主機控制,主機通過產(chǎn)生SCL(時鐘線)信號來分配給所有從機,因此主機可以通過控制時鐘信號頻率來調(diào)節(jié)波特率,即控制通信速度?。這種靈活性使得I2C總線能夠適應不同的通信需求和應用場景。

占空比

在I2C總線通信中,占空比是指數(shù)據(jù)線(SDA)上的高電平持續(xù)時間與整個時鐘周期(由時鐘線SCL控制)的比例。這個比例決定了數(shù)據(jù)傳輸?shù)姆€(wěn)定性和可靠性?12。

在沒有明確的情況下我們選擇2/1的占空比

初始化I2C模塊代碼

void My_I2C_Init(){
//對I2C進行重映射RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_PinRemapConfig(GPIO_Remap_I2C1,ENABLE);
//對PB8和PB9進行初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(GPIOB,&GPIO_InitStruct);RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE);//開啟I2C的時鐘RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1,ENABLE);//施加復位信號RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1,DISABLE);//釋放復位信號I2C_InitTypeDef I2C_InitStruct;I2C_InitStruct.I2C_ClockSpeed = 400000;//波特率400kI2C_InitStruct.I2C_Mode = I2C_Mode_I2C;//標準的I2CI2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;//占空比2:1I2C_Init(I2C1,&I2C_InitStruct);I2C_Cmd(I2C1,ENABLE);//閉合I2C1的總開關(guān)
}

寫數(shù)據(jù)

數(shù)據(jù)發(fā)送的流程

主設(shè)備向從設(shè)備發(fā)送數(shù)據(jù)

  1. ?發(fā)送起始信號?:主設(shè)備在SCL(時鐘線)為高電平時,將SDA(數(shù)據(jù)線)從高拉低,產(chǎn)生起始信號,通知所有從設(shè)備準備接收數(shù)據(jù)?。
  2. ?發(fā)送設(shè)備地址?:主設(shè)備緊接著發(fā)送從設(shè)備的7位地址,以及一個寫信號(通常是低電平),指示這是一個寫操作?。
  3. ?等待從設(shè)備響應?:從設(shè)備監(jiān)測到自己的地址后,通過在下一個時鐘周期拉低SDA線(發(fā)送ACK)來響應,確認它準備好了接收數(shù)據(jù)?。
  4. ?發(fā)送數(shù)據(jù)?:主設(shè)備開始發(fā)送數(shù)據(jù),每個字節(jié)數(shù)據(jù)后會跟著等待接收來自從設(shè)備的響應(ACK)。從設(shè)備在接收到每個字節(jié)后,都會發(fā)送一個ACK信號來確認?。
  5. ?發(fā)送停止信號?:數(shù)據(jù)發(fā)送完畢后,主設(shè)備發(fā)送停止信號(SCL高時SDA從低變高),終止傳輸?。

從設(shè)備向主設(shè)備發(fā)送數(shù)據(jù)

  1. ?主設(shè)備初始化讀取操作?:主設(shè)備發(fā)送起始信號,然后發(fā)送從設(shè)備的地址以及一個讀取位(通常是高電平),指示這是一個讀取操作?。
  2. ?從設(shè)備響應?:從設(shè)備監(jiān)測到自己的地址后,通過發(fā)送ACK信號來響應?。
  3. ?主設(shè)備發(fā)送重復開始信號或停止信號?:如果主設(shè)備計劃在同一事務(wù)中連續(xù)讀取多個從設(shè)備或進行連續(xù)讀取,它可以發(fā)送重復開始信號來保持總線控制權(quán)。如果僅從當前從設(shè)備讀取且讀取操作即將結(jié)束,主設(shè)備在收到從設(shè)備的ACK后可直接發(fā)送停止信號?。
  4. ?從設(shè)備發(fā)送數(shù)據(jù)?:在收到讀取命令后,從設(shè)備開始發(fā)送數(shù)據(jù)。主設(shè)備在接收到每個字節(jié)后,都會發(fā)送一個ACK信號來確認。當接收到最后一個數(shù)據(jù)字節(jié)后,主設(shè)備可能會發(fā)送一個無效響應(NACK),然后發(fā)送停止信號來終止傳輸?。

等待總線空閑

發(fā)送數(shù)據(jù)前要監(jiān)控總線是否繁忙,從BUSY標志位來判斷總線是否空閑,I2C_GetFlagStatus函數(shù)用來獲取BUSY標志。I2C_GetFlagStatus?函數(shù)是一個在 STM32 微控制器的 I2C(Inter-Integrated Circuit)庫函數(shù)中常用的函數(shù),用于檢查 I2C 接口的狀態(tài)標志。這個函數(shù)通常用于輪詢(polling)方式,以確定 I2C 總線上的特定事件或狀態(tài)是否已經(jīng)發(fā)生,例如數(shù)據(jù)傳輸完成、接收到起始信號、檢測到錯誤等。

FlagStatus I2C_GetFlagStatus(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG);
  • I2Cx:指向要檢查的 I2C 接口的指針。例如,對于 STM32F103 系列,可能是?I2C1?或?I2C2。
  • I2C_FLAG:要檢查的特定 I2C 狀態(tài)標志。這些標志在 STM32 的 I2C 庫頭文件中定義,通常是以?I2C_FLAG_?開頭的宏。
  • 返回值是?FlagStatus?枚舉類型,它通常有兩個可能的值:SET(標志已設(shè)置)和?RESET(標志未設(shè)置)。

發(fā)送起始位

發(fā)送起始位是向START寄存器內(nèi)寫數(shù)值1,使用函數(shù)I2C_GenerateStart完成。


I2C_GenerateStart?函數(shù)是用于生成 I2C 通信起始條件(START condition)的函數(shù)。在 I2C 通信中,起始條件是一個重要的信號,用于通知所有連接到總線的設(shè)備即將開始數(shù)據(jù)傳輸。當?NewState?參數(shù)為?ENABLE?時,I2C_GenerateStart?函數(shù)會設(shè)置相應的寄存器位,從而在 I2C 總線上生成一個起始條件。起始條件是一個在 SCL(時鐘線)為高電平時,SDA(數(shù)據(jù)線)由高電平變?yōu)榈碗娖降倪呇?。這個邊沿會被所有連接到總線的 I2C 設(shè)備檢測到,并通知它們即將開始數(shù)據(jù)傳輸。

void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState);
  • I2Cx:指向要操作的 I2C 接口的指針。在 STM32 微控制器中,這通常是?I2C1、I2C2?等。
  • NewState:這是一個?FunctionalState?枚舉類型的值,用于指定是否生成起始條件。它可以是?ENABLE(生成起始條件)或?DISABLE(不生成起始條件)。

在發(fā)送起止位后我們需要確定起止位是否發(fā)送完畢,我們通過SB標志來判斷。

while(I2C_GetFlagStatus(I2Cx,I2C_FLAG_SB) == RESET);

發(fā)送地址

AF標志位是ACK應答標志位,當AF為1時ACK答應失敗未收到答應,ADDR尋址成功標志位,當尋址成功值為1,失敗值為0。在發(fā)送地址前我們需要清理AF標志位的值然后發(fā)送地址。

I2C_ClearFlag(I2Cx,I2C_FLAG_AF);//清除AF
I2C_SendData(I2Cx,Addr & 0xfe);//發(fā)送地址和RW

在發(fā)送的過程中需要持續(xù)判斷AF和ADDR標識符的狀態(tài)

while(1){if(I2C_GetFlagStatus(I2Cx,I2C_FLAG_ADDR) == SET){break;}if(I2C_GetFlagStatus(I2Cx,I2C_FLAG_AF) == SET){I2C_GenerateSTOP(I2Cx,ENABLE);return -1;}
}

后續(xù)我們繼續(xù)清除ADDR狀態(tài)標示符

I2C_ReadRegister(I2Cx,I2C_Register_SR1);
I2C_ReadRegister(I2Cx,I2C_Register_SR2);

發(fā)送數(shù)據(jù)

發(fā)送數(shù)據(jù)過程中我們要持續(xù)監(jiān)控ACK和發(fā)送數(shù)據(jù)寄存器的狀態(tài),AF為1標示為響應ACK,停止發(fā)送數(shù)據(jù),BTF負責監(jiān)控發(fā)送數(shù)據(jù)寄存器內(nèi)是否有數(shù)據(jù),保證在其空的情況下推送數(shù)據(jù)進入。

發(fā)送停止位

代碼

int main(){My_I2C_Init();uint8_t commands[] = {0x00,0x8d,0x14,0xaf,0xa5};My_I2C_SendBytes(I2C1,0x78,commands,5);
}void My_I2C_Init(){
//對I2C進行重映射RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_PinRemapConfig(GPIO_Remap_I2C1,ENABLE);
//對PB8和PB9進行初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(GPIOB,&GPIO_InitStruct);RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);//開啟I2C的時鐘RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1,ENABLE);//施加復位信號RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1,DISABLE);//釋放復位信號I2C_InitTypeDef I2C_InitStruct;I2C_InitStruct.I2C_ClockSpeed = 400000;//波特率400kI2C_InitStruct.I2C_Mode = I2C_Mode_I2C;//標準的I2CI2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;//占空比2:1I2C_Init(I2C1,&I2C_InitStruct);I2C_Cmd(I2C1,ENABLE);//閉合I2C1的總開關(guān)
}int My_I2C_SendBytes(I2C_TypeDef *I2Cx,uint8_t Addr,uint8_t *pData,uint16_t Size){//等待總線空閑while(I2C_GetFlagStatus(I2Cx,I2C_FLAG_BUSY) == SET){}//發(fā)送起止位I2C_GenerateSTART(I2C1,ENABLE);//確定起止位是否發(fā)送完畢	while(I2C_GetFlagStatus(I2Cx,I2C_FLAG_SB) == RESET){}//發(fā)送地址//清除AFI2C_ClearFlag(I2Cx,I2C_FLAG_AF);I2C_SendData(I2Cx,Addr & 0xfe);while(1){if(I2C_GetFlagStatus(I2Cx,I2C_FLAG_ADDR) == SET){break;}if(I2C_GetFlagStatus(I2Cx,I2C_FLAG_AF) == SET){I2C_GenerateSTOP(I2Cx,ENABLE);return -1;//尋址失敗}}//清除ADDRI2C_ReadRegister(I2Cx,I2C_Register_SR1);I2C_ReadRegister(I2Cx,I2C_Register_SR2);//發(fā)送數(shù)據(jù) for(uint8_t i = 0;i<Size;i++){while(1){if(I2C_GetFlagStatus(I2Cx,I2C_FLAG_AF) == SET){I2C_GenerateSTOP(I2Cx,ENABLE);return -2;}if(I2C_GetFlagStatus(I2Cx,I2C_FLAG_TXE) == SET){break;}}I2C_SendData(I2Cx,pData[i]);}while(1){if(I2C_GetFlagStatus(I2Cx,I2C_FLAG_AF) == SET){I2C_GenerateSTOP(I2Cx,ENABLE);return -2;}if(I2C_GetFlagStatus(I2Cx,I2C_FLAG_BTF) == SET){break;}}//發(fā)送停止位I2C_GenerateSTOP(I2Cx,ENABLE);return 0;
}

http://www.risenshineclean.com/news/39616.html

相關(guān)文章:

  • 高能建站系統(tǒng)怎么收費查詢網(wǎng)站流量的網(wǎng)址
  • 網(wǎng)站備案沒公司網(wǎng)絡(luò)口碑營銷的成功案例
  • 主流跨境電商平臺有哪些?山東服務(wù)好的seo
  • 做酒店網(wǎng)站的公司百度一下子就知道了
  • 個人網(wǎng)站怎么做視頻人工智能培訓心得
  • 北京網(wǎng)頁制作網(wǎng)站搜索引擎網(wǎng)站優(yōu)化推廣
  • 專用主機網(wǎng)站建設(shè)企業(yè)郵箱域名
  • 鹽城網(wǎng)站建設(shè)流程百度在線使用網(wǎng)頁版
  • WordPress 升級 php蘇州百度快速排名優(yōu)化
  • 頭條號可以做網(wǎng)站鏈接嗎最近的新聞大事10條
  • 中華人民共和國城鄉(xiāng)建設(shè)部網(wǎng)站百度打廣告收費表
  • 網(wǎng)站的欄目關(guān)鍵詞常用的網(wǎng)絡(luò)推廣方法
  • 有哪些好用的設(shè)計網(wǎng)站有哪些內(nèi)容培訓心得體會怎么寫
  • 好看的中文網(wǎng)站設(shè)計百度一下首頁登錄入口
  • 各種類型網(wǎng)站建設(shè)獨立aso關(guān)鍵詞優(yōu)化計劃
  • 鄭州市域名服務(wù)公司網(wǎng)絡(luò)公司seo教程
  • 網(wǎng)站后端技術(shù)有哪些運營商大數(shù)據(jù)精準營銷獲客
  • 做網(wǎng)站找誰百度服務(wù)中心投訴
  • 網(wǎng)站的思維導圖怎么做線上怎么做推廣和宣傳
  • 做app推廣上哪些網(wǎng)站嗎2022年今天新聞聯(lián)播
  • 服務(wù)周到的做網(wǎng)站自媒體軟文發(fā)布平臺
  • 織夢手機網(wǎng)站怎么安裝教程視頻在線網(wǎng)絡(luò)培訓平臺
  • 河北網(wǎng)站制作網(wǎng)絡(luò)營銷與管理
  • 怎么做網(wǎng)站免費常用的網(wǎng)絡(luò)營銷方法有哪些
  • 誰知道蘇州溪城水處理網(wǎng)站誰做的今日短新聞20條
  • 020網(wǎng)站建設(shè)專業(yè)網(wǎng)站建設(shè)公司
  • 重慶網(wǎng)站建設(shè)排名武漢seo首頁
  • 網(wǎng)站負責人辦理幕布或站點拍照重要新聞今天8條新聞
  • 用html制作網(wǎng)站代碼百家號關(guān)鍵詞排名優(yōu)化
  • android安裝教程seo診斷書