在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

STM32CubeMx之硬件IIC驅動EEPROM詳解

嵌入式技術 ? 來源:嵌入式技術 ? 作者:嵌入式技術 ? 2022-05-30 09:15 ? 次閱讀

1. I2C簡介

I2C( Inter-Integrated Circuit)總線是由 PHILIPS 公司開發的兩線式串行總線,用于連接微控制器及其外圍設備。是微電子通信控制領域廣泛采用的一種總線標準。具有接口線少,控制方式簡單,器件封裝形式小,通信速率較高等優點。
I2C特性:
(1)只要求兩條總線線路一條串行數據線SDA,一條串行時鐘線SCL;
(2)每個連接到總線的器件都可以通過唯一的地址和一直存在的簡單的主機/從機關系軟件設定地址,主機可以作為主機發送器或主機接收器;
(3)它是一個真正的多主機總線,如果兩個或更多主機同時初始化數據傳輸可以通過沖突檢測和仲裁防止數據被破壞;
(4)串行的 8 位雙向數據傳輸位速率在標準模式下可達100kbit/s,快速模式下可達400kbit/s,高速模式下可達 3.4Mbit/s;
(5)片上的濾波器可以濾去總線數據線上的毛刺波保證數據完整;
(6)連接到相同總線的IC數量只受到總線的最大電容400pF;
IIC是屬串行通訊總線,同步傳輸、半雙工。

2. I2C總線協議

IIC協議格式:起始信號、停止信號、應答信號、非應答信號、發送數據、接收數據。
??空閑狀態:SCL和SDA均保持高電平;

2.1 起始信號

時鐘為高電平時,數據由高電平變為低電平。

在這里插入圖片描述
SDA_OUT=1;
SCL=1;
delay_us(2);
SDA_OUT=0;
//方便下一次數據收發
delay_us(2);
SCL=0;

2.2 停止信號

??時鐘線為高電平時,數據線由低變高。

SDA_OUT=0;
SCL=0;
Delay_us(2);
SCL=1;
Delay_us(2);
SDA_OUT=1;

數據傳輸時序:

在這里插入圖片描述

2.3 獲取應答

??時鐘線為高時讀取數據。應答信號本身就是一位數據。

u8 i=0;
SCL=0;//告訴從機,主機需要讀取數據
Delay_us(2);
SCL=1;//開始讀取數據
while(SDA_IN)
{
  i++;
  Delay_us(1);
  if(i>=20)return 1;//非應答
}
Delay_us(2);
SCL=0;//方便下一次數據收發
return 0;//獲取應答信號

2.4 發送應答(非應答)信號

時鐘線為低電平時發送數據。應答信號本身就是一位數據。

SCL=0;
SDA_OUT=ack&0x01;//ack為應答參數,0為應答,1為非應答
Delay_us(2);
SCL=1;//數據發送完成
//方便下一次數據收發
Delay_us(2);
SCL=0;

2.5 發送一個字節數據

for(i=0;i<8;i++)
{
  SCL=0;
  if(data&0x80)SDA_OUT=1;
  else SDA_OUT=0;
  Delay_us(2);
SCL=1;//數據發送完成
data<<=1;
Delay_us(2);
}
SCL=0;//方便下一次數據收發

2.6 接收一個字節數據

u8 data=0; 
for(i=0;i<8;i++)
{
SCL=0;//告訴從機,主機需要讀取數據
Delay_us(2);
SCL=1;//主機開始讀取數據
data<<=1;
if(SDA_IN)data|=0x01;
Delay_us(2);
}
SCL=0;//方便下一次數據收發
return data;

3. AT24CXX介紹

?CAT24WC01/02/04/08/16是一個1K/2K/4K/8K/16K位串行CMOS E2PROM。內部含有12/256/512/1024/2048個8位字節,CATALYST公司的先進CMOS技術實質上減少了器件的功耗,CAT24WC01有一個8字節頁寫緩沖器,CAT24WC02/04/08/16有一個16字節頁寫緩沖器,該器件通過I2C總線接口進行操作有一個專門的寫保護功能。
特性
(1)與400KHz I2C總線兼容
(2)1.8到6.0伏工作電壓范圍
(3)低功耗CMOS 技術
(4)寫保護功能當WP為高電平時進入寫保護狀態
(5)頁寫緩沖器
(6)自定時擦寫周期
(7)1,000,000編程/擦除周期
(8)可保存數據100年
(9)8 腳 DIP SOIC或TSSOP封裝
(10)溫度范圍:商業級工業級和汽車級

3.1 引腳說明

在這里插入圖片描述pYYBAGKTeGaAScIzAADa8D09r5s327.png

3.2 總線時序

