在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

教你如何有效解決I2C配置順序引發無法收發數據問題

STM32單片機 ? 來源:未知 ? 作者:佚名 ? 2017-11-12 08:55 ? 次閱讀

前言

在參考Cube軟件包中I2C例程后, 根據應用需要新增了一路I2C接口,結果新增I2C無法收發數據。本文主要對問題進行描述,分析產生原因,提供解決方法。

問題描述

如前言所述,現象表現為I2C無法收發數據。得無法理解之處,在于之前已經完成了I2C的移植工作,并且運行正常。現在遵照正確的方式,新添一路I2C接口,只是更改了對應的I2C接口及引腳,為什么無法收發數據。簡化測試程序如下。

GPIO_InitTypeDef GPIO_InitStruct;

/* Enable GPIOTX/RX clock */

I2Cx_SCL_GPIO_CLK_ENABLE();

I2Cx_SDA_GPIO_CLK_ENABLE();

/* Enable I2Cxclock */

I2Cx_CLK_ENABLE();

/*##-2- Configureperipheral GPIO ###########*/

/* I2C TX GPIOpin configuration */

GPIO_InitStruct.Pin= I2Cx_SDA_PIN;

GPIO_InitStruct.Mode= GPIO_MODE_AF_OD;

GPIO_InitStruct.Pull= GPIO_PULLUP;

GPIO_InitStruct.Speed= GPIO_SPEED_HIGH;

GPIO_InitStruct.Alternate= I2Cx_SCL_SDA_AF;

HAL_GPIO_Init(I2Cx_SDA_GPIO_PORT,&GPIO_InitStruct);

GPIO_InitStruct.Pin= I2Cx_SCL_PIN;

HAL_GPIO_Init(I2Cx_SCL_GPIO_PORT,&GPIO_InitStruct);

I2cHandle.Instance= I2Cx;

I2cHandle.Init.ClockSpeed= 100000;

I2cHandle.Init.DutyCycle= I2C_DUTYCYCLE;

I2cHandle.Init.OwnAddress1= 0;

I2cHandle.Init.AddressingMode= I2C_ADDRESSINGMODE_7BIT;

I2cHandle.Init.DualAddressMode= I2C_DUALADDRESS_DISABLE;

I2cHandle.Init.OwnAddress2= 0;

I2cHandle.Init.GeneralCallMode= I2C_GENERALCALL_DISABLE;

I2cHandle.Init.NoStretchMode= I2C_NOSTRETCH_DISABLE;

if(HAL_I2C_Init(&I2cHandle)!= HAL_OK)

{

/* InitializationError */

Error_Handler();

}

while(1)

{

HAL_I2C_Master_Transmit(&I2cHandle,(uint16_t)I2C_ADDRESS,

(uint8_t*)aTxBuffer, TXBUFFERSIZE, 10000);

}

二 現象分析

將上述程序在STM32F469i-Disco板上實現,復現現象并尋找規律。發現規律如下:

分析上表可以發現問題的產生與硬件設計有一定關系。觀察發現,如果I2C沒有外部上拉時,會導致問題產生。

通過單步調試,定位于HAL_I2C_Master_Transmit(),在這個函數中調用的I2C_WaitOnFlagUntilTimeout()無法執行異常,返回HAL_BUSY,導致了I2C寫功能失敗。在I2C_WaitOnFlagUntilTimeout函數內部,是對忙標志位BUSY@I2Cx_SR2的檢測。通過對參考手冊的閱讀(如下截圖所述),如果在未占用I2C總線時,SDASCL引腳存在低電平,則意味著總線處于忙狀態。這種檢測機制在I2C接口失能時依然工作。

結合程序中調用順序,在I2C3時鐘使能時,雖然I2C3沒有使能,但是忙狀態檢測已經開始。由于對應的SCL引腳上無上拉電阻,并且由于還未對I2C3SCL引腳進行配置。此時SCL引腳為浮空輸入狀態,實際測量發現為低電平,BUSY標志被置位。

三 解決方法

通過現象及分析,可了解到問題可通過硬件或者軟件解決。

硬件方面,為SDASCL引腳提供外部的I2C上拉電阻,問題不在出現。

軟件方面,發現在對SCLSDA引腳配置時會啟用內部上拉。通過將I2C時鐘使能代碼放于I2C引腳配置語句后面,問題也不再出現。

需要注意, I2CSDASCL引腳內部上拉電阻,為弱上拉。使用者可以通過對應型號STM32的數據手冊,查看對應引腳的上拉電阻,以便判斷是否能夠滿足應用需要。如下為STM32F469上拉電阻信息截圖。

==================================


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • I2C
    I2C
    +關注

    關注

    28

    文章

    1534

    瀏覽量

    127029
  • 數據收發
    +關注

    關注

    0

    文章

    9

    瀏覽量

    7850

