STM32硬件I2C的注意事項

文章目錄

  • 軟件模擬I2C
  • 硬件的實現方式

最近在研究I2C的屏幕使用。
有兩種使用方式,軟件模擬I2C、硬件HAL使用I2C。

軟件模擬I2C

發送數據是通過設置引腳的高低電平實現的。

/*引腳配置*/
#define OLED_W_SCL(x)		GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)(x))
#define OLED_W_SDA(x)		GPIO_WriteBit(GPIOB, GPIO_Pin_7, (BitAction)(x))/*引腳初始化*/
void OLED_I2C_Init(void)
{// 先關閉 I2C1 避免 PB6/PB7 被干擾// RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, DISABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;GPIO_Init(GPIOB, &GPIO_InitStructure);OLED_W_SCL(1);OLED_W_SDA(1);
}/*** @brief  I2C發送一個字節* @param  Byte 要發送的一個字節* @retval 無*/
void OLED_I2C_SendByte(uint8_t Byte)
{uint8_t i;for (i = 0; i < 8; i++){OLED_W_SDA(Byte & (0x80 >> i));OLED_W_SCL(1);OLED_W_SCL(0);}OLED_W_SCL(1);	//額外的一個時鐘,不處理應答信號OLED_W_SCL(0);
}

硬件的實現方式

