Linux開發講課22---I2C讀寫 EEPROM 實驗(含代碼)

????????EEPROM 是一種掉電后數據不丟失的存儲器,常用來存儲一些配置信息,以便系統重新上電的時候加載之。 EEPOM 芯片最常用的通訊方式就是 I2C 協議,本小節以 EEPROM的讀寫實 驗為大家講解 STM32 的 I2C 使用方法。實驗中 STM32 的 I2C 外設采用主模式,分別用作主發送器和主接收器, 通過查詢事件的方式來確保正常通訊。

1 硬件設計

圖 1?EEPROM 硬件連接圖

????????本實驗板中的 EEPROM 芯片(型號: AT24C02)的 SCL 及 SDA 引腳連接到了 STM32 對應的 I2C 引腳中,結合上拉電阻,構成了 I2C 通訊總線,它們通過 I2C 總線交互。

????????EEPROM 芯片 的設備地址一共有 7 位,其中高 4 位固定為: 1010 b,低 3 位則由 A0/A1/A2信號線的電平決定,見圖 3,圖中的 R/W 是讀寫方向位,與地址無關。

圖 2 EEPROM 設備地址

????????按照我們此處的連接, A0/A1/A2 均為 0,所以 EEPROM 的 7 位設備地址是: 1010000b ,即 0x50。

????????由于 I2C 通訊時常常是地址跟讀寫方向連在一起構成一個 8 位數,且當R/W 位為 0 時,表示寫方向,所以加上 7 位地址,其值為“0xA0”,常稱該值為 I2C 設備的“寫地址”;當 R/W 位為 1 時,表示讀方向,加上 7 位地址,其值為“0xA1”,常稱該值為“讀地址”。

????????EEPROM 芯片中還有一個 WP 引腳,具有寫保護功能,當該引腳電平為高時,禁止寫入數據,當引腳為低電平時,可寫入數據,我們直接接地,不使用寫保護功能。

2 軟件設計

????????為了使工程更加有條理,我們把讀寫 EEPROM 相關的代碼獨立分開存儲,方便以后移植。在“工程模板”之上新建“bsp_i2c_ee.c”及“bsp_i2c_ee.h”文件,這些文件的命名不屬于 STM32 標準庫的內容,是由我們自己根據應用需要編寫的。

????????編程要點

????????(1) 配置通訊使用的目標引腳為開漏模式;

????????(2) 使能 I2C 外設的時鐘;

????????(3) 配置 I2C 外設的模式、地址、速率等參數并使能 I2C 外設;

????????(4) 編寫基本 I2C 按字節收發的函數;

????????(5) 編寫讀寫 EEPROM 存儲內容的函數;

????????(6) 編寫測試程序,對讀寫數據進行校驗。 以ByteWrite過程舉例(其余根據時序圖去編寫即可)

圖3 EEPROM 單字節寫入時序

????????產生I2C起始信號

????????設置超時等待時間

????????檢測 EV5 事件并清除標志(并設置超時等待)

????????發送 EEPROM 設備地址

????????檢測 EV6 事件并清除標志(并設置超時等待)

????????發送要寫入的 EEPROM 內部地址(即 EEPROM 內部存儲器的地址)

????????檢測 EV8 事件并清除標志(并設置超時等待)

????????發送一字節要寫入的數據

????????檢測 EV8 事件并清除標志(并設置超時等待)

????????發送停止信號

I2C 硬件相關宏定義

把 I2C 硬件相關的配置都以宏的形式定義到 “bsp-i2c-ee.h”文件中。

‘bsp-i2c-ee.h’

‘bsp-i2c-ee.c’

????????在 I2C 通訊的很多過程,都需要檢測事件,當檢測到某事件后才能繼續下一步的操作,但有時通訊錯誤或者 I2C 總線被占用,我們不能無休止地等待下去,所以我們設定每個事件檢測 都有等待的時間上限,若超過這個時間,我們就調用 I2C_TIMEOUT_UserCallback 函數輸出調試信息(或可以自己加其它操作),并終止 I2C通訊。

’main.c‘

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

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

相關文章

防止它人代碼調試?分享 1 段優質 JS 代碼片段!