原文標題:I2C配置順序引發的異常案例

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    I2C總線復用

    帝晶智慧屏I2C總線復用
    的頭像 發表于 03-11 17:20 ?1308次閱讀

    I2C總線通信原理 如何設計I2C總線電路

    、高效的通信接口標準。I2C總線通信原理主要包括以下要點: 總線結構 : I2C總線僅使用兩條信號線,即串行數據線(SDA)和串行時鐘線(SCL)。 SDA線路用于傳輸實際的數據信息,
    的頭像 發表于 01-31 15:01 ?912次閱讀

    I2C總線數據包結構詳解

    I2C(Inter-Integrated Circuit)總線是一種用于連接微控制器和各種外圍設備的通信協議。它使用兩條線:串行數據線(SDA)和串行時鐘線(SCL),實現了設備之間的簡單、高效通信
    的頭像 發表于 01-17 15:46 ?657次閱讀

    I2C總線與Arduino的接口示例

    基礎 I2C總線由兩條線組成:數據線(SDA)和時鐘線(SCL)。SDA用于傳輸數據,而SCL用于同步數據傳輸。I2C設備可以是主設備或從設
    的頭像 發表于 01-17 15:34 ?1364次閱讀

    I2C總線的工作模式介紹

    在現代電子系統中,I2C總線作為一種多主機、多從機的串行通信協議,扮演著至關重要的角色。它允許多個設備共享同一總線,進行數據傳輸,從而簡化了系統設計并降低了成本。 I2C總線的基本特性 I2C
    的頭像 發表于 01-17 15:32 ?801次閱讀

    I2C總線故障排除技巧

    I2C總線是一種廣泛使用的串行通信協議,它允許多個設備在兩條線上(數據線SDA和時鐘線SCL)進行通信。由于其簡單性和靈活性,I2C總線在嵌入式系統中非常流行。然而,當I2C總線出現問
    的頭像 發表于 01-17 15:20 ?1947次閱讀

    I2C總線設備地址設置方法

    I2C總線是一種廣泛使用的串行通信協議,它允許多個設備在兩條線上(數據線SDA和時鐘線SCL)進行通信。每個設備都有一個唯一的地址,以確保數據能夠正確地發送到目標設備。 I2C地址概述
    的頭像 發表于 01-17 15:17 ?3398次閱讀

    I2C總線應用實例分析

    I2C總線使用兩條線進行通信:數據線(SDA)和時鐘線(SCL)。這種雙線制設計使得I2C總線能夠在多個設備之間共享,而不需要為每個設備單獨布線。 應用實例:溫濕度傳感器 假設我們正在設計一個智能家居系統,需要實時監測室內的溫
    的頭像 發表于 01-17 15:09 ?627次閱讀

    TPS650860 I2C配置系統的PMIC用戶指南

    電子發燒友網站提供《TPS650860 I2C配置系統的PMIC用戶指南.pdf》資料免費下載
    發表于 01-02 14:57 ?0次下載
    TPS650860 <b class='flag-5'>I2C</b>可<b class='flag-5'>配置</b>系統的PMIC用戶指南

    ADS1115 I2C配置完之后,多長時間能拿到有效數據

    最近我司測試了下貴司的ADS1115 這顆芯片,我們使用的是An0 跟An1的差分輸入,I2c通訊速率 100K 400k都測試 有如下問題請教, 一,I2C配置完之后,多長時間能拿到
    發表于 11-26 07:13

    ADS1115數據速率不管怎么配置I2C都要125ms才能獲取一次有效數據,是怎么回事?

    數據速率配置860sp,475sps,250sps,128sps不管配置哪個,I2C都要125ms才能獲取一次有效
    發表于 11-25 06:48

    RISC V的I2C操作

    函數功能,除了必須通過I2C主設備實現的功能:發送start和stop之外,函數本身并沒有主從之分;當需要RISC V中的I2C做從設備時,只需監控總線狀態(如是否接收到有效數據等)
    的頭像 發表于 11-01 11:06 ?622次閱讀

    I2C數據線切換延遲

    電子發燒友網站提供《I2C數據線切換延遲.pdf》資料免費下載
    發表于 09-20 09:11 ?0次下載
    <b class='flag-5'>I2C</b><b class='flag-5'>數據</b>線切換延遲

    I2C基本指南

    電子發燒友網站提供《I2C基本指南.pdf》資料免費下載
    發表于 09-10 09:40 ?0次下載
    <b class='flag-5'>I2C</b>基本指南

    不理解i2C?現在來教你

    的方式解釋如下: 基本概念 雙向二線制:I2C總線只使用兩根線——一根數據線(SDA)和一根時鐘線(SCL),就可以實現數據的雙向傳輸。這種設計使得連接設備變得非常簡單和節省空間。 串行通信:
    的頭像 發表于 07-10 09:26 ?1657次閱讀
    不理解<b class='flag-5'>i2C</b>?現在來<b class='flag-5'>教你</b>
    主站蜘蛛池模板: 成人免费午间影院在线观看 | 99r8这里精品热视频免费看 | 白嫩美女在线啪视频观看 | 性欧美1819| 特级毛片免费视频播放 | 757福利影院合集3000 | 91国内在线视频 | 黄色毛片子| 在线播放黄色网址 | videosxxoo18在线| 日本色图视频 | 性高清 | 成人在线视频网址 | 免费精品一区二区三区在线观看 | 亚洲精品成人a在线观看 | 一级片在线播放 | 亚洲黄色小说网站 | 女bbbbxxxx毛片视频0 | 亚洲国产成人久久午夜 | www.在线视频| 四虎最新紧急更新地址 | 天天操天天操天天 | 欧美午夜性春猛交bbb | 久久久久久免费观看 | 色老头在线精品视频在线播放 | 天天操丝袜 | 五月天丁香婷婷开心激情五月 | 欧美.成人.综合在线 | 色婷婷一区二区三区四区成人网 | 欧美亚洲视频一区 | 欧美福利视频网 | 四虎影院一级片 | 亚洲精品成人久久久影院 | 五月丁香 | 美女又黄又免费的视频 | 久久久久毛片成人精品 | 亚洲精品美女久久久aaa | 中国同志chinese小彬tv | 人人玩人人添天天爽 | 日日操操干干 | 久久久久88色偷偷 |