??時鐘上升沿讀取數據,下降發送數據。

pYYBAGKTeIWAafM2AAFhAB41sU4106.png

3.3 從器件地址

pYYBAGKTeLSAL4BDAAEWla1OldI133.png

3.4 寫操作時序
字節寫
在字節寫模式下,主器件發送起始命令和從器件地址信息(R/W位置零)給從器件在從器件產生應答信號后,主器件發送 CAT24WC01/02/04/08/16的字節地址,主器件在收到從器件的另一個應答信號后,再發送數據到被尋址的存儲單元。AT24WC01/02/04/08/16再次應答,并在主器件產生停止信號后開始內部數據的擦寫,在內部擦寫過程中,CAT24WC01/02/04/08/16不再應答主器件的任何請求。

pYYBAGKTeN2AQgIZAACNdPj7xvs655.png

頁寫
用頁寫, CAT24WC01可一次寫入8個字節數據,CAT24WC02/04/08/16可以一次寫入16個字節的數據。頁寫操作的啟動和字節寫一樣不同在于傳送了一字節數據后并不產生停止信號。主器件被允許發送P(AT24WC01 P=7;AT24WC02/04/08/16 P=15)個額外的字節,每發送一個字節數據后,CAT24WC01/02/04/08/16產生一個應答位并將字節地址低位加1,高位保持不變。
如果在發送停止信號之前,主器件發送超過P+1個字節,地址計數器將自動翻轉,先前寫入的數據被覆蓋。
接收到P+1字節數據和主器件發送的停止信號后,CAT24CXXX啟動內部寫周期將數據寫到數據區。所有接收的數據在一個寫周期內寫入CAT24WC01/02/04/08/16。

poYBAGKTey2AS5SnAABz_94v1Qk055.png#pic_center

3.5 讀操作時序

選擇性讀
選擇性讀操作允許主器件對寄存器的任意字節進行讀操作,主器件首先通過發送起始信號、從器件地址和它想讀取的字節數據的地址執行一個偽寫操作。在 CAT24WC01/02/04/08/16 應答之后,主器件重新發送起始信號和從器件地址,此時R/W 位置1,CAT24WC01/02/04/08/16響應并發送應答信號,然后輸出所要求的一個 8位字節數據,主器件不發送應答信號但產生一個停止信號。

poYBAGKTeTuAG1gkAADGs24yzr8660.png

連續讀
連續讀操作可通過立即讀或選擇性讀操作啟動。在CAT24WC01/02/04/08/16發送完一個8位字節數據后,主器件產生一個應答信號來響應,告知CAT24WC01/02/04/08/16 主器件要求更多的數據,對應每個主機產生的應答信號CAT24WC01/02/04/08/16將發送一個8位數據字節。當主器件不發送應答信號而發送停止位時結束此操作。
從CAT24WC01/02/04/08/16 輸出的數據按順序由N到N+1輸出。讀操作時地址計數器CAT24WC01/02/04/08/16整個地址內增加,這樣整個寄存器區域在可在一個讀操作內全部讀出。當讀取的字節超過 E(對于 24WC01,E=127;對24WC02,E=255;對24WC04,E=511;對24WC08,E=1023;對24WC16 E=2047)計數器將翻轉到零并繼續輸出數據字節。

pYYBAGKTeZGAQE8gAAC9mWie3rw101.png

4. EEPROM硬件接口

??在本示例中采用的EEPROM芯片為AT24C08型號,該封裝類型和24C02完全兼容;
??AT24C08容量為8Kbit,即1KB,1024字節;24C02量為2kbit,為256字節。

poYBAGKTedGARlT4AAC09RyDXRs917.png

引腳 GPIO
IIC_SCL 時鐘線PB6
IIC_SDA 雙向數據線PB7

5.軟件設置

poYBAGKTejiAXOxwAAOJ_72z6OU272.png

6.代碼生成

6.1 IIC硬件配置

poYBAGKTelWAaTLuAAKPX8_2IDY028.png

6.2 IIC硬件產生起始信號、停止信號

//產生起始信號
void IIC_Start(void)
{
   hi2c1.Instance->CR1|=1<<8;
   while(!(hi2c1.Instance->SR1&1<<0)){}//等待起始信號發送成功
   hi2c1.Instance->CR1&=~(1<<8);
}
//停止信號
void IIC_Stop(void)
{
	hi2c1.Instance->CR1|=1<<9;
}

6.3 IIC硬件數據收發

