91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

教你如何有效解決I2C配置順序引發(fā)無(wú)法收發(fā)數(shù)據(jù)問(wèn)題

STM32單片機(jī) ? 來(lái)源:未知 ? 作者:佚名 ? 2017-11-12 08:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

在參考Cube軟件包中I2C例程后, 根據(jù)應(yīng)用需要新增了一路I2C接口,結(jié)果新增I2C無(wú)法收發(fā)數(shù)據(jù)。本文主要對(duì)問(wèn)題進(jìn)行描述,分析產(chǎn)生原因,提供解決方法。

問(wèn)題描述

如前言所述,現(xiàn)象表現(xiàn)為I2C無(wú)法收發(fā)數(shù)據(jù)。得無(wú)法理解之處,在于之前已經(jīng)完成了I2C的移植工作,并且運(yùn)行正?!,F(xiàn)在遵照正確的方式,新添一路I2C接口,只是更改了對(duì)應(yīng)的I2C接口及引腳,為什么無(wú)法收發(fā)數(shù)據(jù)。簡(jiǎn)化測(cè)試程序如下。

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);

}

二 現(xiàn)象分析

將上述程序在STM32F469i-Disco板上實(shí)現(xiàn),復(fù)現(xiàn)現(xiàn)象并尋找規(guī)律。發(fā)現(xiàn)規(guī)律如下:

分析上表可以發(fā)現(xiàn)問(wèn)題的產(chǎn)生與硬件設(shè)計(jì)有一定關(guān)系。觀察發(fā)現(xiàn),如果I2C沒(méi)有外部上拉時(shí),會(huì)導(dǎo)致問(wèn)題產(chǎn)生。

通過(guò)單步調(diào)試,定位于HAL_I2C_Master_Transmit(),在這個(gè)函數(shù)中調(diào)用的I2C_WaitOnFlagUntilTimeout()無(wú)法執(zhí)行異常,返回HAL_BUSY,導(dǎo)致了I2C寫(xiě)功能失敗。在I2C_WaitOnFlagUntilTimeout函數(shù)內(nèi)部,是對(duì)忙標(biāo)志位BUSY@I2Cx_SR2的檢測(cè)。通過(guò)對(duì)參考手冊(cè)的閱讀(如下截圖所述),如果在未占用I2C總線時(shí),SDASCL引腳存在低電平,則意味著總線處于忙狀態(tài)。這種檢測(cè)機(jī)制在I2C接口失能時(shí)依然工作。

結(jié)合程序中調(diào)用順序,在I2C3時(shí)鐘使能時(shí),雖然I2C3沒(méi)有使能,但是忙狀態(tài)檢測(cè)已經(jīng)開(kāi)始。由于對(duì)應(yīng)的SCL引腳上無(wú)上拉電阻,并且由于還未對(duì)I2C3SCL引腳進(jìn)行配置。此時(shí)SCL引腳為浮空輸入狀態(tài),實(shí)際測(cè)量發(fā)現(xiàn)為低電平,BUSY標(biāo)志被置位。

三 解決方法

通過(guò)現(xiàn)象及分析,可了解到問(wèn)題可通過(guò)硬件或者軟件解決。

硬件方面,為SDA、SCL引腳提供外部的I2C上拉電阻,問(wèn)題不在出現(xiàn)。

軟件方面,發(fā)現(xiàn)在對(duì)SCL、SDA引腳配置時(shí)會(huì)啟用內(nèi)部上拉。通過(guò)將I2C時(shí)鐘使能代碼放于I2C引腳配置語(yǔ)句后面,問(wèn)題也不再出現(xiàn)。

需要注意, I2CSDA、SCL引腳內(nèi)部上拉電阻,為弱上拉。使用者可以通過(guò)對(duì)應(yīng)型號(hào)STM32的數(shù)據(jù)手冊(cè),查看對(duì)應(yīng)引腳的上拉電阻,以便判斷是否能夠滿(mǎn)足應(yīng)用需要。如下為STM32F469上拉電阻信息截圖。

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


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1556

    瀏覽量

    131258
  • 數(shù)據(jù)收發(fā)

    關(guān)注

    0

    文章

    9

    瀏覽量

    7906

原文標(biāo)題:I2C配置順序引發(fā)的異常案例

