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

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

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

3天內(nèi)不再提示

STM8S_010_I2C讀寫EEPROM (硬件方式)

黃工的嵌入式技術(shù)圈 ? 來源:黃工的嵌入式技術(shù)圈 ? 2020-03-14 14:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

周末需要休息,也需要做事,像我這種,周末也不忘寫文章分享給你們。目的很簡單,就是讓你們不休息。

開玩笑啦

像我這種人

還是希望你們多學點知識

正所謂學到老,活到老

寫在前面

相信看過前面那篇文章“更加深入理解 I2C總線、協(xié)議及應用”的人,對I2C都有一定的了解了。那篇文章是針對I2C使用單片機IO模擬I2C方式實現(xiàn)讀寫操作。

本文將講述硬件I2C讀寫操作,也就是由處理器自身硬件的I2C實現(xiàn)時鐘、數(shù)據(jù)的傳輸過程。

為方便大家閱讀,本文內(nèi)容已經(jīng)整理成PDF文件:

http://pan.baidu.com/s/1i5uWhJR

STM8硬件I2C知識

STM8S的I2C模塊不僅可以接收和發(fā)送數(shù)據(jù),還可以在接收時將數(shù)據(jù)從串行轉(zhuǎn)換成并行數(shù)據(jù),在發(fā)送時將數(shù)據(jù)從并行轉(zhuǎn)換成串行數(shù)據(jù)。可以開啟或禁止中斷。接口通過數(shù)據(jù)引腳(SDA)和時鐘引腳(SCL)連接到I2C總線。允許連接到標準(最高100kHz)或快速(最高400kHz)的I2C總線。

1.I2C的4種模式

● 從設備發(fā)送模式

● 從設備接收模式

● 主設備發(fā)送模式

● 主設備接收模式

2.I2C的主要特點

● 并行總線/I2C總線協(xié)議轉(zhuǎn)換器

● 多主機功能:該模塊既可做主設備也可做從設備

● I2C主設備功能

─ 產(chǎn)生起始和停止信號

● I2C從設備功能

─ 可編程的 I2C 地址檢測

─ 停止位檢測

● 產(chǎn)生和檢測7位/10位地址和廣播呼叫

● 支持不同的通訊速度

─ 標準速度(最高 100 kHz)

─ 快速(最高 400 kHz)

● 狀態(tài)標志:

─ 發(fā)送器/接收器模式標志

─ I2C 總線忙標志

─ 主模式時的仲裁失敗

─ 地址/數(shù)據(jù)傳輸后的應答(ACK)錯誤

─ 檢測到錯誤的起始或停止條件

─ 禁止時鐘展寬功能時數(shù)據(jù)過載或欠載

● 3種中斷

─ 1 個通訊中斷

─ 1 個出錯中斷

─ 1 個喚醒中斷

● 喚醒功能

─ 從模式下如果檢測到地址匹配可以將 MCU 從低功耗模式中喚醒

● 可選的時鐘展寬功能

3.主模式所要求的操作順序

● 在I2C_FREQR寄存器中設定該模塊的輸入時鐘以產(chǎn)生正確的時序

● 配置時鐘控制寄存器

● 配置上升時間寄存器

● 編程I2C_CR1寄存器啟動外設

● 置I2C_CR1寄存器中的START位為1,產(chǎn)生起始條件

● I2C模塊的輸入時鐘頻率必須至少是:

● 標準模式下為:1MHz

● 快速模式下為:4MHz

軟件工程源代碼

1.關(guān)于工程

本文提供的工程代碼是基于前面軟件工程“STM8S-A04_UART基本收發(fā)數(shù)據(jù)”增加I2C接口修改而來。讀寫EEPROM的方式和之前“模擬I2C讀寫”的方式不一樣。

2.硬件I2C初始化

void I2C_Initializes(void)

{

CLK_PeripheralClockConfig(CLK_PERIPHERAL_I2C, ENABLE);

I2C_Cmd(ENABLE);

I2C_Init(I2C_SPEED, I2C_SLAVE_ADDRESS7, I2C_DUTYCYCLE_2, I2C_ACK_CURR,

I2C_ADDMODE_7BIT, 16);

}

I2C_SPEED:I2C速度,一般是100K - 400K

I2C_SLAVE_ADDRESS7:從設備地址,作為主設備時,這個地址不起作用。

I2C_DUTYCYCLE_2:快速模式