//發送數據
void IIC_WriteData(uint8_t data)
{
   hi2c1.Instance->DR=data;
   while(!(hi2c1.Instance->SR1&1<<7)){}//等待數據發送完成
   
}
/*發送地址*/
void IIC_WriteAddr(uint8_t adrr)
{
	uint8_t stat;
	hi2c1.Instance->DR=adrr;
	while(!(hi2c1.Instance->SR1&1<<1)){}//等待數據發送完成
	stat=hi2c1.Instance->SR2;//對SR2讀取清除標志位
}
uint8_t IIC_readData(void)
{
	uint8_t data;
	hi2c1.Instance->CR1|=1<<10;//產生應答
	while(!(hi2c1.Instance->SR1&1<<6)){}//等待數據到來
	data=hi2c1.Instance->DR;
	hi2c1.Instance->CR1&=~(1<<10);//取消應答發送
	return data;
}

6.4 AT24C08讀寫字節

#define AT24C08_ADDR_W 0xA0  //器件地址+寫使能位
#define AT24C08_ADDR_R 0xA1  //器件地址+讀使能位
/*寫一個字節函數*/
void AT24C08_WriteOneByte(uint8_t addr,uint8_t data)
{
	IIC_Start();//發送起始信號
	IIC_WriteAddr(AT24C08_ADDR_W);//發送地址
	IIC_WriteData(addr);//發送寫入數據地址
	IIC_WriteData(data);//寫入數據
	IIC_Stop();//停止信號
	HAL_Delay(10);//寫周期時間
}
/*讀一個字節函數*/
uint8_t AT24C08_ReadOneByte(uint8_t addr)
{
	uint8_t data;  
	IIC_Start();//發送起始信號
	IIC_WriteAddr(AT24C08_ADDR_W);//器件地址+寫使能
	IIC_WriteData(addr);//發送寫入數據地址
	IIC_Start();//發送起始信號
	IIC_WriteAddr(AT24C08_ADDR_R);//器件地址+讀使能
	data=IIC_readData();//讀取一個字節數據
	IIC_Stop();//停止信號
	return data;
}

6.5 主函數

//發送數據
void IIC_WriteData(uint8_t data)
{
   hi2c1.Instance->DR=data;
   while(!(hi2c1.Instance->SR1&1<<7)){}//等待數據發送完成
   
}
/*發送地址*/
void IIC_WriteAddr(uint8_t adrr)
{
	uint8_t stat;
	hi2c1.Instance->DR=adrr;
	while(!(hi2c1.Instance->SR1&1<<1)){}//等待數據發送完成
	stat=hi2c1.Instance->SR2;//對SR2讀取清除標志位
}
uint8_t IIC_readData(void)
{
	uint8_t data;
	hi2c1.Instance->CR1|=1<<10;//產生應答
	while(!(hi2c1.Instance->SR1&1<<6)){}//等待數據到來
	data=hi2c1.Instance->DR;
	hi2c1.Instance->CR1&=~(1<<10);//取消應答發送
	return data;
}

注意:STM32F10x硬件IIC和FSMC不能同時使用;
??在STM32勘誤手冊中有說明:

在這里插入圖片描述

6.6 示例效果

poYBAGKTeuaAHWM5AAEf4ga-p0Q933.png

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

    關注

    12

    文章

    1840

    瀏覽量

    85289
  • STM32
    +關注

    關注

    2270

    文章

    10900

    瀏覽量

    355985
  • IIC
    IIC
    +關注

    關注

    11

    文章

    300

    瀏覽量

    38333
  • EEPORM
    +關注

    關注

    0

    文章

    2

    瀏覽量

    2041
