chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認識你,還能領(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ù)。本文主要對問題進行描述,分析產(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)部,是對忙標志位BUSY@I2Cx_SR2的檢測。通過對參考手冊的閱讀(如下截圖所述),如果在未占用I2C總線時,SDASCL引腳存在低電平,則意味著總線處于忙狀態(tài)。這種檢測機制在I2C接口失能時依然工作。

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

三 解決方法

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

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

軟件方面,發(fā)現(xiàn)在對SCLSDA引腳配置時會啟用內(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

    文章

    1547

    瀏覽量

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

    關(guān)注

    0

    文章

    9

    瀏覽量

    7898

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

    深入剖析I2C協(xié)議

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

    如何通過I2C配置CCG5?

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

    I2C總線復(fù)用

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

    I2C總線通信原理 如何設(shè)計I2C總線電路

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

    I2C總線的優(yōu)缺點分析

    I2C總線作為一種廣泛使用的串行通信協(xié)議,以其簡單性和高效性在嵌入式系統(tǒng)中占據(jù)著重要地位。 I2C總線的優(yōu)點 1. 簡單性和低成本 I2C總線只需要兩條線(數(shù)據(jù)線SDA和時鐘線SCL)
    的頭像 發(fā)表于 01-17 15:50 ?1737次閱讀

    I2C總線數(shù)據(jù)包結(jié)構(gòu)詳解

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

    I2C總線與Arduino的接口示例

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

    I2C總線的工作模式介紹

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

    I2C總線協(xié)議詳細解析

    總線以其簡單性、靈活性和低功耗而聞名,廣泛應(yīng)用于嵌入式系統(tǒng)中。 2. I2C總線的基本組成 I2C總線由兩條線組成:數(shù)據(jù)線(SDA)和時鐘線(SCL)。SDA用于傳輸
    的頭像 發(fā)表于 01-17 15:22 ?1559次閱讀

    I2C總線故障排除技巧

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

    I2C總線與單片機的連接

    組成:數(shù)據(jù)線(SDA)和時鐘線(SCL)。SDA負責(zé)數(shù)據(jù)的傳輸,而SCL則用于同步數(shù)據(jù)傳輸。I2C協(xié)議支持多主機和多從機的通信,每個設(shè)備都有一個唯一的地址。通信過程中,主機負責(zé)生成時鐘
    的頭像 發(fā)表于 01-17 15:18 ?1933次閱讀

    I2C總線設(shè)備地址設(shè)置方法

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

    I2C總線數(shù)據(jù)傳輸速度要求

    Semiconductors)在1980年代初期開發(fā)。I2C總線因其簡單性和靈活性而被廣泛應(yīng)用于各種電子設(shè)備中,如傳感器、顯示器、存儲器等。 I2C總線數(shù)據(jù)傳輸速度 I2C總線的
    的頭像 發(fā)表于 01-17 15:15 ?3537次閱讀

    I2C總線應(yīng)用實例分析

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

    TPS650860 I2C配置系統(tǒng)的PMIC用戶指南

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