18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(pí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 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

開玩笑啦

像我這種人

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

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

寫在前面

相信看過前面那篇文章“更加深入理解 I2C總線、協(xié)議及應(yīng)用”的人,對(duì)I2C都有一定的了解了。那篇文章是針對(duì)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)生起始和停止信號(hào)

● I2C從設(shè)備功能

─ 可編程的 I2C 地址檢測(cè)

─ 停止位檢測(cè)

● 產(chǎn)生和檢測(cè)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ò)誤

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

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

● 3種中斷

─ 1 個(gè)通訊中斷

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

─ 1 個(gè)喚醒中斷

● 喚醒功能

─ 從模式下如果檢測(cè)到地址匹配可以將 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)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • EEPROM
    +關(guān)注

    關(guān)注

    9

    文章

    1109

    瀏覽量

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

    關(guān)注

    28

    文章

    1543

    瀏覽量

    130121
  • STM8S
    +關(guān)注

    關(guān)注

    16

    文章

    149

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    ?STMicroelectronics M24C64-U 64-Kbit串行I2C總線EEPROM技術(shù)解析

    STMicroelectronics M24C64-U 64-Kbit串行^I2C^總線EEPROM專為高效可靠的數(shù)據(jù)存儲(chǔ)而設(shè)計(jì)。該STMicroelectronics EEPROM
    的頭像 發(fā)表于 10-15 17:27 ?322次閱讀
    ?STMicroelectronics M24<b class='flag-5'>C</b>64-U 64-Kbit串行<b class='flag-5'>I</b>2<b class='flag-5'>C</b>總線<b class='flag-5'>EEPROM</b>技術(shù)解析

    深入剖析I2C協(xié)議

    ,I2C也是一種可以多主設(shè)備,多從設(shè)備的總線協(xié)議,通過地址索引,I2C可以使能所需從設(shè)備,I2C的出現(xiàn)主要是用來實(shí)現(xiàn)不同集成電路組件之間的控制功能,比如通過I2C協(xié)議,連接MCU與LC
    的頭像 發(fā)表于 08-21 15:10 ?2872次閱讀
    深入剖析<b class='flag-5'>I2C</b>協(xié)議

    【沁恒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é)議對(duì)EEPROM進(jìn)行讀寫操作,具體的
    發(fā)表于 08-05 22:09

    關(guān)于cyusb3014燒寫I2C EEPROM的問題求解

    你好,我最終要實(shí)現(xiàn)每次上電只從EEPROM引導(dǎo)img,并且能夠識(shí)別到設(shè)備,不過現(xiàn)在遇到了一些問題。在使用cyusb3014芯片通過I2C燒寫EEPROM(型號(hào)為AT24C
    發(fā)表于 07-16 07:38

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

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

    I2C EEPROM無法從FX3S USB控制器啟動(dòng)怎么處理?

    在我的設(shè)計(jì)中,我們使用 USB 控制器 FX3S(CYUSB3035-BZXI)和 I2C EEPROM(M24M02-DRMN6/AT24CM02-SSHM),通過 USB 電纜成功進(jìn)行刷新,刷新
    發(fā)表于 05-20 07:47

    Cyusb3014接一塊I2C eeprom的情況下,A0、A1、A2的地址要設(shè)置嗎?

    請(qǐng)問一下,Cyusb3014接一塊I2C eeprom的情況下,A0、A1、A2的地址要設(shè)置嗎?我在控制中心以及elf2img中沒有發(fā)現(xiàn)設(shè)置I2C
    發(fā)表于 05-12 07:19

    I2C EEPROM編程失敗的原因?

    我嘗試使用 Cy Control Center 實(shí)用程序?qū)⒐碳螺d到我的 EVM 中, 第一天,我嘗試了很多次,但都失敗了,比如下面的錯(cuò)誤, I2C EEPROM 編程失敗。 我搜索了英飛凌社區(qū)
    發(fā)表于 05-06 07:25

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

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

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

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

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

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

    EEPROM輕量級(jí)的簡(jiǎn)易類文件的數(shù)據(jù)讀寫庫(kù):EEPROMFS

    雖然 EEPROM 相對(duì) Flash 讀寫速度更慢,但 EEPROM 一些獨(dú)有特性是 Flash 無法實(shí)現(xiàn)的,比如字節(jié)讀寫操作。 所以,EEPROM
    的頭像 發(fā)表于 11-15 16:31 ?1730次閱讀
    <b class='flag-5'>EEPROM</b>輕量級(jí)的簡(jiǎn)易類文件的數(shù)據(jù)<b class='flag-5'>讀寫</b>庫(kù):EEPROMFS

    TAS5727信號(hào)輸入( I2C + I2S )正常而沒有發(fā)聲是怎么回事?

    ,然后。。。程序。。。 I2S的輸入信號(hào)正常,I2C的數(shù)據(jù)可以來回讀寫,錯(cuò)誤寄存器讀回來的數(shù)據(jù)為0x00, 理解為功放IC工作正常的意思,但是聲音一直沒出來,檢查初始化步驟,跟官方文檔給出的流程出入
    發(fā)表于 10-31 07:36