文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    RK3576平臺(tái)PCA9548 I2C開(kāi)關(guān)設(shè)備樹(shù)配置與生效全解析

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

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

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

    基于FPGA的I2C控制模塊設(shè)計(jì)

    I2C_WRITE_WDATA.v模塊實(shí)現(xiàn)I2C寫(xiě)時(shí)序,I2C_Controller (I2C控制器)例化了I2C_WRITE_WDATA.
    的頭像 發(fā)表于 12-26 09:48 ?5009次閱讀
    基于FPGA的<b class='flag-5'>I2C</b>控制模塊設(shè)計(jì)

    AS32X601的I2C模塊操作EEPROM詳解

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

    I2C的總線協(xié)議

    I2C 總線使用兩根信號(hào)線(數(shù)據(jù)線 SDA 和時(shí)鐘線 SCL)在設(shè)備間傳輸數(shù)據(jù)。SCL 為單向時(shí)鐘線,固定由主機(jī)驅(qū)動(dòng)。SDA 為雙向數(shù)據(jù)線,在數(shù)據(jù)
    發(fā)表于 12-15 08:07

    I2C死鎖的問(wèn)題

    讀操作,I2C從設(shè)備應(yīng)答后輸出數(shù)據(jù),如果在這個(gè)時(shí)刻I2C主設(shè)備異常復(fù)位而此時(shí)I2C從設(shè)備輸出的數(shù)據(jù)位正好為0,也會(huì)導(dǎo)致
    發(fā)表于 12-04 06:00

    I2C的優(yōu)點(diǎn)介紹

    通信,無(wú)需額外的線路來(lái)選擇設(shè)備。每個(gè) I2C 設(shè)備都有一個(gè)唯一的地址,通常為 7 或 10 位長(zhǎng),可實(shí)現(xiàn)高效的數(shù)據(jù)路由,并且無(wú)需手動(dòng)配置或外部解碼邏輯。該尋址方案在單個(gè)總線上支持多達(dá) 128 個(gè)(7 位
    發(fā)表于 11-27 07:49

    深入剖析I2C協(xié)議

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

    第十八章 I2C通信測(cè)試

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

    CYPD3171怎么配置I2C地址?

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

    如何通過(guò)I2C配置CCG5?

    我的客戶(hù)希望通過(guò) I2C 配置 CCG5,因?yàn)樗麄?b class='flag-5'>無(wú)法通過(guò) CC 線進(jìn)行配置。 另外,客戶(hù)的配置不包括USB串口。 那么
    發(fā)表于 05-09 06:11

    基于RT-Thread的I2C(軟件) 實(shí)踐 | 技術(shù)集結(jié)

    一、軟硬件介紹(一)I2C(軟件)I2C是一種廣泛應(yīng)用于嵌入式系統(tǒng)中的短距離串行通信協(xié)議,支持多主多從設(shè)備模式,主機(jī)通過(guò)時(shí)鐘信號(hào)SCL和數(shù)據(jù)線SDA與從機(jī)進(jìn)行數(shù)據(jù)交互。在RT-Thre
    的頭像 發(fā)表于 05-06 18:44 ?1053次閱讀
    基于RT-Thread的<b class='flag-5'>I2C</b>(軟件) 實(shí)踐 | 技術(shù)集結(jié)

    nt3h211通過(guò)I2C向EEPROM寫(xiě)入數(shù)據(jù),但NFC工具無(wú)法讀取寫(xiě)入的數(shù)據(jù),為什么?

    NFC 讀取器應(yīng)用程序進(jìn)行測(cè)試時(shí),該應(yīng)用程序無(wú)法讀取寫(xiě)入的數(shù)據(jù)。知道可能的原因嗎?難道 I2C 寫(xiě)入的數(shù)據(jù)沒(méi)有映射到 NFC 存儲(chǔ)器嗎?
    發(fā)表于 03-26 06:50

    FRDM-MCXN947在初始化lpI2C時(shí), I2C無(wú)法正常工作怎么解決?

    我正在使用 FRDM-MCXN947 開(kāi)發(fā)板,發(fā)現(xiàn)在初始化 lpI2C 時(shí), I2C 無(wú)法正常工作。我的配置如圖所示。 我使用的配置基于演
    發(fā)表于 03-25 06:32

    I2C總線復(fù)用

    帝晶智慧屏I2C總線復(fù)用
    的頭像 發(fā)表于 03-11 17:20 ?2104次閱讀