STM32+模擬或硬件IIC+SHT20驅動問題:接上拉電阻、BUSY死鎖?

主要問題:
1,使用STM32F103C8T6,模擬IIC,SCL和SDA口配置為推挽輸出上拉,主要是SDA腳,每次都要輸出輸入模式重新配置,雖然也能通信,但不穩定,出錯率大;
2,后將SCL和SDA口配置為開漏輸出上拉,仍是IO模擬IIC,開漏的特點是寫1時,是使用上拉電阻將總線拉高,總線處于“釋放”狀態,其他器件2可以拉低,寫0是總線接地,總線此時是不能被其他器件拉高的,所示總線處于被寫0一方的的占用或者強制。而我的stm32無外接上拉電阻,SHT20的SCL和SDA也無外接上拉電阻,這時使用HAH庫的寫高,是無法拉高的,后將SCL和SDA腳都加了10K上拉電阻后,通信正常;
3,也可以使用STM32CubeMX配置為硬件IIC進行通信,也要外接上拉電阻,但此方法還未嘗試,發現網上說STM32F103系列的IIC使用HAH庫發送函數返回BUSY,存在BUSY鎖死問題,暫時未用。

下圖是SCL和SDA腳配置為推挽上拉輸出方式通信,的宏定義,SDA每次操作都要重新配置輸入或輸出,此方法在IIC通信中不可取:
請添加圖片描述
再來說說SHT20的驅動,我使用非主機模式,默認溫度測量需要等待80幾ms,如果使用裸機,只有阻塞延遲,太浪費時間了,還是要加實時操作系統的,像FREERTOS。
如下模擬IIC讀測值代碼,也有問題,還未調通!!!

