日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]Ⅰ、寫在前面關注我分享文章的朋友應該知道我在前面講述過(軟件、硬件)I2C主機控制從機EEPROM的例子。在I2C通信主機控制程序是比較常見的一種,可以說在實際項目中,很多應用都會使用到I2C通信。但在實際項目中作為

Ⅰ、寫在前面

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

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

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

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

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

實例實驗:

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

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

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

Ⅱ、實例工程下載

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

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

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

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

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

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

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

STM32F1資料:

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

Ⅲ、關于I2C協(xié)議

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

1.開始和停止條件

SCL時鐘電平為高:

SDA數(shù)據(jù)線由高 -> 低 為總線開始條件;

SDA數(shù)據(jù)線由低 -> 高 為總線結束條件;

(IO模擬I2C時注意:開始之后將SCL變?yōu)榈碗娖?,防止誤操作SDA使其通信停止)

時序圖:

2.數(shù)據(jù)位傳輸

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

(IO模擬I2C時切記:請先將SCL變?yōu)榈碗娖剑俑淖僑DA電平狀態(tài))

時序圖:

3.數(shù)據(jù)傳輸

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

傳輸格式:8位數(shù)據(jù) + 1位應答

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

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

應答位的產生及接收:

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

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

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

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

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

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

Ⅳ、硬件I2C主機發(fā)送數(shù)據(jù)

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

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

這里就不再描述。主要講述一下主機發(fā)送數(shù)據(jù)這一塊的代碼。

我封裝的發(fā)送數(shù)據(jù)函數(shù):

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

主要就是3個參數(shù):數(shù)據(jù)BUF、數(shù)據(jù)長度、從設備地址

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

必須要有的三大步驟:

1.開始

2.設備地址/寫

3.停止

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

Ⅴ、硬件I2C從機中斷接收數(shù)據(jù)

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

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

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

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

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

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

中斷接收函數(shù)源代碼如下:

位于stm32f10x_it.c文件下。

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

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

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

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

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

Ⅵ、說明

理解本文之前請先理解I2C協(xié)議。

更多關于硬件I2C主從通信的例子(如:DMA發(fā)送、DMA接收等)就不再單獨寫文章講述了,可以在微信公眾號聯(lián)系我。

以上總結僅供參考,若有不對之處,敬請諒解。


本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

摘 要 :研發(fā)一種移動智能輸液終端及無線網絡管理系統(tǒng),實現(xiàn)對輸液過程中氣泡、堵塞、漏液以及使用者位置等情況的實時監(jiān)控。系統(tǒng)以 TI 芯片作為主控單元,利用步進電機控制滴速,采用 RFID 技術對點滴瓶進行跟蹤,同時通過主...

關鍵字: 實時監(jiān)控 TI 芯片 步進電機 RFID 技術 主從通信 CC3200

今天講解“STM32F103 SPI主從通信”,原本計劃將這部分內容定在后面(第二階段)來講解,滿足一位網友的問題“關于兩塊MCU的SPI通訊”,所以今天特地提前講解了。由于昨天講解的是“SPI讀寫Flash”,MCU是...

關鍵字: spi STM32 主從通信

一、在STM32中,有5個時鐘源,為HSI,HSE,LSI,LSE,PLL.①HSI是高速內部時鐘,RC振蕩器,頻率為8MHz;②HSE--高速外部時鐘,可接石英或者陶瓷諧振器,或者外部時鐘源,頻率范圍4MHz--15M...

關鍵字: STM32 stm32f10x 時鐘配置

#include void leddisplay(); // 數(shù)碼管顯示 void delayms(unsigned int k); // 延時 n ms void USART_SEND(unsigned char...

關鍵字: 51單片機 中斷接收 串口發(fā)送

;******************** (C) COPYRIGHT 2010 STMicroelectronics ********************;* File Name: startup_stm32f10...

關鍵字: stm32f10x 啟動代碼

環(huán)境:STM32F10x 3.5固件庫。下載地址http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f10x_stdp...

關鍵字: stm32f10x 新建工程

/*********************************************File name : USART.c Chip type : ATmega16 Program type : Applic...

關鍵字: atmega16 中斷接收 串口發(fā)送

USB速度慢的原因有以下幾種可能:1、協(xié)議問題 全速的USB設備,最大速度12Mb/s,但是如果跑的是HID之類慢速設備的協(xié)議,那么速度就沒有那么快了,理論上只有1.5Mb/s。2、配置問題 USB配置描述符中有關于接收...

關鍵字: stm32f10x usb速度慢

Ⅰ、概述RTC(Real Time Clock)是實時時鐘的意思,它其實和TIM有點類似,也是利用計數(shù)的原理,選擇RTC時鐘源,再進行分頻,到達計數(shù)的目的。該文主要講述關于RTC的秒中斷功能,這個功能類似SysTick系...

關鍵字: rtc stm32f10x 秒中斷

先從最簡單的問題開始,用STM32外部中斷的方法實現(xiàn)PB.0按鍵控制PA.0LED燈:先總的說下實現(xiàn)中斷的步驟:1,配置NVIC寄存器(函數(shù)),設置中斷為第幾組,占先優(yōu)先級和次優(yōu)先級; 函數(shù)方法: void NVIC_C...

關鍵字: gpio stm32f10x 外部中斷
關閉