日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32F10x_硬件I2C读写EEPROM(标准外设库版本)

發布時間:2025/3/21 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32F10x_硬件I2C读写EEPROM(标准外设库版本) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Ⅰ、寫在前面

上一篇文章是“STM32F10x_模擬I2C讀寫EEPROM”,講述使用IO口模擬I2C總線通信,對EEPROM(AT24Xxx)進行讀寫操作的過程。

上一篇文章主要內容:I2C協議、模擬I2C底層驅動、EEPROM(AT24Xxx)單字節讀寫操作。

本文主要內容:STM32硬件I2C詳細配置、EEPROM(AT24Xxx)多字節讀寫操作、ST官方I2C存在問題。

?

實例實驗效果:

1、多字節讀寫:任意地址(66), 寫入任意長度(129)、讀取并打印出來

2、單字節讀寫:任意地址(0),寫入1字節數據、 讀取并打印出來

?

實驗說明:

1.多字節讀寫

實驗為什么是從66地址寫? 為什么是寫入129字節?

答案:驗證對EEPROM多字節“非標準地址、長度”讀寫的準確性。

我是使用AT24C128芯片,頁大小是64字節,我從66地址,就是驗證非標準地址(如:0、64、128等)開始讀寫; 寫入長度129字節也是驗證非標準長度(如:64、128、256等)的讀寫。

?

2.單字節讀寫

我這樣實驗的目的,相信大家都能理解。驗證每一次寫入字節數據 和讀出的數據是都一致。

?

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

?

Ⅱ、實例工程下載

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

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

?

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

?

STM32F10x_硬件I2C讀寫EEPROM(標準外設庫版本)實例源代碼工程:

http://yunpan.cn/c6b8d4mCTPpCj??訪問密碼

?

STM32F107VC_硬件I2C讀寫EEPROM(標準外設庫版本)實例源代碼工程:

http://yunpan.cn/c6b8HGnAGG4Mf??訪問密碼

?

I2C ?EEPROM(AT24xx)資料:

https://yunpan.cn/c667rIDPgvwTf??訪問密碼?1099

?

STM32F1資料:

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

?

Ⅲ、硬件I2C配置

硬件I2C的配置其實很簡單,RCC時鐘、GPIO、I2C配置等。筆者以F1標準外設庫(同時也建議初學者使用官方的標準外設庫)為基礎建立的工程,主要以庫的方式來講述(若您的F1芯片與提供工程不一樣,可微信回復“修改型號”)。

1.RCC時鐘源

該函數位于bsp.c文件下面;

RCC是很多初學者,甚至已經工作的朋友容易遺漏的地方,有很多朋友覺得它使用的外設不正常,很大部分是沒有配置RCC導致的。

?

重點注意:

A.外設RCC時鐘的配置要在其外設初始化的前面;

?

B.匹配對應時鐘。

比如:RCC_APB2外設不要配置在RCC_APB1時鐘里面

【如:RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);這樣能編譯通過,但這是錯誤的代碼】

?

2.?I2C引腳配置

?

該函數位于i2c_ee.c文件下面;

1.使用硬件I2C:GPIO_Mode_AF_OD復用開漏模式

2.由于使用硬件I2C,不像使用模擬I2C使用IO操作,所以這里引腳定義的比較“死”GPIO_Pin_6 | GPIO_Pin_7。

如果你使用I2C2或者引腳映射,這里的引腳也要跟著改變。

?

3.?I2C配置

該函數位于i2c_ee.c文件下面;

?

這個函數才是本文的重點

1.I2C模式:I2C_Mode = I2C_Mode_I2C;

硬件有多種模式:

I2C_Mode_I2C: I2C模式

I2C_Mode_SMBusDevice: SMBus設備(叢機)模式

I2C_Mode_SMBusHost: 主機模式

?

2.I2C占空比:I2C_DutyCycle = I2C_DutyCycle_2;

這個參數在快速I2C模式下有效,也就是速度大于100KHz。

I2C_DutyCycle_2:2比1占空比

I2C_DutyCycle_16_9:16比9占空比

感興趣的朋友可以把時鐘配置高于100KHz(如:400KHz),用示波器測一下SCL引腳,可以看得出來占空比不一樣。

?

3.I2C設備地址:I2C_OwnAddress1 = EEPROM_DEV_ADDR;

這個參數是第一個設備(從機)的地址,EEPROM_DEV_ADDR是我們自己宏定義的設備地址。

?

4.I2C應答:I2C_Ack = I2C_Ack_Enable;

這個參數的含義請結合上一篇文章“I2C協議”來理解。

?

5.地址位數:I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;

這個參數就是設備地址位數,需要和后面函數“I2C_Send7bitAddress”一致。

?