void SHT2x_MeasureHM(etSHT2xMeasureType eSHT2xMeasureType)
{  uint8_t checksum; uint16_t i = 0; uint8_t back_flag = 1; I2c_StartCondition();back_flag = I2c_WriteByte(I2C_ADR_W);if(back_flag == ACK){ sensor_warning_flag = 0;switch(eSHT2xMeasureType){ case HUMIDITY: back_flag = I2c_WriteByte(TRIG_RH_MEASUREMENT_POLL); break;case TEMP :    back_flag = I2c_WriteByte(TRIG_T_MEASUREMENT_POLL); break;default: break;}if(back_flag == ACK)//-- wait until hold master is released --{I2c_StopCondition();DelayMicroSeconds(80000);   //等待最大80msback_flag = I2c_WriteByte(I2C_ADR_R);while(back_flag== NACK){I2c_StopCondition();DelayMicroSeconds(80000*(++i)); //等待測量時間I2c_StartCondition();back_flag = I2c_WriteByte(I2C_ADR_R);if (i>=2) {error |= TIME_OUT_ERROR;return;}};//-- read two data bytes and one checksum byte --dat[0] = I2c_ReadByte(ACK);  //高8位數據dat[1] = I2c_ReadByte(ACK);  //低8位數據checksum= I2c_ReadByte(NACK);  //8位校驗位數據//-- verify checksum --error = SHT2x_CheckCrc(dat,2,checksum);I2c_StopCondition();}elseerror |= ACK_ERROR;}elseerror |= ACK_ERROR;
}

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

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

相關文章

【工業機器視覺】基于深度學習的水表盤讀數識別(3-數據標注與轉換)

【工業機器視覺】基于深度學習的儀表盤識讀(2)-CSDN博客 數據標注 標注擴展 Labelme 和 LabelImg 都是用于創建機器學習和計算機視覺項目所需標注數據的工具。它們都允許用戶通過圖形界面手動標注圖像,但各自有其特點和適用場景。 Labelme…

靜態路由與交換機配置實驗

1.建立網絡拓撲 添加2臺計算機,標簽名為PC0、PC1;添加2臺二層交換機2960,標簽名為S0、S1;添加2臺路由器2811,標簽名為R0、R1;交換機劃分的VLAN及端口根據如下拓撲圖,使用直通線、DCE串口線連接…

【Spark】Spark Join類型及Join實現方式

Spark Join類型 1. Inner Join (內連接) 示例:val result df1.join(df2, df1("id") df2("id"), "inner")執行邏輯:只返回那些在兩個表中都有匹配的行。 2. Left Join (左外連接) 示例:val result df1.jo…

socket UDP 環路回顯的服務端

基于socket通訊的方式&#xff0c;無論用http或者udp或者自定義的協議&#xff0c;程序結構都是類似的。這個以UDP協議為例簡要說明。 #include <stdio.h> // 標準輸入輸出庫 #include <sys/types.h> // 提供了一些數據類型&#xff0c;如ssize_t #include <sy…

Linux:network:添加ip的時候自動添加一個本地路由

文章目錄 問題問題 最近在看一個路由的問題,順便看內核代碼,發現在添加IP的時候,內核會自動添加一個local route。 net/ipv4/devinet.c inet_rtm_newaddr->__inet_insert_ifa /* Send message first, then call notifier.Notifier will trigger FIB update, so thatlis…

Magnet Player:一款基于Web的磁力鏈媒體播放器

Magnet Player&#xff1a;一款基于Web的磁力鏈媒體播放器 項目地址:https://gitcode.com/gh_mirrors/ma/magnet-player 是一個創新的開源項目&#xff0c;它允許用戶直接在瀏覽器中播放磁力鏈&#xff08;Magnet URI&#xff09;內容&#xff0c;無需下載或安裝任何桌面應用…

php:完整部署Grid++Report到php項目,并實現模板打印

一、下載Grid++Report軟件 路徑:開發者安裝包下載 - 銳浪報表工具 二、 安裝軟件 1、對下載的壓縮包運行內部的exe文件 2、選擇語言 3、 完成安裝引導 下一步即可 4、接收許可協議 點擊“我接受” 5、選擇安裝路徑 “瀏覽”選擇安裝路徑,點擊"安裝" 6、完成…

web安全攻防入門教程

Web安全攻防入門教程 Web安全攻防是指在Web應用程序的開發、部署和運行過程中&#xff0c;保護Web應用免受攻擊和惡意行為的技術與策略。這個領域不僅涉及防御措施的實現&#xff0c;還包括通過滲透測試、漏洞挖掘和模擬攻擊來識別潛在的安全問題。 本教程將帶你入門Web安全攻…

前端node環境安裝:nvm安裝詳細教程(安裝nvm、node、npm、cnpm、yarn及環境變量配置)

需求&#xff1a;在做前端開發的時候&#xff0c;有的時候 這個項目需要 node 14 那個項目需要 node 16&#xff0c;我們也不能卸載 安裝 。這豈不是很麻煩。這個時候 就需要 一個工具 來管理我們的 node 版本和 npm 版本。 下面就分享一個 nvm 工具 用來管理 node 版本。 這個…

Unity在運行狀態下,當物體Mesh網格發生變化時,如何讓MeshCollider碰撞體也隨之實時同步變化?

舊版源代碼地址&#xff1a;https://download.csdn.net/download/qq_41603955/90087225?spm1001.2014.3001.5501 舊版效果展示&#xff1a; 新版加上MeshCollider后的效果&#xff1a; 注意&#xff1a;在Unity中&#xff0c;當你動態地更改物體的Mesh時&#xff0c;通常期望…

OpenCV--特征匹配

OpenCV--特征匹配 代碼和筆記 代碼和筆記 import cv2 import numpy as np""" 特征匹配 """""" 暴力特征匹配&#xff1a;使用第一組&#xff08;第一幅圖&#xff09;中的一個特征描述子&#xff0c;使用一些距離計算與第二組中…

什么是自動化辦公

自動化辦公是指使用技術工具或軟件&#xff0c;通過預設流程或腳本&#xff0c;自動執行日常辦公任務&#xff0c;從而提升效率、減少錯誤、節約時間的辦公模式。它適用于需要重復性、規則明確的工作流程&#xff0c;讓員工將精力集中在更具創造性和戰略性的工作上。 自動化辦公…

常見排序算法總結 (四) - 快速排序與隨機選擇

快速排序 算法思想 每一輪在數組相應的范圍上隨機找一個元素進行劃分&#xff0c;將不大于它的所有元素都放到左邊&#xff0c;將大于它的元素都放到右邊。在左右兩個子數組上不斷地遞歸&#xff0c;直到整個數組上有序。 注意&#xff1a;實現時選擇的時參考荷蘭國旗問題優化…

unraid固態硬盤分區格式—默認1MiB對齊

背景 我的unraid中有三個機械硬盤和兩個固態硬盤&#xff0c;其中兩個固態硬盤組成zfs鏡像的cache&#xff0c;防止其中一個硬盤出問題導致數據丟失。然而&#xff0c;今天突然看到機械硬盤的分區格式為GPT 4k&#xff0c;而固態硬盤是MBR 1MiB。想到GPT更加優秀&#xff0c;并…

Flutter 圖片編輯板(一) 事件路由

一個圖片編輯板&#xff0c;有兩部分組成。編輯板和內容項。每一個內容項是被InteractiveViewer修飾的widget&#xff0c;具有縮放偏移的功能。 在圖片編輯板上&#xff0c; 會有多個內容相&#xff0c;圖片或文字&#xff08;添加文字目前還沒做過&#xff09;。 當要編輯其中…

數倉技術hive與oracle對比(一)

準備 包括軟硬件環境、數據、測試數據三方面的準備內容。 環境 虛擬機軟件virtualbox7&#xff0c;同樣的虛擬機配置&#xff1a;內存2G、cpu一核&#xff0c;物理主機同一臺macbookpro&#xff08;13-2020款&#xff09;&#xff0c;所以硬盤IO讀寫速度一致。 綜上&#x…

AR眼鏡_消費級工業AR智能眼鏡主板硬件解決方案

AR眼鏡的研發是一項復雜的軟硬件集成工程&#xff0c;它需要在攝影、音頻、交互和連接等多個方面提供卓越的基礎體驗&#xff0c;因此產品的每個細節都顯得尤為重要。 在設計AR眼鏡時&#xff0c;重量、體積和散熱性能都是必須認真考量的關鍵因素。在芯片平臺的選擇上&#xff…

通信原理概論復習筆記(1)

1 緒論 消息: 通信系統傳輸對象, 信息的載體和物理表現形式. 信息: 消息的有效內容和內涵. 信號: 消息的傳輸載體. 模擬通信: 信源 → \to → 調制器 → \to → 信道(噪聲) → \to → 解調器 → \to → 信宿. 數字通信: 信源 → \to → 信源編碼(壓縮數字化) → \to →…

ASPICE評估如何優化軟件開發、測試和部署流程

ASPICE&#xff08;Automotive SPICE&#xff0c;即汽車軟件過程改進及能力評定&#xff09;評估在提高軟件開發、測試、部署的速度和質量方面發揮著重要作用。以下是ASPICE評估如何具體提高這些環節的具體方式&#xff1a; 一、提高軟件開發效率 標準化流程&#xff1a;ASPIC…

【OpenCV】Canny邊緣檢測

理論 Canny 邊緣檢測是一種流行的邊緣檢測算法。它是由 John F. Canny 在 1986 年提出。 這是一個多階段算法&#xff0c;我們將介紹算法的每一個步驟。 降噪 由于邊緣檢測易受圖像中的噪聲影響&#xff0c;因此第一步是使用 5x5 高斯濾波器去除圖像中的噪聲。我們在前面的章…