大家好,我是大澈! 本文約 600 字,整篇閱讀約需 1 分鐘。 每日分享一段優質代碼片段。 今天分享一段 JS 代碼片段,是防止代碼被調試或篡改的基礎。 老規矩,先閱讀代碼片段并思考,再看代碼解析再思考&#…

如何輕松解決復雜文檔格式轉換問題

上周,我遇到了一個棘手的問題:需要將一大堆PDF文件轉換成可編輯的Word文檔,時間緊迫,手動轉換根本來不及。朋友推薦我使用了一個網站——xuelin.cc,這個網站不僅提供強大的AI對話功能,還能輕松完成各種文檔…

Hadoop3:Yarn框架的三種調度算法

一、概述 目前,Hadoop作業調度器主要有三種:FIFO、容量(Capacity Scheduler)和公平(Fair Scheduler)。Apache Hadoop3.1.3默認的資源調度器是Capacity Scheduler。 CDH框架默認調度器是Fair Scheduler。 …

改機軟件有哪些?實現一鍵新機、改串號、改IMEI和手機參數的需求 硬改手機軟件,新機環境模擬 設備偽裝,一鍵改機,一鍵復原

這次針對可以直接開端口修改參數的機型做一些工具解析 前面接觸合作過很多工作室。其中很多工作室對于各自軟件的跳驗證有各自的需求。 一個機型各項參數一般有IMEI WiFi 藍牙 sn psb ESN等等。 針對這些參數的修改首先要明白各自軟件檢測的具體是哪些參數來驗證。 對于常用…

#HDC2024 心得分享#主題演講學習-加入鴻蒙生態正當時

一、主題演講學習心得 通過本次主題演講的聆聽與學習,我們在猜出中和不太確定的相關內容紛紛呈現。比如鴻蒙內核與HarmonyOS Next獲得行業內最高等級的安全認證;盤古大模型、小藝智能體、意圖理解與分發框架等構筑的AI、AIGC能力對HarmonyOS Next及原生…

MySQL高級-索引-使用規則-覆蓋索引回表查詢

文章目錄 1、覆蓋索引1.1、查看索引1.2、刪除單列索引 idx_user_pro1.3、查詢 profession軟件工程 and age31 and status01.4、執行計劃 profession軟件工程 and age31 and status01.5、執行計劃 select id,profession,age,status1.6、執行計劃 select id,profession,age,statu…

Transformer教程之多頭自注意力機制

大家好,今天我們要聊一聊Transformer中的一個核心組件——多頭自注意力機制。無論你是AI領域的新手,還是深度學習的老鳥,這篇文章都會幫助你更深入地理解這個關鍵概念。我們會從基礎開始,逐步深入,最終讓你對多頭自注意…

軟考《信息系統運行管理員》-1.3信息系統運維的發展

1.3信息系統運維的發展 我國信息系統運維的發展總體現狀 呈現三個“二八現象” 從時間周期看(開發流程)從信息系統效益看(消息體現為“用好”)從資金投入看(重開發,輕服務) 信息系統運維的發…

Codeforces Beta Round 32 (Div. 2, Codeforces format) D. Constellation 題解 枚舉

Constellation 題目描述 A star map in Berland is a checked field n m nm nm squares. In each square there is or there is not a star. The favorite constellation of all Berland’s astronomers is the constellation of the Cross. This constellation can be for…

JAVA高級進階13單元測試、反射、注解

第十三天、單元測試、反射、注解 單元測試 介紹 單元測試 就是針對最小的功能單元(方法),編寫測試代碼對其進行正確性測試 咱們之前是如何進行單元測試的? 有啥問題 ? 只能在main方法編寫測試代碼,去調用其他方法進行測試。 …

頁面開發感想

頁面開發 1、 前端預覽 2、一些思路 2.1、首頁自定義element-plus的走馬燈 :deep(.el-carousel__arrow){border-radius: 0%;height: 10vh; }需要使用:deep(標簽)才能修改樣式 或者 ::v-deep 標簽 2.2、整體設計思路 <template><div class"card" style&…

【ChatBI】text2sql-不需要訪問數據表-超輕量Python庫Vanna快速上手,對接oneapi

