色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

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

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

前言

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

問題描述

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

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板上實現(xiàn),復(fù)現(xiàn)現(xiàn)象并尋找規(guī)律。發(fā)現(xiàn)規(guī)律如下:

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

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

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

三 解決方法

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

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

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

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

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


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

    關(guān)注

    28

    文章

    1484

    瀏覽量

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

    關(guān)注

    0

    文章

    8

    瀏覽量

    7750

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

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

收藏 人收藏

    評論

    相關(guān)推薦

    ADS1115 I2C配置完之后,多長時間能拿到有效數(shù)據(jù)?

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

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

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

    RISC V的I2C操作

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

    I2C協(xié)議的基礎(chǔ)知識

    本文從I2C協(xié)議的概述開始,描述協(xié)議的歷史、不同速度模式、物理層和數(shù)據(jù)幀結(jié)構(gòu),最后介紹I2C混合電壓系統(tǒng)中電平兼容性以及上拉電阻大小計算。
    的頭像 發(fā)表于 10-22 15:51 ?486次閱讀
    <b class='flag-5'>I2C</b>協(xié)議的基礎(chǔ)知識

    I2C數(shù)據(jù)線切換延遲

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

    I2C基本指南

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

    不理解i2C?現(xiàn)在來教你

    的方式解釋如下: 基本概念 雙向二線制:I2C總線只使用兩根線——一根數(shù)據(jù)線(SDA)和一根時鐘線(SCL),就可以實現(xiàn)數(shù)據(jù)的雙向傳輸。這種設(shè)計使得連接設(shè)備變得非常簡單和節(jié)省空間。 串行通信:
    的頭像 發(fā)表于 07-10 09:26 ?816次閱讀
    不理解<b class='flag-5'>i2C</b>?現(xiàn)在來<b class='flag-5'>教你</b>

    PCA9554A具有中斷輸出和配置寄存器的遠(yuǎn)程8位I2C和SMBus I/O擴(kuò)展器數(shù)據(jù)

    電子發(fā)燒友網(wǎng)站提供《PCA9554A具有中斷輸出和配置寄存器的遠(yuǎn)程8位I2C和SMBus I/O擴(kuò)展器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 06-28 11:03 ?0次下載
    PCA9554A具有中斷輸出和<b class='flag-5'>配置</b>寄存器的遠(yuǎn)程8位<b class='flag-5'>I2C</b>和SMBus <b class='flag-5'>I</b>/O擴(kuò)展器<b class='flag-5'>數(shù)據(jù)</b>表

    具有中斷輸出和配置寄存器的 PCA9535 遠(yuǎn)程 16位I2C和SMBus I/O擴(kuò)展器數(shù)據(jù)

    電子發(fā)燒友網(wǎng)站提供《具有中斷輸出和配置寄存器的 PCA9535 遠(yuǎn)程 16位I2C和SMBus I/O擴(kuò)展器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 06-25 11:20 ?0次下載
    具有中斷輸出和<b class='flag-5'>配置</b>寄存器的 PCA9535 遠(yuǎn)程 16位<b class='flag-5'>I2C</b>和SMBus <b class='flag-5'>I</b>/O擴(kuò)展器<b class='flag-5'>數(shù)據(jù)</b>表

    TCA9536具有配置寄存器的遠(yuǎn)程4位I2C和SMBus I/O擴(kuò)展器數(shù)據(jù)

    電子發(fā)燒友網(wǎng)站提供《TCA9536具有配置寄存器的遠(yuǎn)程4位I2C和SMBus I/O擴(kuò)展器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 06-22 10:51 ?0次下載
    TCA9536具有<b class='flag-5'>配置</b>寄存器的遠(yuǎn)程4位<b class='flag-5'>I2C</b>和SMBus <b class='flag-5'>I</b>/O擴(kuò)展器<b class='flag-5'>數(shù)據(jù)</b>表

    使用CYT2CL進(jìn)行I2C配置后,為什么無法進(jìn)行傳輸?

    我們正在使用 CYT2CL 進(jìn)行 I2C 配置。 我們使用的是 SDL 7.9.0 I2C 主模式示例,但我們無法進(jìn)行傳輸。
    發(fā)表于 06-03 08:36

    使用CYT2CL進(jìn)行I2C配置,寫入不正常的原因?

    我們正在使用 CYT2CL 進(jìn)行 I2C 配置。 我們使用的是 SDL 7.9.0 I2C 主模式示例,但我們無法進(jìn)行傳輸。
    發(fā)表于 05-29 06:24

    什么是I2C協(xié)議 I2C總線的控制邏輯

    在實際使用過程中,I2C比較容易出現(xiàn)的一個問題就是死鎖 ,死鎖在I2C中主要表現(xiàn)為:I2C死鎖時表現(xiàn)為SCL為高,SDA一直為低。
    發(fā)表于 03-12 09:17 ?1048次閱讀
    什么是<b class='flag-5'>I2C</b>協(xié)議 <b class='flag-5'>I2C</b>總線的控制邏輯

    i2c接口由哪幾根線組成 i2c接口可以接哪些器件

    I2C接口的線路可以適應(yīng)不同的系統(tǒng)需求和器件規(guī)格,因此具體的線路配置可能會有所不同。但通常來說,時鐘線(SCL)和數(shù)據(jù)線(SDA)是I2C接口的核心線路。
    的頭像 發(fā)表于 03-05 16:55 ?3753次閱讀
    <b class='flag-5'>i2c</b>接口由哪幾根線組成 <b class='flag-5'>i2c</b>接口可以接哪些器件

    GD32 MCU硬件I2C不可靠不如軟件I2C?來看看紅楓派開發(fā)版的硬件I2C驅(qū)動如何做到穩(wěn)得一批

    在一個評論中,看到網(wǎng)友對硬件I2C的討論,硬件I2C Busy找不到原因、軟件I2C穩(wěn)得一批。
    的頭像 發(fā)表于 02-23 09:37 ?2781次閱讀
    GD32 MCU硬件<b class='flag-5'>I2C</b>不可靠不如軟件<b class='flag-5'>I2C</b>?來看看紅楓派開發(fā)版的硬件<b class='flag-5'>I2C</b>驅(qū)動如何做到穩(wěn)得一批
    主站蜘蛛池模板: 久久日韩精品无码一区| 寂寞夜晚看免费视频| 好男人免费观看在线高清WWW | 精品AV亚洲乱码一区二区| 美国色吧影院| 天天狠狠色噜噜| 最近免费视频中文2019完整版| 宝贝好紧好爽再搔一点试視頻 | 约艺术院校96年清纯白嫩| 超碰97超碰在线视频哦| 韩国精品韩国专区久久| 欧美一第一页草草影院| 亚洲欧美国产视频| 超碰免费视频在线观看| 久久精品亚洲AV中文2区金莲| 日韩高清一区二区三区不卡| 一本色道久久综合亚洲精品蜜桃冫| seyeye在清在线| 久久AAAA片一区二区| 色综合久久天天影视网| 2022一本久道久久综合狂躁| 国产亚洲美女在线视频视频| 欧美老妇与zozoz0交| 一边亲着一面膜下的免费过程| 大相蕉伊人狼人久草av| 恋夜影视列表免费安卓手机版| 午夜精品久久久久久影视riav| av天堂网站avtt2017| 九九精品久久| 羞羞一区二区三区四区片| 不良网站进入窗口软件下载免费| 久久久久久久久免费视频| 午夜国产免费视频亚洲| 苍井空小公主qvod| 美女胸网站| 一个人免费观看在线视频播放| 国产白丝JK被疯狂输出视频| 欧美大jiji| 3d无遮挡h肉动漫在线播放| 狠狠色色综合站| 无修肉动漫在线观看影片|