91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

3天內不再提示

STM32F10x_硬件I2C主從通信 (輪詢發送,中斷接收)

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-03-25 10:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Ⅰ、寫在前面

關注我分享文章的朋友應該知道我在前面講述過(軟件、硬件)I2C主機控制從機EEPROM的例子。在I2C通信主機控制程序是比較常見的一種,可以說在實際項目中,很多應用都會使用到I2C通信。但在實際項目中作為I2C從機的應用相對要少的多,本文主要講述關于【STM32F10x_硬件I2C主從通信】中STM32作為從機的例子。

在學習本問內容之前,如果對I2C協議還不太了解的朋友請先去了解一下I2C協議,或看我之前關于I2C通信的文章(我微信公眾號和博客都有)。

關于STM32硬件I2C作為從機的文章網上很少(我在寫本文之前也在百度、谷歌等網站上搜索了解過),我猜測大概的原因主要是兩點:1.使用該功能的人比較少; 2.說STM32硬件I2C存在BUG。

“使用該功能的人比較少”這個可以理解。其實我不能理解的是,普遍說這個有BUG的現象。我只覺得,你選擇了使用這個芯片來作為開發,你選擇之前應該是認可它的,什么東西都不可能盡善盡美,一點小的瑕疵,只要可以避免就行。就像Windos系統一樣,偶爾死機、藍屏,但是你還是依然會選擇使用它。

關于STM32硬件I2C自身BUG也不否認,但官方給出了解決的辦法,作為程序員,解決一項BUG,也是對自身能力的一種提升。所以,遇到困難,勇于面對才是正確的做法。

實例實驗:

本文提供兩個實例:一個主機發送(硬件I2C輪詢發送數據)、一個從機接收并打印接收數據(硬件I2C中斷接收數據)。

主機間隔500ms發送10字節,從機接收10字節檢測到I2C停止,將收到的數據通過串口打印出來。【發送的數據及長度可修改,從機自動檢測停止條件,也就是可以檢測得到主機發送了多少字節數據】

關于本文的更多詳情請往下看。

Ⅱ、實例工程下載

筆者針對于初學者提供的例程都是去掉了許多不必要的功能,精簡了官方的代碼,對初學者一看就明白,以簡單明了的工程供大家學習。

筆者提供的實例工程都是在板子上經過多次測試并沒有問題才上傳至360云盤,歡迎下載測試、參照學習。

提供下載的軟件工程是基于Keil(MDK-ARM) V5版本、STM32F103ZE芯片,但F1其他型號也適用(適用F1其他型號: 關注微信,回復“修改型號”)。

STM32F10x_硬件I2C主機(發送數據 - 輪詢方式)實例源代碼工程:

https://yunpan.cn/cMKS6muF6643V訪問密碼 8e16

STM32F10x_硬件I2C從機(接收數據 - 中斷方式)實例源代碼工程:

https://yunpan.cn/cMKSMCkcn8tKv訪問密碼 f3ad

STM32F1資料:

https://yunpan.cn/crBUdUGdYKam2訪問密碼 ca90

Ⅲ、關于I2C協議

這里再次提示一下I2C協議重要的幾點:

1.開始和停止條件

SCL時鐘電平為高:

SDA數據線由高 -> 低 為總線開始條件;

SDA數據線由低 -> 高 為總線結束條件;

(IO模擬I2C時注意:開始之后將SCL變為低電平,防止誤操作SDA使其通信停止)

時序圖:

2.數據位傳輸

SCL時鐘電平為低, 可以改換SDA數據線的電平,在SCL上升沿的過程將SDA數據發送出去。

(IO模擬I2C時切記:請先將SCL變為低電平,再改變SDA電平狀態)

時序圖:

3.數據傳輸

I2C是以字節(8位)的方式進行傳輸,總線上每傳輸完1字節之后會有一個應答信號,主器件(主機)需要產生對應的一個額外時鐘。

傳輸格式:8位數據 + 1位應答

數據傳輸必須帶響應,相關的響應時鐘脈沖由主機產生,在響應的時鐘脈沖期間,發送器釋放 SDA 線(高)。

在響應的時鐘脈沖期間 接收器必須將 SDA 線拉低,使它在這個時鐘脈沖的高電平期間保持穩定的低電平。

應答位的產生及接收:

1.在(主機)寫數據的時候是從機應答(給主機),主機檢測;