收藏 人收藏

    評論

    相關推薦

    STM32CubeMX如何配置

    小伙伴對于電機驅動和編碼器不懂的話請看:電機驅動講解:【平衡小車制作】(二)電機驅動(超詳解)編碼器講解:【平衡小車制作】(三)編碼器講解(超詳解
    發表于 07-23 09:37

    STM32CubeMX該如何配置

    電機轉速與編碼器讀取(超詳解) 對于STM32CubeMX的配置基本類似。??話不多說,開始今天的學習吧!
    發表于 08-11 06:46

    stm32cubemx教程

    stm32cubemx教程,需要學習的看看,免積分
    發表于 11-02 10:16 ?0次下載

    STM32CubeMx使用詳解

    個人原創,圖文并茂,詳細介紹了STM32CubeMx的軟件界面,配置過程,以及對生成的Keil工程的詳細分析。
    發表于 12-15 22:42 ?16次下載

    STM32CubeMx使用詳解所用工程

    STM32CubeMx使用詳解所用工程
    發表于 10-30 15:44 ?24次下載

    STM32CubeMX新建工程的過程及方法解析

    關于STM32CubeMX新建工程的過程。最終通過STM32CubeMX工具配置完成一個驅動IO(點亮LED)的軟件工程,也就是通過STM32CubeMX配置完成之后,打開工程直接下載
    發表于 11-27 16:43 ?7131次閱讀

    關于STM32CubeMX重大升級

    STM32CubeMX重大升級
    的頭像 發表于 03-04 14:05 ?3774次閱讀

    淺談stm32cubemx安裝教程

    STM32CubeMX介紹、下載與安裝
    的頭像 發表于 03-25 10:57 ?1.8w次閱讀
    淺談<b class='flag-5'>stm32cubemx</b>安裝教程

    STM32CubeMX第三篇串口實驗

    STM32CubeMX第三篇串口實驗
    發表于 12-05 11:21 ?6次下載
    <b class='flag-5'>STM32CubeMX</b>第三篇<b class='flag-5'>之</b>串口實驗

    STM32CubeMx學習——創建LED燈工程(基于STM32L071KBU)

    STM32CubeMx學習——創建LED燈工程(基于STM32L071KBU)本文介紹利用STM32CubeMx來創建工程代碼,并且將代碼下載到開發板加以驗證。本次實驗芯片為
    發表于 12-06 20:06 ?17次下載
    <b class='flag-5'>STM32CubeMx</b>學習<b class='flag-5'>之</b>——創建LED燈工程(基于<b class='flag-5'>STM32</b>L071KBU)

    STM32CubeMX——搭建環境、編譯燒寫

    STM32CubeMX生成工程文件(一)選擇MCU和封裝(二)配置時鐘(三)配置調試模式(四)配置GPIO(五)代碼生成三、填寫main函數四、編譯與仿真運行五、燒寫與硬件實現六、總結七、參考文章一、STM32CubeMX的環境
    發表于 12-07 10:21 ?22次下載
    <b class='flag-5'>STM32CubeMX</b>——搭建環境、編譯燒寫

    STM32學習STM32cubeMX軟件安裝與使用(附STM32cubeMX5.2.1下載地址)

    STM32學習STM32cubeMX軟件安裝與使用(附STM32cubeMX5.2.1下載地址)
    發表于 12-07 11:51 ?28次下載
    <b class='flag-5'>STM32</b>學習<b class='flag-5'>之</b><b class='flag-5'>STM32cubeMX</b>軟件安裝與使用(附<b class='flag-5'>STM32cubeMX</b>5.2.1下載地址)

    STM32CubeMX 窗口及工具介紹

    STM32CubeMX 系列教程之 STM32CubeMX 窗口及 STM32PackCreator 工具介紹,內附詳細圖文介紹。
    發表于 12-14 18:51 ?27次下載
    <b class='flag-5'>STM32CubeMX</b> 窗口及工具介紹

    STM32CUBEMX開發GD32F303(14)----IIC配置OLED

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中進行開發,同時通過開發板內進行驗證。
    的頭像 發表于 07-26 13:52 ?2038次閱讀
    <b class='flag-5'>STM32CUBEMX</b>開發GD32F303(14)----<b class='flag-5'>IIC</b><b class='flag-5'>之</b>配置OLED

    STM8CubeMXSTM32CubeMX功能一樣嗎?

    STM8CubeMXSTM32CubeMX功能一樣嗎?
    的頭像 發表于 10-31 16:59 ?1805次閱讀
    STM8<b class='flag-5'>CubeMX</b>和<b class='flag-5'>STM32CubeMX</b>功能一樣嗎?
    主站蜘蛛池模板: 啪啪免费观看| 欧美日韩亚洲国产| 久久手机视频| 天堂中文资源在线地址| 222网站高清免费观看| 色偷偷88欧美精品久久久| 国产农村妇女毛片精品久久久| 人人干夜夜操| 久久九九亚洲精品| 欧美男人天堂网| 无夜精品久久久久久| 成人区精品一区二区毛片不卡| 天天干天天操天天操| 亚洲国产日韩女人aaaaaa毛片在线| 色五阁| 午夜小影院| 欧美另类亚洲一区二区| 五月婷婷激情综合网| 波多野结衣在线网站| 欧美网色| 欧色美| 欧美午夜精品久久久久久黑人| 国产精品污视频| 欧美一级视频在线观看欧美| 天天操天天干天天摸| re99热| 来啊mm影院亚洲mm影院| 天天躁天天狠天天透| 好大好紧好爽好湿润视频| 色婷婷免费视频| 菲菲国产在线观看| 成人午夜大片免费7777| 欧美女人天堂| 国产高清小视频| 日本免费黄色大片| 夜夜爱夜夜爽| 国产美女一级视频| www.毛片网站| 九九免费久久这里有精品23| 国产情侣真实露脸在线最新| 最新亚洲一区二区三区四区|