娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年11月09日(星期六)

正在發生

2019年11月09日 | STM8S_010_I2C讀寫EEPROM(硬件方式)

發布者:shengju 來源: eefocus關鍵字:STM8S  I2C讀寫  EEPROM  硬件方式 手機看文章 掃描二維碼
隨時隨地手機看文章

Ⅰ、寫在前面


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


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


Ⅱ、STM8硬件I2C知識


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


1.I2C的4種模式


● 從設備發送模式


● 從設備接收模式


● 主設備發送模式


● 主設備接收模式


 


2.I2C的主要特點


● 并行總線/I2C總線協議轉換器


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


● I2C主設備功能


─ 產生起始和停止信號


● I2C從設備功能


─ 可編程的 I2C 地址檢測


─ 停止位檢測


● 產生和檢測7位/10位地址和廣播呼叫


● 支持不同的通訊速度


─ 標準速度(最高 100 kHz)


─ 快速(最高 400 kHz)


● 狀態標志:


─ 發送器/接收器模式標志


─ I2C 總線忙標志


─ 主模式時的仲裁失敗


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


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


─ 禁止時鐘展寬功能時數據過載或欠載


● 3種中斷


─ 1 個通訊中斷


─ 1 個出錯中斷


─ 1 個喚醒中斷


● 喚醒功能


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


● 可選的時鐘展寬功能


 


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


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


● 配置時鐘控制寄存器


● 配置上升時間寄存器


● 編程I2C_CR1寄存器啟動外設


● 置I2C_CR1寄存器中的START位為1,產生起始條件


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


● 標準模式下為:1MHz


● 快速模式下為:4MHz


 


Ⅲ、軟件工程源代碼


1.關于工程


本文提供的工程代碼是基于前面軟件工程“STM8S-A04_UART基本收發數據”增加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:設備地址位數


16:輸入時鐘(單位M)


3.EEPROM_WriteByte寫一字節


寫一字節分為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.數據地址 */


#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_SendData(Data);


  while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));


 


  /* 5.停止 */


  I2C_GenerateSTOP(ENABLE);


}


 


4.EEPROM_ReadByte讀一字節


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


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.數據地址 */


#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.讀一字節數據 */


  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



提示:如果網盤鏈接失效,可以微信公眾號“底部菜單”查看更新鏈接。



關鍵字:STM8S  I2C讀寫  EEPROM  硬件方式 引用地址:STM8S_010_I2C讀寫EEPROM(硬件方式)

上一篇:I2C總線淺談之(四)--STM8的IIC驅動文件示例
下一篇:STM8 I/O口模擬I2C

推薦閱讀

當前,中國政府正致力于推進兩化融合,智能制造無疑是中國的重要戰略部署之一。據近日發布的《2017-2018中國智能制造發展年度報告》預測,到2020年,中國智能制造市場規模將超過2200億元。為實現這樣的發展目標,解決當下生產現場人手短缺、工匠老齡化、產品精度提高、生產效率不足等重要課題,是制造業轉型的關鍵。作為全球知名的自動化控制及電子設備制...
  測試、校準、普通系統操作等模擬應用經常需要具有準確振幅和頻率、THD(總諧波失真)很低的正弦波形。一些應用要求此類波形的發生器能用外部時序信號來使輸出準確同步。簡單的正弦波發生器能提供多個性能級別,但保持低THD和恒定振幅是個問題,特別是如果輸出和同步信號必須在擴展的頻率范圍內保持鎖定的話。  圖1中的電路能通過三個十倍頻程(20Hz...
做芯片難,做WIFI6芯片更難。三伍微之前推出過一顆WIFI6開關,成為某WIFI6芯片平臺的獨家供應商,出貨已達KK級,但遠低于之前給出的計劃每月10KK顆。詢問是主芯片的問題還是市場的問題,得到的回復是物聯網WIFI6市場還沒有起來,預計在2021年上半年爆發。三伍微WIFI6開關在國內知名手機旗艦機上測試通過,也是國內唯一能夠完全替換Skyworks的廠家。國產WIF...
意法半導體汽車級導航及航位推算模塊簡化設計,提高性能中國,2021 年11月9日——為了用先進的 GNSS 芯片組和模塊支持汽車導航定位市場發展,意法半導體推出了Teseo模塊家族的最新成員Teseo-VIC3DA。Teseo-VIC3DA整合意法半導體的高性能車用衛星定位芯片Teseo III GNSS IC 與車用6 軸 MEMS 慣性測量單元 (IMU) 和航位推算軟件,創造了一個開發...

史海拾趣

小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 广平县| 南宫市| 上杭县| 望奎县| 怀仁县| 柞水县| 珠海市| 大荔县| 远安县| 如皋市| 新津县| 玛多县| 东乌珠穆沁旗| 曲阜市| 集贤县| 乌恰县| 灯塔市| 胶州市| 哈密市| 宁蒗| 沧州市| 宿迁市| 金山区| 福安市| 西丰县| 晋宁县| 金沙县| 楚雄市| 杂多县| 南平市| 南昌市| 延边| 孟连| 清镇市| 南靖县| 读书| 漾濞| 禹州市| 武夷山市| 专栏| 安阳县|