6.I2C速度:I2C_ClockSpeed = I2C_SPEED;

這個參數很好理解,I2C_SPEED是我們宏定義的值“100000”,也就是100KHz的意思。

?

Ⅳ、硬件I2C讀寫EEPROM配置

上一篇文章簡單提及了一下EEPROM單字節的讀寫,提供了多字節讀寫實例,但沒有具體描述多字節的具體操作。

下面將詳細描述一下單字節讀寫多字節讀寫的操作。請下載“I2C EEPROM資料”和“實例工程”作為參考。

?

在對EEPROM(AT24Cxx)讀寫操作之前需要理解兩個參數(可見源代碼i2c_ee.h文件):

A.“數據字”地址長度:也就是存數據的地址有多少位。具體分類(見數據手冊)如下:

?8位: AT24C01、AT24C02

16位: AT24C04、AT24C08、AT24C16、AT24C32、AT24C64、AT24C128、AT24C256、AT24C512

?

B.頁長度:在進行連續寫的時候,最長可寫一頁,寫完這一頁之后需要指定下一頁地址才行,否則會在上一頁循環寫。具體分類(見數據手冊)如下:

??8字節: AT24C01、AT24C02

?16字節: AT24C04、AT24C08、AT24C16

?32字節: AT24C32、AT24C64

?64字節: AT24C128、AT24C256

128字節: AT24C512

?

1.?單字節寫

時序圖:

截圖來自“AT24C128C數據手冊”,單字節寫主要分5個步驟

1.開始

2.設備地址/寫

3.數據地址

4.寫一字節數據

5.停止

?

源程序:

在操作硬件I2之前需要檢測I2C是否處于“忙”狀態。數據地址根據長度不同而寫入的不同。

?

?

2.?單字節讀(隨機)

時序圖:

截圖來自“AT24C128C數據手冊”,單字節讀(也是隨機讀)主要分7個步驟

1.開始

2.設備地址/寫

3.數據地址

4.重新開始

5.設備地址/讀

6.讀一字節數據

7.停止

?

源程序:

這里就提醒一點,單字節讀和多字節讀的應答位,由于不連續讀,這里產生非應答

?

3.?頁寫

時序圖:

截圖來自“AT24C128C數據手冊”,頁寫單字節寫的區別在于“連續寫”。

注意:這里頁寫的意思是在指向地址的頁寫數據,也就是EEPROM內部“地址指針”指向的地址所在頁。每次寫之前我們都要將“地址指針”指向一個地址(見下面源程序),寫的過程中,一旦寫到最后一個字節,將會回到該頁首地址繼續寫下去,因此,寫完該頁,我們需要重新將“地址指針”指向下一頁首地址。

【芯片頁的大小根據芯片不同而不同,見本章開頭描述】

?

源程序:

寫最后一字節獨立出來是有原因的:防止HardFault_Handler。

?

?

4.?多字節寫

源程序:

“多字節寫”是基于“頁寫”的基礎上寫的,從上面頁寫的描述(寫到該頁最后一字節會回到該頁首地址)可以知道多字節寫是要考慮很多情況的,否則會破壞其他數據。

上面源程序截取了簡單的一部分:開始寫的地址剛好位于該頁首地址這種情況。在頁首地址開始寫數據情況下,要判斷需要寫的數據的大小是否有多頁。

?

上面這種情況是比較簡單的一種,還有其他情況,我不在這里講述,希望初學的你多去理解一下,這也是參考ST官方的思路,而且有利于你們編程的思想

?

5.?多字節讀

時序圖:

截圖來自“AT24C128C數據手冊”,多字節讀需要注意應答

?

多字節讀到最后一位數據之前,必須產生應答位,而最后一位產生非應答位。請結合下面源程序理解。

?

源程序:

單字節讀比:前面第1步到第5步都是一樣的,重點請看第6步,這里產生的應答需要注意。

?

Ⅴ、ST官方I2C讀寫問題

說到ST的I2C這個問題,網上有很多人說也存在嚴重的I2C問題,我個人倒不覺得存在太大問題(或許是我研究的還不夠)。

我從開始至今,使用ST芯片I2C也做過幾個項目(控制EEPROM、時鐘芯片、溫度傳感器、觸摸芯片),項目中也使用多個中斷,我至今還沒有發現它的問題。我只知道ST提供的標準外設庫例程有些地方不嚴謹或不規范,我也從沒使用ST官方的例程(當然,我自己寫的例程很多思路是參考ST的)。

?

我個人觀點:有問題比不可怕,可怕的是不知道如何去解決問題。由于我沒有真正的發現I2C硬件真實存在的問題,可以參考一下官方提到是資料,可以下載(第二節)我整理的STM32F1資料 “STM32F10xxCDE勘誤手冊V14(英文)2015-11”查看。

