国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    1556

    瀏覽量

    131241
  • 數據收發
    +關注

    關注

    0

    文章

    9

    瀏覽量

    7906

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    RK3576平臺PCA9548 I2C開關設備樹配置與生效全解析

    嵌入式開發中,單路I2C總線往往無法滿足多外設的掛載需求,NXP的PCA9548(8通道I2C Switch)是解決該問題的常用方案,尤其在RK3576等嵌入式平臺的攝像頭、VCM等多I2C
    的頭像 發表于 02-28 11:18 ?1494次閱讀
    RK3576平臺PCA9548 <b class='flag-5'>I2C</b>開關設備樹<b class='flag-5'>配置</b>與生效全解析

    I2C 為什么只要兩根線就能搞定通信?

    到目前為止,我們已經討論了SPI通信和UART通信的基礎知識,現在讓我們討論本系列的最后一個協議,即集成電路間協議(I2C)。如果您曾經構建過使用OLED顯示器、氣壓傳感器或陀螺儀/加速度計模塊
    的頭像 發表于 01-04 09:14 ?1639次閱讀
    <b class='flag-5'>I2C</b> 為什么只要兩根線就能搞定通信?

    基于FPGA的I2C控制模塊設計

    I2C_WRITE_WDATA.v模塊實現I2C寫時序,I2C_Controller (I2C控制器)例化了I2C_WRITE_WDATA.
    的頭像 發表于 12-26 09:48 ?4946次閱讀
    基于FPGA的<b class='flag-5'>I2C</b>控制模塊設計

    AS32X601的I2C模塊操作EEPROM詳解

    國科安芯推出的AS32X601系列MCU芯片內置的I2C模塊提供了符合工業標準的兩線串行制接口,可用于MCU和外部I2C設備的通訊。I2C總線使用兩條串行線:串行數據線SDA和串行時鐘
    的頭像 發表于 12-21 21:39 ?982次閱讀
    AS32X601的<b class='flag-5'>I2C</b>模塊操作EEPROM詳解

    I2C的總線協議

    I2C 總線使用兩根信號線(數據線 SDA 和時鐘線 SCL)在設備間傳輸數據。SCL 為單向時鐘線,固定由主機驅動。SDA 為雙向數據線,在數據
    發表于 12-15 08:07

    I2C死鎖的問題

    讀操作,I2C從設備應答后輸出數據,如果在這個時刻I2C主設備異常復位而此時I2C從設備輸出的數據位正好為0,也會導致
    發表于 12-04 06:00

    I2C的優點介紹

    通信,無需額外的線路來選擇設備。每個 I2C 設備都有一個唯一的地址,通常為 7 或 10 位長,可實現高效的數據路由,并且無需手動配置或外部解碼邏輯。該尋址方案在單個總線上支持多達 128 個(7 位
    發表于 11-27 07:49

    深入剖析I2C協議

    I2C是由Philips開發的簡單的雙向兩線總線,在深入淺出理解SPI協議中,我們區分了單工,半雙工,全雙工協議數據流向的區別,根據特征,I2C協議屬于半雙工協議(即同一時刻,數據單向
    的頭像 發表于 08-21 15:10 ?3669次閱讀
    深入剖析<b class='flag-5'>I2C</b>協議

    第十八章 I2C通信測試

    本章介紹了I2C協議,其物理層用SDA和SCL雙線,支持多設備:協議層含起始/停止信號、應答機制等。還講解W55MH32的I2C外設及初始化,并進行了通信測試代碼的分析。
    的頭像 發表于 06-19 17:07 ?1312次閱讀
    第十八章 <b class='flag-5'>I2C</b>通信測試

    CYPD3171怎么配置I2C地址?

    CYPD3171怎么配置I2C地址?
    發表于 05-29 07:28

    如何通過I2C配置CCG5?

    我的客戶希望通過 I2C 配置 CCG5,因為他們無法通過 CC 線進行配置。 另外,客戶的配置不包括USB串口。 那么
    發表于 05-09 06:11

    基于RT-Thread的I2C(軟件) 實踐 | 技術集結

    一、軟硬件介紹(一)I2C(軟件)I2C是一種廣泛應用于嵌入式系統中的短距離串行通信協議,支持多主多從設備模式,主機通過時鐘信號SCL和數據線SDA與從機進行數據交互。在RT-Thre
    的頭像 發表于 05-06 18:44 ?1045次閱讀
    基于RT-Thread的<b class='flag-5'>I2C</b>(軟件) 實踐 | 技術集結

    nt3h211通過I2C向EEPROM寫入數據,但NFC工具無法讀取寫入的數據,為什么?

    NFC 讀取器應用程序進行測試時,該應用程序無法讀取寫入的數據。知道可能的原因嗎?難道 I2C 寫入的數據沒有映射到 NFC 存儲器嗎?
    發表于 03-26 06:50

    FRDM-MCXN947在初始化lpI2C時, I2C無法正常工作怎么解決?

    我正在使用 FRDM-MCXN947 開發板,發現在初始化 lpI2C 時, I2C 無法正常工作。我的配置如圖所示。 我使用的配置基于演
    發表于 03-25 06:32

    I2C總線復用

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