ARM-I2C軟實現

開發流程

  1. 引腳初始化
  2. 引腳功能定義
  3. 實現讀操作
  4. 實現寫操作

GD32F4軟件I2C初始化

void SoftI2C_init() {// 時鐘配置rcu_periph_clock_enable(SCL_RCU);// 設置輸出模式gpio_mode_set(SCL_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, SCL_PIN);gpio_output_options_set(SCL_PORT, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, SCL_PIN);// 時鐘配置rcu_periph_clock_enable(SDA_RCU);// 設置輸出模式gpio_mode_set(SDA_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, SDA_PIN);gpio_output_options_set(SDA_PORT, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, SDA_PIN);
}
  • I2C引腳高低電平

GD32F4軟件I2C引腳功能

#define SCL_RCU		RCU_GPIOB
#define SCL_PORT	GPIOB
#define SCL_PIN		GPIO_PIN_6
#define SCL_AF		GPIO_AF_4#define SDA_RCU		RCU_GPIOB
#define SDA_PORT	GPIOB
#define SDA_PIN		GPIO_PIN_7
#define SDA_AF		GPIO_AF_4/************** io ***************/
#define SCL(BIT) 		gpio_bit_write(SCL_PORT, SCL_PIN, BIT?SET:RESET)
#define SDA(BIT) 		gpio_bit_write(SDA_PORT, SDA_PIN, BIT?SET:RESET)
#define SDA_STATE() 	gpio_input_bit_get(SDA_PORT, SDA_PIN)#define SDA_IN()  	gpio_mode_set(SDA_PORT, GPIO_MODE_INPUT,  GPIO_PUPD_NONE, SDA_PIN)
#define SDA_OUT() 	gpio_mode_set(SDA_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, SDA_PIN)
  • IO引腳定義
  • 引腳輸出模式高低電平輸出:SCL高和低,SDA高和低
  • SDA模式配置:SDA輸出模式,SDA輸入模式
  • SDA輸入模式狀態讀取。

寫操作

uint8_t SoftI2C_write(uint8_t addr, uint8_t reg, uint8_t* data, uint32_t len) {start();send(addr << 1);			//發送設備寫地址if(wait_ack()) return 1;	//等待響應send(reg);					//發送寄存器地址if(wait_ack()) return 2;	//等待響應do {send(*data++);if(wait_ack()) return 3;} while(--len);stop();return 0;
}

讀操作

?

uint8_t SoftI2C_read(uint8_t addr, uint8_t reg, uint8_t* data, uint32_t len) {start();send(addr << 1);				//發送設備寫地址if(wait_ack()) return 1;		//等待響應send(reg);						//發送寄存器地址if(wait_ack()) return 2;		//等待響應start();send((addr << 1) | 0x01);		//發送設備讀地址if(wait_ack()) return 3;		//等待響應do {*data = recv();data++;if(len != 1) send_ack();	// 發送 ACK} while(--len);send_nack();					// 發送 NACKstop();return 0;
}

?

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

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

相關文章

防水醫用無人機市場報告:現狀、趨勢與洞察

市場規模與增長趨勢在全球醫療科技快速發展的當下&#xff0c;防水醫用無人機市場正嶄露頭角&#xff0c;展現出強勁的發展勢頭。據 QYR統計&#xff0c;2023 年全球醫用無人機市場銷售額達到 1.9 億美元&#xff0c;預計到 2030 年將飆升至 8.5 億美元&#xff0c;年復合增長率…

haproxy代理

一.負載均衡 1.1.什么是負載均衡 負載均衡&#xff1a;Load Balance&#xff0c;簡稱LB&#xff0c;是一種服務或基于硬件設備等實現的高可用反向代理技術&#xff0c;負載均 衡將特定的業務(web服務、網絡流量等)分擔給指定的一個或多個后端特定的服務器或設備&#xff0c;…

【面試】軟件測試面試題

1. 測試用例如何編寫 2. bug的生命周期 項目有多少人&#xff1f;多少條測試用例&#xff1f;多少bug&#xff1f;自己發現的第一條&#xff1f;&#xff08;是不是bug&#xff09; 3. 缺陷管理工具 包括Jira, PingCode, 禪道&#xff0c;BugZilla&#xff0c;Redmine, TAPD&am…

HbuilderX開發小程序

1.打卡HbuilderX&#xff0c;選擇文件—新建—項目2.創建項目3.在HbuilderX中運行前要確定微信開發這工具的服務端口號是打開的4.HbuilderX中點擊預覽可以實時預覽5.在微信開發者中進行本地測試點擊后自動跳轉到微信開發者工具中運行項目

Netty中FastThreadLocal解讀

io.netty.util.concurrent.FastThreadLocal 是 Netty 中提供的高性能線程局部存儲&#xff08;Thread-Local Storage&#xff09;實現&#xff0c;位于 io.netty.util.concurrent 包。它是 Java 標準庫 ThreadLocal 的替代品&#xff0c;旨在優化性能&#xff0c;減少內存分配和…

上海迪士尼游玩攻略 小鐵寄存柜讓你輕松暢玩

去上海迪士尼玩最煩帶一堆行李&#xff0c;其實有小鐵寄存柜幫忙就能輕裝上陣&#xff0c;各個關鍵位置都有分布&#xff0c;玩起來特別省心。?剛到迪士尼的時候&#xff0c;要是坐地鐵到上海國際旅游度假區站&#xff0c;1/2 號口安檢區就有小鐵柜&#xff0c;行李箱、大背包…

飛算科技重磅出品:飛算 JavaAI 重構 Java 開發效率新標桿