?

1.官方標準外設庫例程介紹

標準庫例程關于I2C讀寫EEPROM0的例程很多都一樣或類似(F1、F2、F4等),感興趣的可以下載查看。但是,都存在不規范的地方。

?

2.標準庫I2C例程介紹

我大概說一下這個標準庫I2C例程中讀寫相關函數吧。

位置位于STM32F10x_StdPeriph_Lib_V3.5.0\Utilities\STM32_EVAL\Common:

stm32_eval_i2c_ee.c

?

A.sEE_ReadBuffer讀函數

A1.同樣注釋,不同語句,寫地址之后的標志處理;(見265行處)

這個地方其實是處理一下標志位,我也測試過,使用兩種語句都可以通過的。只是提出來以下是,我個人舉得更應該使用“I2C_EVENT_MASTER_BYTE_TRANSMITTED”(在我的例程中也是使用這個)。

?

A2.讀數據之前,發送停止條件;(見316行處)

這個地方經過我反復測試,沒有測試通過(也就是在讀之前發送停止條件)。 我個人覺得這是程序上的一個BUG.

?

B.sEE_WriteBuffer寫函數

寫頁函數暫時還沒有發現什么問題,但在綜合的寫函數(多字節寫)中發現了一個問題(如下圖),這個地方的count永遠都不可能等于0,而這里加了一個判斷條件。

?

?

Ⅵ、說明

EEPROM的讀寫操作按照I2C標準協議通信,請參看數據手冊,有助于提高對I2C的理解。

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

總結

以上是生活随笔為你收集整理的STM32F10x_硬件I2C读写EEPROM(标准外设库版本)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美一级片在线 | 久久精品噜噜噜成人 | 超碰在线国产97 | 亚洲逼院 | 国产女女调教女同 | 秋霞午夜鲁丝一区二区老狼 | 在线性视频| 日本精品免费一区二区三区 | 色臀av| 国产精品1000| 青青草国产精品 | 国产精品999999| 欧美成人国产精品高潮 | 欧美成人三级在线观看 | 精品无码久久久久久久久久 | 欧美日韩中文国产一区发布 | 亚洲va天堂va国产va久 | 美女脱裤子打屁股 | 欧美成人自拍视频 | 国产精品一区二区久久毛片 | 好吊妞这里有精品 | 深夜激情影院 | 国产精品久久久久久久久久久久午夜片 | 美女网站免费黄 | 欧美一区二区三区久久妖精 | 日韩特级毛片 | 校园春色 亚洲色图 | 91精品欧美一区二区三区 | 精品人妻一区二区三区潮喷在线 | 三度诱惑免费版电影在线观看 | 亚洲aaaaaa| 亚洲福利社区 | 色老太hd老太色hd | 香蕉视频官网在线观看 | 成年人视频在线 | 一级免费在线观看 | 婷婷五月综合久久中文字幕 | aaaaav| 99在线观看免费 | 成人精品网| 综合久久五月天 | 日本肉体xxxx裸体137大胆图 | 国产网站在线看 | 真人一毛片 | 亚洲三级黄色片 | 18成人在线观看 | 久久澡 | 久久偷拍免费视频 | 成人av免费观看 | 国产一区二区三区四区三区四 | 香蕉视频久久 | 免费视频黄色 | 九九久视频| 国产成人在线观看网站 | 日韩黄色片在线观看 | 91在线视频精品 | 888奇米影视 | 无码成人一区二区 | 精品国产一区二区三区性色av | 无法忍受在线观看 | 亚洲一区二区三区四区视频 | 中文在线一区二区三区 | 午夜福利一区二区三区 | 亚洲 欧美 自拍偷拍 | 久久久成人av | 麻豆视屏 | 色综合综合网 | 色综合久久中文字幕无码 | 中文字幕一区久久 | 黄色在线免费播放 | 亚洲一区二区三区四区在线播放 | 亚洲a在线视频 | 18视频在线观看娇喘 | 网址av | 成人网导航 | 中文字幕――色哟哟 | 五月婷婷色 | 床戏高潮做进去大尺度视频网站 | 欧美乱妇高清无乱码 | 久久久久久久久久久久久久久久久久 | 亚洲一级Av无码毛片久久精品 | 黄色一集片 | 久久精品美女 | 色综合免费视频 | xxxwww国产| 欧美精品一二 | 久久久国产亚洲 | jizz亚洲女人 | 欧美视频中文字幕 | 国产一区二区久久精品 | 毛片aaaaa| 久久男女视频 | 国产丝袜第一页 | 亚洲最大成人网站 | 日韩精品麻豆 | 亚洲成人自拍网 | 嫩草嫩草嫩草嫩草嫩草 | 激情一区二区 | 亚洲第一天堂影院 |