国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

STM8S_010_I2C讀寫EEPROM (硬件方式)

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

掃碼添加小助手

加入工程師交流群

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

開玩笑啦

像我這種人

還是希望你們多學(xué)點(diǎn)知識(shí)

正所謂學(xué)到老,活到老

寫在前面

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

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

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

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

STM8硬件I2C知識(shí)

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

1.I2C的4種模式

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

● 從設(shè)備接收模式

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

● 主設(shè)備接收模式

2.I2C的主要特點(diǎn)

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

● 多主機(jī)功能:該模塊既可做主設(shè)備也可做從設(shè)備

● I2C主設(shè)備功能

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

● I2C從設(shè)備功能

─ 可編程的 I2C 地址檢測

─ 停止位檢測

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

● 支持不同的通訊速度

─ 標(biāo)準(zhǔn)速度(最高 100 kHz)

─ 快速(最高 400 kHz)

● 狀態(tài)標(biāo)志:

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

─ I2C 總線忙標(biāo)志

─ 主模式時(shí)的仲裁失敗

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

─ 檢測到錯(cuò)誤的起始或停止條件

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

● 3種中斷

─ 1 個(gè)通訊中斷

─ 1 個(gè)出錯(cuò)中斷

─ 1 個(gè)喚醒中斷

● 喚醒功能

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

● 可選的時(shí)鐘展寬功能

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

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

● 配置時(shí)鐘控制寄存器

● 配置上升時(shí)間寄存器

● 編程I2C_CR1寄存器啟動(dòng)外設(shè)

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

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

● 標(biāo)準(zhǔn)模式下為: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:從設(shè)備地址,作為主設(shè)備時(shí),這個(gè)地址不起作用。

I2C_DUTYCYCLE_2:快速模式

I2C_ACK_CURR:應(yīng)答

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

16:輸入時(shí)鐘(單位M)

2.EEPROM_WriteByte寫一字節(jié)

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

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.設(shè)備地址/寫 */

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個(gè)步驟,原因是讀的時(shí)候多寫地址到讀數(shù)據(jù)這個(gè)切換過程。

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.設(shè)備地址/寫 */

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.設(shè)備地址/讀 */

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)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • EEPROM
    +關(guān)注

    關(guān)注

    9

    文章

    1137

    瀏覽量

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

    關(guān)注

    28

    文章

    1556

    瀏覽量

    131241
  • STM8S
    +關(guān)注

    關(guān)注

    16

    文章

    149

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

    CW32單片機(jī)I2C接口來讀寫EEPROM芯片

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

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

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

    探索CAT34C02:2-Kb I2C EEPROM的卓越性能與應(yīng)用

    專為DDR2 DIMM SPD(串行存在檢測)應(yīng)用設(shè)計(jì)的2-Kb I2C EEPROM,它具有眾多出色的特性和功能,能為工程師們的設(shè)計(jì)帶來諸
    的頭像 發(fā)表于 11-27 11:18 ?404次閱讀
    探索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>的卓越性能與應(yīng)用

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

    安森美 (onsemi) CAT24C64 64Kb I^2^C CMOS串行EEPROM在內(nèi)部為每個(gè)8
    的頭像 發(fā)表于 11-25 10:14 ?573次閱讀
    ?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,添加到項(xiàng)目中去,下面是和別的程序怎么配合: #include \"CW32L010.h\" #include \"eeprom.h\"
    發(fā)表于 11-24 07:40

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

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

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

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

    【沁恒CH585開發(fā)板免費(fèi)試用體驗(yàn)】I2C 讀寫EEPROM (一)

    10100000(0xa0),讀設(shè)備地址為10100001(0xa1)。 3 硬件設(shè)計(jì)及連接 本文是使用I2C協(xié)議對EEPROM進(jìn)行讀寫操作,具體的
    發(fā)表于 08-05 22:09

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

    STM32H7CubeMX配置硬件I2C讀寫失敗什么問題呀,同樣的操作F4和F1都能正常使用,應(yīng)該不存在i2c地址錯(cuò)誤,操作都是一樣的,但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(一)

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

    基于APM32F407如何制作I2C EEPROM(AT24C02型號)的MDK-Keil下載算法

    基于APM32F407如何制作I2C EEPROM(AT24C02型號)的Keil下載算法,這樣在我們下載代碼時(shí)可以一鍵把數(shù)據(jù)燒錄到EEPROM中。
    的頭像 發(fā)表于 04-11 11:06 ?2084次閱讀
    基于APM32F407如何制作<b class='flag-5'>I2C</b> <b class='flag-5'>EEPROM</b>(AT24<b class='flag-5'>C</b>02型號)的MDK-Keil下載算法