I2C_ACK_CURR:應答

I2C_ADDMODE_7BIT:設備地址位數(shù)

16:輸入時鐘(單位M)

2.EEPROM_WriteByte寫一字節(jié)

寫一字節(jié)分為5個步驟:

void EEPROM_WriteByte(uint16_t Addr, uint8_t Data)

{

while(I2C_GetFlagStatus(I2C_FLAG_BUSBUSY));

/* 1.開始 */

I2C_GenerateSTART(ENABLE);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));

/* 2.設備地址/寫 */

I2C_Send7bitAddress(EEPROM_DEV_ADDR, I2C_DIRECTION_TX);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

/* 3.數(shù)據(jù)地址 */

#if (8 == EEPROM_WORD_ADDR_SIZE)

I2C_SendData((Addr&0x00FF));

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

#else

I2C_SendData((uint8_t)(Addr>>8));

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

I2C_SendData((uint8_t)(Addr&0x00FF));

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

#endif

/* 4.寫一字節(jié)數(shù)據(jù) */

I2C_SendData(Data);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

/* 5.停止 */

I2C_GenerateSTOP(ENABLE);

}

3.EEPROM_ReadByte讀一字節(jié)

讀一字節(jié)比寫一字節(jié)多了2個步驟,原因是讀的時候多寫地址到讀數(shù)據(jù)這個切換過程。

void EEPROM_ReadByte(uint16_t Addr, uint8_t *Data)

{

while(I2C_GetFlagStatus(I2C_FLAG_BUSBUSY));

/* 1.開始 */

I2C_GenerateSTART(ENABLE);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));

/* 2.設備地址/寫 */

I2C_Send7bitAddress(EEPROM_DEV_ADDR, I2C_DIRECTION_TX);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

/* 3.數(shù)據(jù)地址 */

#if (8 == EEPROM_WORD_ADDR_SIZE)

I2C_SendData((Addr&0x00FF));

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

#else

I2C_SendData((uint8_t)(Addr>>8));

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

I2C_SendData((uint8_t)(Addr&0x00FF));

while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));

#endif

/* 4.重新開始 */

I2C_GenerateSTART(ENABLE);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));

/* 5.設備地址/讀 */

I2C_Send7bitAddress(EEPROM_DEV_ADDR, I2C_DIRECTION_RX);

while(!I2C_CheckEvent(I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));

/* 6.讀一字節(jié)數(shù)據(jù) */

I2C_AcknowledgeConfig(I2C_ACK_NONE);

while(I2C_GetFlagStatus(I2C_FLAG_RXNOTEMPTY) == RESET);

*Data = I2C_ReceiveData();

/* 7.停止 */

I2C_GenerateSTOP(ENABLE);

}

Ⅳ下載

STM8S資料:

http://pan.baidu.com/s/1o7Tb9Yq

軟件源代碼工程兩版本(STM8S-A10_I2C讀寫EEPROM(硬件)):