2.在(主機)讀數據的時候是主機應答(給從機),從機檢測;

(這里可以借助I2C讀寫函數一起理解)

1.時序圖(主機寫,從機應答,主機讀取應答):


2.時序圖(主機讀,主機產生應答):

更多關于I2C協議的文檔可以網上查詢,也可以參看我下面下載鏈接的文檔(周立功翻譯的版本):https://yunpan.cn/cMJxKJzpWFtHE訪問密碼 82f3

Ⅳ、硬件I2C主機發送數據

硬件I2C主機的配置其實很簡單,和前面讀寫EEPROM的(主機)配置一樣。

可參考我之前的文章:STM32F10x_模擬I2C讀寫EEPROM

這里就不再描述。主要講述一下主機發送數據這一塊的代碼。

我封裝的發送數據函數:

I2C_Master_BufferWrite(uint8_t* pBuffer, uint32_t NumByteToWrite, uint8_t SlaveAddress)

主要就是3個參數:數據BUF、數據長度、從設備地址


看過我前面主機讀寫EEPEOM代碼的人應該很清楚,這里很相似。讀寫EEPROM比這里多了一個步驟,那就是多了寫數據地址的步驟。

必須要有的三大步驟:

1.開始

2.設備地址/寫

3.停止

主程序間隔500ms調用一次該函數,發送一串(我們定義10字節),從機也是間隔500ms收到一串數據并打印出來。

Ⅴ、硬件I2C從機中斷接收數據

硬件I2C的從機接收數據一般分為三類:中斷接收、DMA接收和輪詢接收;

在實際項目中中斷接收和DMA接收比較常見,因為不用占據CPU資源,有數據來了才響應接收【需要CPU具有硬件I2C功能】。

而輪詢接收數據很占用CPU資源,一般是CPU沒有硬件I2C資源,處理的數據不多的情況下。

硬件I2C從機配置I2C這一塊比較簡單,和上面主機類似,請參看源代碼或參考我之前文章的講述。

可參考我之前的文章:STM32F10x_模擬I2C讀寫EEPROM

提醒:配置中注意關于I2C事件中斷這一塊(請看源代碼)。

中斷接收函數源代碼如下:


位于stm32f10x_it.c文件下。

進入I2C事件中斷,判斷是I2C從機事件,此時,作為從機接收數據需要檢測三個標示:

1.檢測主機已發生地址(ADDR = 1);

2.檢測有接收數據(RXNE = 1);

3.檢測到停止條件(STOPF =1)。