在 Java 開發領域&#xff0c;一款由國家級高新技術企業自主研發的智能工具正引發行業關注 —— 飛算 JavaAI 不僅承載著中國原創技術的創新基因&#xff0c;更以貼合實際開發場景的功能設計&#xff0c;成為眾多企業提升 Java 開發效率的核心助力。?作為飛算數智科技&#xf…

python案例:基于python 神經網絡cnn和LDA主題分析的旅游景點滿意度分析

1&#xff0e;緒論1.1研究背景與意義1.1.1研究背景隨著旅游業的快速發展&#xff0c;滿意度分析成為評估旅游景點質量和提升游客體驗的重要手段。作為中國的旅游城市之一&#xff0c;其旅游景點吸引了大量游客。然而&#xff0c;如何科學評估和提升旅游景點的滿意度&#xff0c…

Git快速入門,完整的git項目管理工具教程,git入門到精通!

Git的下載與安裝&#xff1a; 直接去官網下載即可&#xff1b; 或者查看這個博客學會下載:Git 詳細安裝教程&#xff08;詳解 Git 安裝過程的每一個步驟&#xff09;_git安裝-CSDN博客 注意&#xff1a;一個文件夾下只能有一個本地倉庫(就是一個.git) 細節操作

C++day07(三種取整方法)

學習目標 認識流程圖 多種方式解決問題 取整方式和取整函數 1.解決編程問題的過程 1.理解題意,找出關鍵信息。 2.整理思路,用圖或者文字寫出算法。 3.將算法步驟翻譯為C++代碼。 4.編譯運行,修改語法或邏輯錯誤。 不符合則需要回到上一步進行修改。 5 .輸入測試用例與…

Go語言實戰案例-LRU緩存機制模擬

在高性能服務開發中&#xff0c;緩存是提升訪問速度和減少后端負載的重要手段。常見的緩存淘汰策略中&#xff0c;**LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;**是應用最廣的一種。本篇我們用Go語言手寫一個LRU緩存機制的模擬實現。一、LRU緩存…

vue2中實現leader-line-vue連線文章對應字符

效果展示 通過點擊右邊的tag,觸發連接操作 第一步:獲取右邊tag展示 1.右邊的tag列表展示,我這邊是分為兩個list嵌套的數據結構; {"人員": [{

SPEA2(Strength Pareto Evolutionary Algorithm 2)優化算法簡介

前言 提醒&#xff1a; 文章內容為方便作者自己后日復習與查閱而進行的書寫與發布&#xff0c;其中引用內容都會使用鏈接表明出處&#xff08;如有侵權問題&#xff0c;請及時聯系&#xff09;。 其中內容多為一次書寫&#xff0c;缺少檢查與訂正&#xff0c;如有問題或其他拓展…

IDEA 手動下載安裝數據庫驅動,IDEA無法下載數據庫驅動問題解決方案,IDEA無法連接數據庫解決方案(通用,Oracle為例)

一、查詢要下載的數據庫驅動 在IDEA側邊欄找到數據庫&#xff08;databases&#xff09;&#xff0c;新增一個數據連接 右鍵&#xff0c;屬性 點擊下載&#xff0c;查看要下載的驅動版本 二、下載數據庫驅動&#xff08;Oracle為例&#xff09; 下載對應MySQL/Oracle數據庫的…

專業Python爬蟲實戰教程:逆向加密接口與驗證碼突破完整案例

案例背景假設我們需要爬取一家內部測試系統的動態數據API接口。該系統前端頁面使用了復雜的JavaScript混淆技術來防止接口被直接調用&#xff0c;同時對請求參數進行了加密簽名。另外&#xff0c;登錄環節帶有圖形驗證碼用于防護。我們的目標是&#xff1a;分析JavaScript代碼&…

【SQL】Windows MySQL 服務查詢啟動停止自啟動(保姆級)

MySQL是一種開放源代碼的輕量級關系型數據庫管理系統&#xff0c;使用最常用的結構化查詢語言&#xff08;SQL&#xff09;對數據庫進行管理。由于MySQL具有體積小、速度快、成本低、開放源碼等優點&#xff0c;現已被廣泛應用于互聯網上的中小型網站中&#xff0c;并且大型網站…

算法提升之數論(矩陣+快速冪)

通過矩陣和快速冪的方法來解決算法題目可以很好地降低時間復雜度&#xff0c;幫助大家更好地解決題目。下面這道題目有一定難度&#xff0c;希望大家可以好好地理解&#xff0c;相信對大家會有很大的幫助。問題描述有 n(2≤n≤10) 個玩家玩游戲&#xff0c;他們按 1 到 n 編號。…

數學建模算法-day[14]

6.2 傳染病預測問題 問題提出 世界上存在很多傳染病&#xff0c;如何根據其傳播機理預測疾病得傳染范圍及染病人數等&#xff0c;對傳染病的控制意義十分重大。 1.指數傳播模型 基本假設 (1) 所研究的區域是一封閉區域&#xff0c;在一個時期內人口總量相對穩定&#xff0c;不考…

Linux救援模式之簡介篇

什么是救援模式&#xff1f;救援模式提供了一個最小的Linux環境&#xff0c;通常只加載最基本的系統組件&#xff0c;允許管理員&#xff1a;修復損壞的系統恢復丟失的文件修改配置文件重置密碼檢查磁盤錯誤重新安裝引導加載程序如何進入救援模式&#xff1f;1. 通過GRUB菜單進…

C++20實戰FlamingoIM開發

C++20 與 Flamingo IM 實例 C++20 引入了許多新特性,如概念(Concepts)、協程(Coroutines)、范圍(Ranges)等。Flamingo IM 是一個即時通訊項目,結合 C++20 的特性可以提升代碼的可讀性和性能。以下是基于 C++20 和 Flamingo IM 的實例。 協程實現異步網絡通信 使用 C…