day 16 stm32 IIC

1.IIC概述

1基于對話的形式完成,不需要同時進行發送和接收所以刪掉了一根數據線,變成半雙工2為了安全起見添加了應答機制3可以接多個模塊,且互不干擾4異步時序,要求嚴格,發送過程中不能暫停,所以需要同步時序+一條時鐘線。

模式支持一主多從,和多主多從。仲裁器可以仲裁,也需要時鐘線

2.IIC引腳說明

IIC總線只需要兩根引腳就可以實現通信,一根是數據線(SDA),另一根是時鐘線(SCL),所有通過IIC接口通信的外圍器件都掛載在IIC總線上,通過這種機制就可以實現多機通信。

可以看到,外圍器件的時鐘線和數據線都是掛載在IIC總線(由主控芯片提供),并且在空閑狀態下所有器件的時鐘線(SCL)和數據線(SDA)都被總線的上拉電阻拉高,這樣就可以把SDA引腳和SCL引腳設置為開漏模式即可,好處是防止短路。

尋址

每個掛載在IIC總線上的外圍器件都有獨立的器件地址,主機發送開始信號后,只需要發送想要通信的設備的地址,如果設備收到地址并且匹配正確,則開始進行單獨通信。

3.上拉電阻的作用

  1. 提供無效應答

當主機在總線上發送數據時(器件地址),從機在接收到該數據后應當回復主機一個有效應答(低電平)但是若主機發送的是器件地址,而從機上沒有與該器件地址匹配的從機,此時主機就會接收到來自上拉電阻提供的無效應答(高電平)

?????2.多主模式仲裁

IIC支持多主模式,多個主機怎么判定那個主機在當前通信總線上有效呢?

上拉電阻在IO引腳配置為開漏輸出后會有線與功能。

線與功能:多主模式下,只要有一個主機發送0,總線上就為低電平,若都發送1,則總線上就是高電平。(有0為0,全1為1)

由線與功能決定在多主模式通信時,哪個主機先發送1信號,誰先被淘汰。最終留下的就是進入通信的主機。

若只有一個主機,通信總線可以配置為通用的推挽輸出,但是多主必須配置為開漏輸出

4.通信過程

可以看到,在建立通信的時候主機需要發送開始信號,緊接著主機需要發出從器件的設備地址(7bit+1bit),從設備的物理地址是7bit,但是由于只有一根數據線,就需要說清楚數據的傳輸方向,數據的傳輸方向通過從設備的地址最低位進行表示(最低位是0,表示寫操作,最低位是1,表示讀操作),IIC總線提供了應答機制,也就是說從機收到了1個字節的數據之后,會在第九個脈沖發送給主機一個應答信號(1bit),如果主機收到從機的應答信號,則主機可以繼續發送數據,反之,如果主機沒有收到從機發送的應答信號,那主機就不應該繼續發送數據,而是應該主動發出一個停止信號,表示停止通信。

5.器件地址
最低位=0,表示寫操作? 10100000---寫地址 ---主機給從機發數據(0xA0)

最低位 = 1,表示讀操作? 10100001(0xA1)---讀地址---主機從從機讀數據(從機給主機發送數據)

1010說明書查的,000是電路設計時接地可以查原理圖,0寫1讀

6.IIC時序

6.1 空閑狀態

指的是不傳輸任何數據的時候就被稱為空閑狀態,IIC總線規定SDA數據線和SCL時鐘線在不傳輸數據的時候都應該設置高電平,表示空閑。

6.2 開始信號

在SCL(時鐘線)為高電平期間,SDA(數據線)從高電平跳變到低電平(下降沿)。

SDA: ----------------\_____
↓ (下降沿)
SCL: --------/ˉˉˉˉˉˉˉ\_____
↑ (SCL高時SDA跳變)

void OELD_IIC_Start(void)
{
//1.設置SDA引腳為輸出模式
OLED_IIC_SDAOutputMode();

//2.確保SDA和SCL為高電平
OLED_IIC_SCL_WRITE(1);
OLED_IIC_SDA_WRITE(1);
Delay_us(5); ? ? ? ? ? ?//提高程序可靠性

//3.把SDA引腳拉低
OLED_IIC_SDA_WRITE(0);
Delay_us(5); ? // IIC總線的通信速率為100KHZ ?1000000us = 100000HZ ?10us = 1HZ?

//4.把SCL引腳拉低,表示準備通信
OLED_IIC_SCL_WRITE(0);
}