硬件I2C通信中,起始條件由硬件判斷完成,我們檢測的就需要這幾步就能完成基本的接收數據功能。

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

    關注

    1

    文章

    81

    瀏覽量

    21054
  • I2C
    I2C
    +關注

    關注

    28

    文章

    1541

    瀏覽量

    127851
  • 主從通信
    +關注

    關注

    0

    文章

    7

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    第十八章 I2C通信測試

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

    STM32H7CubeMX配置硬件I2C,讀寫失敗是什么問題呀?

    STM32H7CubeMX配置硬件I2C,讀寫失敗什么問題呀,同樣的操作F4和F1都能正常使用,應該不存在
    發表于 06-12 06:21

    ADuM2250/ADuM2251熱插拔雙通道I2C隔離器技術手冊

    ADuM2250/ADuM2251 為熱插拔數字隔離器,內置非閂鎖雙向通信通道,且與I2C接口兼容。這樣就不需要將I2C信號分成單獨的發送信號與接收
    的頭像 發表于 06-06 14:22 ?385次閱讀
    ADuM2250/ADuM2251熱插拔雙通道<b class='flag-5'>I2C</b>隔離器技術手冊

    STM32F103 I2C從機接收數據的問題

    我使用STM32F103做一個I2C從機接收數據的功能,通過查閱函數手冊,使用了2種方法 方法1: 1、調用HAL_I2C_EnableLi
    發表于 06-06 12:29

    第十六章 一文淺談I2C

    本篇文章介紹了W55MH32的I2C總線,其由SDA和SCL構成,具設備尋址等特點,協議含起始 / 停止信號等。闡述主從模式,介紹了相關例程,用于驗證 I2C 通信功能。
    的頭像 發表于 05-28 16:07 ?490次閱讀
    第十六章 一文淺談<b class='flag-5'>I2C</b>

    CYPD3177 I2C通信無應答怎么解決?

    SOC端通過I2C與CYPD3177進行通信,在讀芯片ID時(0x0002寄存器),主機發送數據后無應答。目前SOC端和CYPD3177只連接了兩根
    發表于 05-12 07:10

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-I2C設備驅動之Linux下的I2C驅動簡介

    的物理細節,如時鐘頻率、總線狀態管理、起始和停止條件等。I2C設備驅動:I2C設備驅動是用于與特定I2C設備通信的軟件模塊。每個I2C設備都
    發表于 04-15 10:39

    飛凌嵌入式ElfBoard ELF 1板卡-I2C設備驅動之Linux下的I2C驅動簡介

    的物理細節,如時鐘頻率、總線狀態管理、起始和停止條件等。I2C設備驅動:I2C設備驅動是用于與特定I2C設備通信的軟件模塊。每個I2C設備都
    發表于 04-15 10:19

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

    I2C總線通信原理 I2C(Inter-Integrated Circuit)總線是一種用于集成電路之間進行通信的串行通信協議。它最早由飛利
    的頭像 發表于 01-31 15:01 ?1130次閱讀

    I2C總線故障排除技巧

    導致整個系統的功能受到影響。 1. 檢查硬件連接 1.1 確認電源和接地 首先,確保I2C設備的電源和接地連接正確無誤。不良的電源或接地連接可能導致信號不穩定,從而引發通信錯誤。 1.2 檢查總線線纜 檢查SDA和SCL線是否正
    的頭像 發表于 01-17 15:20 ?2342次閱讀

    I2C總線設備地址設置方法

    通常是一個7位或10位的數字,用于標識總線上的每個設備。在7位尋址模式下,地址范圍是0x00到0x7F,而在10位尋址模式下,地址范圍是0x
    的頭像 發表于 01-17 15:17 ?4238次閱讀

    I2C總線應用實例分析

    在現代電子系統中,I2C總線因其簡單、靈活和高效的特點而被廣泛應用于各種設備之間的通信I2C總線概述 I2C總線由Philips(現為NXP)在1980年代初期開發,最初用于音頻和
    的頭像 發表于 01-17 15:09 ?746次閱讀

    RISC V的I2C操作

    。tsuData中,1代表10ns;Timeout中,1表示10nstLow和tHigh的1代表10ns10.1.3 軟件部分(Risc V)l? I2C
    的頭像 發表于 11-01 11:06 ?731次閱讀

    簡單認識I2C通信協議

    I2C(Inter-Integrated Circuit)通信協議是由飛利浦公司(現為恩智浦半導體)開發的一種簡單、雙向二線制同步串行總線協議。自1982年發布以來,I2C協議因其高效、靈活和易于實現的特點,在電子設備間的數據交
    的頭像 發表于 07-25 18:06 ?2619次閱讀

    CH32V003教程--兩線通信總線(I2C

    SMBus 概述   I2C 是半雙工的總線,它同時只能運行在下列四種模式中之一:主設備發送模式、主設備接收模式、從設備發送模式和從設備接收
    發表于 07-21 19:57
    主站蜘蛛池模板: 亚洲高清免费 | 下农村女人一级毛片 | 久草在线免费资源站 | 久久免| 亚洲第一页在线 | 丁香婷婷久久大综合 | 亚洲综合丁香婷婷六月香 | 最新福利网站 | 色人阁综合 | 欧美日韩不卡码一区二区三区 | 亚洲国产激情在线一区 | 被cao到合不拢腿腐男男 | 美女免费黄 | 99综合久久| 一区二区3区免费视频 | 成人区精品一区二区毛片不卡 | 久久艹影院 | 欧美午夜视频在线观看 | 日本一级黄色毛片 | 爽好舒服快小柔小说 | 五月婷婷深爱 | 综合免费一区二区三区 | 1024你懂的国产日韩欧美 | 亚洲影视大全 | 91成人免费观看 | 67194最新网址 | 免费网站直接看 | 激情久久婷婷 | 亚洲jjzzjjzz在线观看 | 婷婷激情亚洲 | 欧美肉到失禁高h视频在线 欧美三级成人 | 2019国产情侣 | 色噜噜中文网 | www.天天色| 亚洲一区免费在线观看 | 波多野结衣在线观看一区二区三区 | 午夜aa| 男女视频在线观看 | www.色播.com | 免费啪视频 | 国精视频一区二区视频 |