http://pan.baidu.com/s/1c2EcRo0

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

    關(guān)注

    9

    文章

    1146

    瀏覽量

    86350
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1562

    瀏覽量

    131747
  • STM8S
    +關(guān)注

    關(guān)注

    16

    文章

    149

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    CS32L010F8的flash擦除,讀寫操作

    求CS32L010F8的flash擦除,讀寫操作參考例程,自己寫的一直不能用,不知道哪出問題了,謝謝啦
    發(fā)表于 04-25 22:34

    Microchip AT24C512CI2C 兼容串行 EEPROM 的深度解析

    Microchip AT24C512CI2C 兼容串行 EEPROM 的深度解析 在電子設計領域,EEPROM(電可擦可編程只讀存儲器)是
    的頭像 發(fā)表于 03-30 14:15 ?363次閱讀

    利用I2C接口采用輪詢方式讀寫EEPROM芯片

    利用I2C接口,采用輪詢方式讀寫EEPROM芯片 #define TESTI2C2 //I2C
    發(fā)表于 01-23 06:00

    RA MCU眾測寶典 | I2C讀取EEPROM

    I2C協(xié)議讀取EEPROM數(shù)據(jù)。瑞薩嵌入式小百科將帶著大家從I2C總線原理、EEPROM(AT24C02)特性,到FSP中
    的頭像 發(fā)表于 01-13 18:05 ?8211次閱讀
    RA MCU眾測寶典 | <b class='flag-5'>I</b>2<b class='flag-5'>C</b>讀取<b class='flag-5'>EEPROM</b>

    AS32X601的I2C模塊操作EEPROM詳解

    。 I2C接口模塊實現(xiàn)了I2C協(xié)議的標準模式和快速模式,支持多主機I2C總線架構(gòu)。其標準模式為100K,快速模式400K。而EEPROM,作為一種支持字節(jié)級單獨擦寫、數(shù)據(jù)掉電不丟失的存
    的頭像 發(fā)表于 12-21 21:39 ?1602次閱讀
    AS32X601的<b class='flag-5'>I2C</b>模塊操作<b class='flag-5'>EEPROM</b>詳解

    CW32單片機I2C接口來讀寫EEPROM芯片

    _t u8State = 0; uint8_t receivedflag = 0; //讀取完成標志 6.主程序:利用I2C接口,采用中斷方式讀寫
    發(fā)表于 12-09 07:43

    基于CW32 MCU的I2C接口優(yōu)化穩(wěn)定讀寫EEPROM關(guān)鍵技術(shù)

    問題,實現(xiàn)多個EEPROM設備的穩(wěn)定讀寫操作。 通過這些優(yōu)化技術(shù),能夠有效提升CW32 MCU在I2C通信中的穩(wěn)定性和可靠性,確保在復雜環(huán)境下的數(shù)據(jù)傳輸安全和穩(wěn)定。
    發(fā)表于 12-03 07:29

    探索CAT34C02:2-Kb I2C EEPROM的卓越性能與應用

    專為DDR2 DIMM SPD(串行存在檢測)應用設計的2-Kb I2C EEPROM,它具有眾多出色的特性和功能,能為工程師們的設計帶來諸
    的頭像 發(fā)表于 11-27 11:18 ?581次閱讀
    探索CAT34<b class='flag-5'>C</b>02:<b class='flag-5'>2</b>-Kb <b class='flag-5'>I</b>2<b class='flag-5'>C</b> <b class='flag-5'>EEPROM</b>的卓越性能與應用

    ?CAT24C64 64Kb I2C CMOS串行EEPROM技術(shù)深度解析

    安森美 (onsemi) CAT24C64 64Kb I^2^C CMOS串行EEPROM在內(nèi)部為每個8
    的頭像 發(fā)表于 11-25 10:14 ?809次閱讀
    ?CAT24<b class='flag-5'>C</b>64 64Kb <b class='flag-5'>I</b>2<b class='flag-5'>C</b> CMOS串行<b class='flag-5'>EEPROM</b>技術(shù)深度解析

    把CW32L010用FLASH模擬EEPROM

    文件 eeprom.c,添加到項目中去,下面是和別的程序怎么配合: #include \"CW32L010.h\" #include \"eeprom.h\"
    發(fā)表于 11-24 07:40

    【沁恒CH585開發(fā)板免費試用體驗】I2C 讀寫EEPROM (三)

    字節(jié),高7bit是地址,bit0是讀寫控制位,0表示寫,1表示讀 */ I2C_SendByte(EEPROM_DEV_ADDR | I2C_RD); /* 此處是讀指令 */
    發(fā)表于 08-05 22:25

    【沁恒CH585開發(fā)板免費試用體驗】I2C 讀寫EEPROM (二)

    _EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); /* Send the EEPROM\'s internal address to write to */ I2C_SendData(W
    發(fā)表于 08-05 22:13

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

    STM32H7CubeMX配置硬件I2C,讀寫失敗什么問題呀,同樣的操作F4和F1都能正常使用,應該不存在i2c地址錯誤,操作都是一樣的,但H7就是用不了。
    發(fā)表于 06-12 06:21

    【RA-Eco-RA4M2開發(fā)板評測】I2C讀取EEPROM(二)

    6 I2C讀寫EEPROM 6.1 RA Smart Configurator配置I2C 打開RA Smart Configurator,根據(jù)硬件
    發(fā)表于 04-28 23:14

    【RA-Eco-RA4M2開發(fā)板評測】I2C讀取EEPROM(一)

    的存儲器,常用來存儲一些配置信息,以便系統(tǒng)重新上電的時候加載。 EEPROM 芯片最常用的通訊方式就是 I2C 協(xié)議,本文將要講解EEPROM讀寫
    發(fā)表于 04-28 23:13