oneapi 準備 首先確保你有oneapi &#xff0c;然后申請 kimi的api 需要去Moonshot AI - 開放平臺 然后添加一個api key 然后打開oneapi的渠道界面&#xff0c;添加kimi。 然后點擊 測試&#xff0c; 如果能生成響應時間&#xff0c;就是配置正確。 然后創建令牌 http:…

Vllm Offline 啟動

Vllm Offline 啟動 Vllm Offline 啟動&#xff0c;設置環境變量&#xff0c; TRANSFORMERS_OFFLINE1reference: https://github.com/vllm-project/vllm/discussions/1405

Linux shell編程學習筆記60:touch命令

0 前言 在csdn技能樹Linux入門的練習題中&#xff0c;touch是最常見的一條命令。這次我們就來研究它的用法。 1 touch命令的功能、格式和選項說明 我們可以使用touch --help命令查看touch命令的幫助信息。 [purpleendurer bash ~ ]touch --help Usage: touch [OPTION]... …

MATLAB-NGO-CNN-SVM,基于NGO蒼鷹優化算法優化卷積神經網絡CNN結合支持向量機SVM數據分類(多特征輸入多分類)

NGO-CNN-SVM&#xff0c;基于NGO蒼鷹優化算法優化卷積神經網絡CNN結合支持向量機SVM數據分類(多特征輸入多分類) 1.數據均為Excel數據&#xff0c;直接替換數據就可以運行程序。 2.所有程序都經過驗證&#xff0c;保證程序可以運行。 3.具有良好的編程習慣&#xff0c;程序均…

【Android面試八股文】Activity A跳轉B,B跳轉C,A不能直接跳轉到C,A如何傳遞消息給C?

文章目錄 1. 使用Intent傳遞消息2. 使用全局單例類(Singleton)3. 使用靜態變量4. 使用Application全局靜態變量5. 使用 Android系統剪切板(Clipboard)6. 本地化存儲方式6.1 使用SharedPreferences6.2 使用File文件存儲方式傳遞消息6.3 使用SQLite數據庫方式傳遞消息7. 使用廣…

【Spring Boot】Java 的數據庫連接模板:JDBCTemplate

Java 的數據庫連接模板&#xff1a;JDBCTemplate 1.JDBCTemplate 初識1.1 JDBC1.2 JDBCTemplate 2.JDBCTemplate 實現數據的增加、刪除、修改和查詢2.1 配置基礎依賴2.2 新建實體類2.3 操作數據2.3.1 創建數據表2.3.2 添加數據2.3.3 查詢數據2.3.4 查詢所有記錄2.3.5 修改數據2…

【ai】tx2 nx:ubuntu18.04 yolov4-triton-tensorrt 成功部署server 運行

isarsoft / yolov4-triton-tensorrt運行發現插件未注冊? 【ai】tx2 nx: jetson Triton Inference Server 部署YOLOv4 【ai】tx2 nx: jetson Triton Inference Server 運行YOLOv4 對main 進行了重新構建 【ai】tx2 nx :ubuntu查找NvInfer.h 路徑及哪個包、查找符號【ai】tx2…

深度學習實戰81-基于大模型的Chatlaw法律問答中的知識圖譜融合思路,數據集說明、以及知識圖譜對ChatLaw的影響介紹

大家好,我是微學AI,今天給大家介紹一下深度學習實戰81-基于大模型的Chatlaw法律問答中的知識圖譜融合思路,數據集說明、以及知識圖譜對ChatLaw的影響介紹。基于大模型的Chatlaw法律問答系統融合了知識圖譜,以提高法律咨詢服務的可靠性和準確性。Chatlaw通過結合知識圖譜與人…

AES加密算法及AES-CMAC原理白話版系統解析

本文框架 前言1. AES加密理論1.1 不同AES算法區別1.2 加密過程介紹1.2.1 加密模式和填充方案選擇1.2.2 密鑰擴展1.2.3分組處理1.2.4多輪加密1.2.4.1字節替換1.2.4.2行移位1.2.4.3列混淆1.2.4.4輪密鑰加1.3 加密模式1.3.1ECB模式1.3.2CBC模式1.3.3CTR模式1.3.4CFB模式1.3.5 OFB模…