/*** @brief 向OLED發送指令*/
void OLED_SendCmd(uint8_t cmd) {static uint8_t sendBuffer[2] = {0};sendBuffer[1] = cmd;OLED_Send(sendBuffer, 2);
}/*** @brief 向OLED發送數據的函數* @param data 要發送的數據* @param len 要發送的數據長度* @return None* @note 此函數是移植本驅動時的重要函數 將本驅動庫移植到其他平臺時應根據實際情況修改此函數*/#define I2C_TIMEOUT 100  // 超時時間(單位:ms)
uint8_t OLED_Send(uint8_t *data, uint8_t len) {
//  HAL_I2C_Master_Transmit(&hi2c1, OLED_ADDRESS, data, len, HAL_MAX_DELAY);HAL_StatusTypeDef status = HAL_I2C_Master_Transmit(&hi2c1, OLED_ADDRESS, data, len, I2C_TIMEOUT);if (status != HAL_OK) {// 打印錯誤(如果你有串口)// printf("I2C Error: %d\n", status);// 重置 I2CI2C_Reset(&hi2c1);// 嘗試重發一次status = HAL_I2C_Master_Transmit(&hi2c1, OLED_ADDRESS, data, len, I2C_TIMEOUT);// 如果還是不行,返回失敗if (status != HAL_OK) {return 0;  // 失敗}}return 1;  // 成功}

HAL_I2C_Master_Transmit 會引起卡死的操作,所以要設置一下超時時間為100ms。
也不知道底層是怎么配置的。

驅動 IC 為 SSD1306,程序重啟的時候需要重新配置一下I2C,不然對應的硬件端口會卡死。

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

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

相關文章

Python捕獲異常

Python捕獲異常主要通過try-except語句實現&#xff0c;以下是核心語法和使用場景&#xff1a;一、基礎捕獲結構try: # 可能引發異常的代碼 result 10 / 0 except ZeroDivisionError: # 處理特定異常 print("除數不能為零") 二、捕獲多種異常try: # 可能引發…

Scala 和 Spark 大數據分析(六)

原文&#xff1a;annas-archive.org/md5/39eecc62e023387ee8c22ca10d1a221a 譯者&#xff1a;飛龍 協議&#xff1a;CC BY-NC-SA 4.0 第十三章&#xff1a;我的名字是貝葉斯&#xff0c;樸素貝葉斯 “預測是非常困難的&#xff0c;尤其是當它涉及未來時” -尼爾斯玻爾 機器學…

【kubernetes】-6污點與污點容忍

文章目錄污點與污點容忍1、 污點&#xff08;taint&#xff09;2、操作命令3、污點容忍4、污點擴展污點與污點容忍 1、 污點&#xff08;taint&#xff09; 污點是節點的屬性&#xff0c;用于排斥一類特定的 Pod。通過污點&#xff0c;可以避免 Pod 被調度到不合適的節點上 …

定義損失函數并以此訓練和評估模型

基礎神經網絡模型搭建 【Pytorch】數據集的加載和處理&#xff08;一&#xff09; 【Pytorch】數據集的加載和處理&#xff08;二&#xff09; 損失函數計算模型輸出和目標之間的距離。通過torch.nn 包可以定義一個負對數似然損失函數&#xff0c;負對數似然損失對于訓練具有多…

電子書轉PDF格式教程,實現epub轉PDF步驟

EPUB 格式屬于流式文檔&#xff0c;在屏幕尺寸各異的設備上都能自動適配顯示。然而&#xff0c;要是你使用的是特定的閱讀設備&#xff0c;像打印機、不支持 EPUB 格式的電子閱讀器&#xff08;例如某些早期的 Kindle 型號&#xff09;&#xff0c;或者需要在固定尺寸的屏幕上展…

Java學習第六十九部分——RabbitMQ

目錄 一、前言提要 二、基本信息 1. 關鍵定義 2. 核心角色 3. 交換機類型 三、消息生命周期與可靠性機制 四、生態集成——與Java 五、應用場景 六、性能與選型對比 七、生產級最佳實踐——基于Java 八、應用場景 九、一句話總結 一、前言提要 Spring AMQP是…

MDAC2.6問題解決指南:解決.NET Framework數據訪問煩惱

MDAC2.6問題解決指南&#xff1a;解決.NET Framework數據訪問煩惱 【下載地址】MDAC2.6問題解決指南 MDAC 2.6 問題解決指南為您提供了針對.NET Framework數據提供程序要求使用Microsoft Data Access Components (MDAC) 2.6或更高版本的全面解決方案。本指南詳細介紹了如何在開…

會話跟蹤模式

一、圖片講了什么&#xff1f;這張圖片主要講的是“會話跟蹤技術”&#xff0c;也就是網站怎么記住你是誰、你做了什么。1. 什么是會話&#xff1f;會話&#xff08;Session&#xff09;就像你和網站的一次聊天&#xff0c;從你打開網頁到關閉網頁&#xff0c;這段時間就是一次…

C語言開發工具Win-TC

如你所知&#xff0c;WIN-TC是一個turbo C2 WINDOWS 平臺開發工具&#xff0c;最大特點是支持中文界面&#xff0c;支持鼠標操作&#xff0c;程序段復制&#xff0c;為初學 c 語言、對高等編程環境不熟悉的同志們非常有幫助。該軟件使用 turbo C2 為內核&#xff0c;提供 WINDO…

lwIP學習記錄5——裸機lwIP工程學習后的總結

1、ping包的TTL生存時間如何修改當我們把工程燒錄到板子上是&#xff0c;我們對板子的IP進行ping包&#xff0c;看到信息如下圖這時候我好奇TTL是什么作用&#xff0c;為什么有的設備是64有的設備是128有的是255&#xff1f;解&#xff1a;TTL&#xff08;Time to Live&#xf…

利用Trae將原型圖轉換為可執行的html文件,感受AI編程的魅力

1、UI設計原型效果2、通過Tare對話生成的效果圖&#xff08;5分鐘左右&#xff09;3、查資料做的效果圖&#xff08;30分鐘左右&#xff09;&#xff09;通過以上對比&#xff0c;顯然差別不多能滿足要求&#xff0c;只需要在繼續優化就能搞定&#xff1b; 4、Trae生成的源碼&l…

Chessboard and Queens

題目描述Your task is to place eight queens on a chessboard so that no two queens are attacking each other. As an additional challenge, each square is either free or reserved, and you can only place queens on the free squares. However, the reserved squares …

菜鳥教程R語言一二章閱讀筆記

菜鳥教程R語言一二章閱讀筆記 一.R語言基礎教程 R 語言是為數學研究工作者設計的一種數學編程語言&#xff0c;主要用于統計分析、繪圖、數據挖掘。側重于數學工作者 R語言特點如下&#xff1a; R 語言環境軟件屬于 GNU 開源軟件&#xff0c;兼容性好、使用免費 語法十分有利于…

Tactile-VLA:解鎖視覺-語言-動作模型的物理知識,實現觸覺泛化

25年7月來自清華、中科大和上海交大的論文“Tactile-VLA: Unlocking Vision-Language- Action Model’s Physical Knowledge For Tactile Generalization ”。 視覺-語言-動作 (VLA) 模型已展現出卓越的成就&#xff0c;這得益于其視覺-語言組件豐富的隱性知識。然而&#xff0…

HTML初學者第五天

<1>表格標簽1.1基本語法<table><tr><td>單元格內的文字</td>...</tr>... </table>1.<table></table>是用于定義表格的標簽。2.<tr></tr>標簽用于定義表格中的行&#xff0c;必須嵌套在<table></ta…

FastAPI入門:demo、路徑參數、查詢參數

demo from fastapi import FastAPIapp FastAPI()app.get("/") async def root():return {"message": "Hello World"}在終端運行 fastapi dev main.py結果如下&#xff1a;打開http://127.0.0.1:8000&#xff1a;交互式API文檔&#xff1a;位于h…

pytest中的rerunfailures的插件(失敗重試)

目錄 1-- 安裝rerunfailures插件 2-- rerunfailures的使用 3-- 重試案例 安裝rerunfailures插件 pip install pytest-rerunfailures點擊左下角的控制臺面板 輸入 pip install pytest-rerunfailures 出現上圖的情況就算安裝完成了 rerunfailures的使用 可以添加一下參數使用&…

SpringMVC——建立連接

建立連接 將用戶&#xff08;瀏覽器&#xff09;和java程序連接起來&#xff0c;也就是訪問一個地址能夠調用到我們的Spring程序。在 Spring MVC 中使用 RequestMapping來實現URL 路由映射&#xff0c;也就是瀏覽器連接程序的作用。 1.RequestMapping注解介紹 RequestMapping…

蘑菇云路由器使用教程

1: 手機連接路由器的Wi-Fi&#xff0c;在瀏覽器輸入背面IP地址&#xff1a;192.168.132.1進入路由管理界面1.1: 電腦連接路由器網線在瀏覽器輸入背面IP地址&#xff1a;192.168.132.1進入路由管理界面賬號&#xff1a;admin密碼&#xff1a;123456782:選擇上網模式2.1&#xff…

ubuntu的tar解壓指令相關

1. 指令說明參數作用-xextract&#xff0c;解包-z通過 gzip 解壓&#xff08;.tar.gz、.tgz&#xff09;-vverbose&#xff0c;顯示過程-ffile&#xff0c;后面緊跟壓縮包文件名2. 什么時候用z參數場景是否加 -z結果.tar.gz / .tgz? 必須加 -z正常解壓.tar.gz / .tgz? 沒加 -…