6.3 數據發送

6.4 應答信號

6.5 數據接收

6.6 停止信號

停止信號由主設備(Master)發出,時序特征為:SCL(時鐘線)保持高電平期間SDA(數據線)從低電平跳變到高電平(上升沿)

SDA: _____/ˉˉˉˉˉˉˉˉ
↑ (上升沿)
SCL: ˉˉˉˉˉˉˉˉˉˉˉˉˉˉ
(保持高電平)

void OLED_IIC_Stop(void)
{
//1.設置SDA引腳為輸出模式
OLED_IIC_SDAOutputMode();

?? ?//2.確保SDA和SCL為低電平
OLED_IIC_SCL_WRITE(0);
OLED_IIC_SDA_WRITE(0);

//4.把SCL引腳拉高
OLED_IIC_SCL_WRITE(1);
Delay_us(5);

//5.把SDA引腳拉高
OLED_IIC_SDA_WRITE(1);
Delay_us(5); ?//確保SDA的電平狀態可以被其他從器件檢測到

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93167.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93167.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93167.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AMD KFD的BO設計分析系列 0:開篇

開啟我始終不敢碰的GPU存儲系列,先上個圖把核心關系表達下,以此紀念。注:圖中kfdm_mm誤寫,應該為kfd_mm,不修改了,請大家不要介意。

EUDR的核心內容,EUDR認證的好處,EUDR意義

近年來,全球森林退化問題日益嚴峻,毀林行為不僅加劇氣候變化,還威脅生物多樣性和原住民權益。為應對這一挑戰,歐盟于2023年6月正式實施《歐盟零毀林法案》(EU Deforestation-free Regulation, EUDR)&#x…

數據分析專欄記錄之 -基礎數學與統計知識

數據分析專欄記錄之 -基礎數學與統計知識: 1、描述性統計 均值 data_set [10, 20, 30, 40, 50] mean sum(data_set)/len(data_set)np 里面的函數,對二維進行操作時, 默認每一列 mean1 np.mean(data_set) print(mean, mean1)s 0 for i…

《星辰建造師:C++多重繼承的奇幻史詩》

🌌🔥 《星辰建造師:多重繼承與this指針的終極史詩》 🔥🌌—— 一場融合魔法、科技與哲學的C奇幻冒險🌠🌌 序章:代碼宇宙的誕生 🌌🌠在無盡的代碼維度中&#…

云計算-OpenStack 運維開發實戰:從 Restful API 到 Python SDK 全場景實現鏡像上傳、用戶創建、云主機部署全流程

一、python-Restful Api 簡介 Restful API 是一種軟件架構風格,基于 HTTP 協議設計,通過統一的接口(如 URL 路徑)和標準的 HTTP 方法(GET/POST/PUT/DELETE 等)實現資源(如數據、文件等)的操作,具有無狀態、可緩存、客戶端 - 服務器分離等特點。方法如下 用 GET 請求獲…

RxJava 在 Android 中的深入解析:使用、原理與最佳實踐

前言RxJava 是一個基于觀察者模式的響應式編程庫,它通過可觀察序列和函數式操作符的組合,簡化了異步和事件驅動程序的開發。在 Android 開發中,RxJava 因其強大的異步處理能力和簡潔的代碼風格而廣受歡迎。本文將深入探討 RxJava 的使用、核心…

面試實戰 問題三十 HTTP協議中TCP三次握手與四次揮手詳解

HTTP協議中TCP三次握手與四次揮手詳解 在HTTP協議中,連接建立和斷開依賴于底層的TCP協議。雖然HTTP本身不定義握手過程,但所有HTTP通信都通過TCP三次握手建立連接,通過四次揮手斷開連接。以下是詳細解析:一、TCP三次握手&#xff…

讀《精益數據分析》:雙邊市場的核心指標分析

雙邊市場數據分析指南:從指標體系到實戰落地(基于《精益數據分析》框架)在互聯網平臺經濟中,雙邊市場(如電商、出行、外賣、自由職業平臺等)的核心矛盾始終是"供需平衡與效率優化"。這類平臺連接…

Queue參考代碼

queue.c #include "queue.h" #include "stdlib.h" // 初始化循環隊列 void initializeCircularQueue(CircularQueue *cq, uint8_t *buffer, uint32_t size) {cq->front 0;cq->rear 0;cq->count 0;cq->size size;cq->data buffer; }…

通過時間計算地固系到慣性系旋轉矩陣

通過時間計算地固系到慣性系旋轉矩陣 1. 引言 在航天工程和衛星導航領域,經常需要在地固坐標系(ECEF)和慣性坐標系(ECI)之間進行轉換。本文將詳細介紹如何根據UTC時間計算這兩個坐標系之間的旋轉矩陣,并提供完整的C語言實現。 2. 基本概念 2.1 坐標系定義…

【Datawhale AI 夏令營】金融文檔分析檢索增強生成系統的架構演變與方法論進展

# **金融文檔分析檢索增強生成系統的架構演變與方法論進展****第一部分:基礎原則和基線系統分析****第一部分:金融領域檢索增強生成范式的解構****第二部分:基線剖析:流水線的二分法****同步軌跡 (SimpleRAG)****異步改進 (AsyncS…

C語言相關簡單數據結構:順序表

目錄 1.順序表的概念及結構 1.1 線性表 如何理解邏輯結構和物理結構? 1.2 順序表分類 順序表和數組的區別: 順序表分類: 靜態順序表 動態順序表 1.3 動態順序表的實現 初始化 尾插 頭插 尾刪 頭刪 在指定位置之前插入數據 刪…

nginx配置代理服務器

Nginx 作為代理服務器時,主要用于反向代理(最常用,轉發客戶端請求到后端服務)或正向代理(較少用,為客戶端提供訪問外部網絡的代理)。以下是兩種場景的具體配置示例: 一、反向代理配置…

MySQL數據庫知識體系總結 20250813

一、數據庫的原理 1.數據庫的分類 我們可以根據數據的結構類型,將數據分成三類,分別是:結構化數據,半結構化數據,非結構化數據。 要點:對于結構化數據來講通常是先有結構再有數據。要點:對于半…

C++ 中構造函數參數對父對象的影響:父子控件管理機制解析

文章目錄C 中構造函數參數對父對象的影響:父子控件管理機制解析1. Qt 中的父對象管理機制2. 構造函數傳遞父對象的不同方式2.1. 父控件是 QWidget parent(通用方式)分析:2.2. 父控件是 Books_Client parent(限制父控件…

直播美顏SDK開發實戰:高性能人臉美型的架構與實現

在直播行業里,美顏已經不再是錦上添花,而是標配中的標配。無論是游戲主播、帶貨達人,還是唱歌、跳舞的才藝主播,直播美顏SDK往往決定了用戶的第一印象和停留時長。尤其是高性能人臉美型技術,不僅能讓主播的五官更加自然…

JavaWeb(蒼穹外賣)--學習筆記18(Apache POI)

前言 本篇文章是學習B站黑馬程序員蒼穹外賣的學習筆記📑。我的學習路線是Java基礎語法-JavaWeb-做項目,管理端的功能學習完之后,就進入到了用戶端微信小程序的開發,用戶端開發的流程大致為用戶登錄—商品瀏覽(其中涉及…

OpenJDK 17 源碼 安全點輪詢的信號處理流程

OpenJDK 17 源碼,安全點輪詢的信號處理流程如下(重點分析安全點輪詢相關部分):核心信號處理流程信號觸發:當線程訪問安全點輪詢內存頁時(SafepointMechanism::is_poll_address),會觸…

InfluxDB 在工業控制系統中的數據監控案例(一)

工業控制系統數據監控的重要性**在工業領域,生產過程的復雜性和連續性使得數據監控成為保障生產穩定運行的關鍵環節。通過實時收集、處理和分析生產數據,企業能夠及時掌握設備運行狀態、產品質量信息以及生產流程的各項參數,從而為生產決策提…

嵌入式學習(day26)frambuffer幀緩沖

一、UI技術: User interface(1)framebuffer: 幀緩沖、幀緩存技術 Linux內核專門為圖形化顯示提供的一套應用程序接口。流程如下:1. 打開顯示設備 (/dev/fb0) 2. 獲取顯示設備相關參數(分辨率,像素格式)---》…