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

STM32入門學習筆記之EEPROM存儲實驗4

發布者:xi24最新更新時間:2024-03-25 來源: elecfans關鍵字:STM32  EEPROM 手機看文章 掃描二維碼
隨時隨地手機看文章

(2)創建at24cxx.c文件,并輸入以下代碼


/*********************************************************************************************************

                EEPROM    驅    動    程    序

*********************************************************************************************************/

#include 'at24cxx.h'

#include 'delay.h'

/***************************************************

Name    :IIC_Start

Function  :IIC起始信號

Paramater  :None

Return    :None

***************************************************/

void IIC_Start()

{

  GPIOB->CRL &= 0x0FFFFFFF ;                                      //PB7推挽輸出

  GPIOB->CRL |= 0x30000000 ;

  IIC_SDA = 1 ;

  IIC_SCL = 1 ;

  delay_us( 4 ) ;

  IIC_SDA = 0 ;

  delay_us( 4 ) ;

  IIC_SCL = 0 ;

}

/***************************************************

Name    :IIC_Stop

Function  :IIC停止信號

Paramater  :None

Return    :None

***************************************************/

void IIC_Stop()

{

  GPIOB->CRL &= 0x0FFFFFFF ;                                      //PB7推挽輸出

  GPIOB->CRL |= 0x30000000 ;

  IIC_SCL = 0 ;

  IIC_SDA = 0 ;

   delay_us( 4 ) ;

  IIC_SCL = 1 ;

  IIC_SDA = 1 ;

  delay_us( 4 ) ;

}

/***************************************************

Name    :IIC_Wait_Ack

Function  :IIC等待應答

Paramater  :None

Return    :

      0:成功

      1:失敗

***************************************************/

void IIC_Wait_Ack()

{

  u8 Time = 0 ;

  GPIOB->CRL &= 0x0FFFFFFF ;

  GPIOB->CRL |= 0x80000000 ;

  IIC_SDA = 1 ;

  delay_us( 1 ) ;

  IIC_SCL = 1 ;

  delay_us( 1 ) ;

  while( IIC_SDA_READ )

  {

    Time ++ ;

    if( Time>250 )

    {

      IIC_Stop() ;

      break ;

    }

  }

  IIC_SCL = 0 ;

}

/***************************************************

Name    :IIC_Send_Byte

Function  :IIC發送一個字節

Paramater  :

      ack:應答使能

        0:不應答

        1:應答

Return    :None

***************************************************/

void IIC_Send_Byte( u8 Byte )

{

  u8 i;

  GPIOB->CRL &= 0x0FFFFFFF ;                                      //PB7推挽輸出

  GPIOB->CRL |= 0x30000000 ;

  IIC_SCL = 0 ;

  for( i=0; i<8; i++ )

  {

    if( ( Byte&0x80 )==0x80 )

      IIC_SDA = 1 ;

    else

      IIC_SDA = 0 ;

    Byte <<= 1 ;

    delay_us( 2 ) ;

    IIC_SCL = 1 ;

    delay_us( 2 ) ;

    IIC_SCL = 0 ;

    delay_us( 2 ) ;

  }

}

/***************************************************

Name    :IIC_Read_Byte

Function  :IIC讀取一個字節

Paramater  :

      ack:應答使能

        0:不應答

        1:應答

Return    :None

***************************************************/

u8 IIC_Read_Byte( u8 Ack )

{

  u8 i,Byte=0;

  GPIOB->CRL &= 0x0FFFFFFF ;

  GPIOB->CRL |= 0x80000000 ;

  for( i=0; i<8; i++ )

  {

    IIC_SCL = 0 ;

    delay_us( 2 ) ;

    IIC_SCL = 1 ;

    Byte <<= 1 ;

    if( IIC_SDA_READ )

      Byte |= 0x01 ;

    delay_us( 1 ) ;

  }

  IIC_SCL = 0 ;

  GPIOB->CRL &= 0x0FFFFFFF ;                                      //PB7推挽輸出

  GPIOB->CRL |= 0x30000000 ;

  IIC_SDA = 1 - Ack ;

  delay_us( 2 ) ;

  IIC_SCL = 1 ;

  delay_us( 2 ) ;

  IIC_SCL = 0 ;

  return Byte ;

}

/***************************************************

Name    :AT24Cxx_Write_Data

Function  :寫入1個數據

Paramater  :

      Address:地址

      Data:數據

Return    :讀到的數據

***************************************************/

void AT24Cxx_Write_Data( u16 Address, u8 Data )

{                                                      

  IIC_Start() ;

  IIC_Send_Byte( 0xA0|( Address/256 )<<1 ) ;                              //發送器件地址,寫數據

  IIC_Wait_Ack() ;

  IIC_Send_Byte( Address%256 ) ;                                    //發送低地址

  IIC_Wait_Ack() ;

  IIC_Send_Byte( Data ) ;                                        //發送字節

  IIC_Wait_Ack() ;

  IIC_Stop() ;                                            //產生一個停止條件

  delay_ms( 10 ) ;                                          //EEPROM的寫入速度比較慢

}

/***************************************************

Name    :AT24Cxx_Write_nData

Function  :寫入n個數據

Paramater  :

      Address:地址

      *Buffer:數據緩存

      Len:數據長度

Return    :None

***************************************************/

void AT24Cxx_Write_nData( u16 Address, u8 *Buffer, u16 Len ) 

{

  u16 i ;

  for( i=0; iAPB2ENR |= 1<<3 ;                                        //先使能外設GPIOB時鐘

  GPIOB->CRL &= 0x00FFFFFF ;                                      //PB6和PB7推挽輸出

  GPIOB->CRL |= 0x33000000 ;

  GPIOB->ODR |= 3<<6 ;                                        //PB6和PB7輸出高

  while( AT24Cxx_Check()==0 ) ;

}

(3)創建1.c文件并輸入以下代碼。



#include 'sys.h'

#include 'delay.h'

#include 'usart1.h'

#include 'lcd.h'

#include 'at24cxx.h'



u8 TEXT_Buffer[] = 'STM32F103 IIC Test' ;

int main()

{

  u8 datatemp[ 17 ] ;

  STM32_Clock_Init( 9 ) ;                                        //STM32時鐘初始化

  SysTick_Init( 72 ) ;                                        //SysTick初始化

  USART1_Init( 72, 115200 ) ;                                      //初始化串口1波特率115200

  LCD_Init() ;                                            //LCD初始化

  AT24Cxx_Init() ;                                          //AT24C初始化

   POINT_COLOR = RED ;                                          //設置字體為紅色

  AT24Cxx_Write_nData( 0, TEXT_Buffer, 18 ) ;                              //從第0個地址處開始寫入

  AT24Cxx_Read_nData( 0, datatemp, 18 ) ;                                //從第0個地址處開始讀出

  LCD_ShowString( 0, 0, datatemp ) ;                                  //顯示讀到的字符串

  while( 1 )

  {


  }

}

16.4.2 硬件IIC控制


注:由于STM32的硬件IIC總是容易卡死(這也是為什么網絡上幾乎沒有硬件IIC通訊的例子的原因),所以這里采用了ST內部提供的通訊機制來保證IIC的正常使用。


(1)創建at24cxx.h文件并輸入以下代碼。


復制

/*********************************************************************************************************

                EEPROM    驅    動    文    件

*********************************************************************************************************/

#ifndef _AT24Cxx_H_

#define _AT24Cxx_H_



#include 'sys.h'

/*********************************************************************************************************

                    函    數    列    表

*********************************************************************************************************/

void AT24Cxx_Init( void ) ;                                        //AT24C初始化

void IIC_Write_Data( u8 Address, u8 Data ) ;                              //寫入1個數據

void AT24Cxx_Write_nData( u16 Address, u8 *Buffer, u16 Len ) ;                      //寫入n個數據

void AT24Cxx_Read_Data( u16 Address, u8 *Data ) ;                            //讀取1個數據

void AT24Cxx_Read_nData( u16 Address, u8 *Buffer, u16 Len ) ;                      //讀取n個數據

[1] [2]
關鍵字:STM32  EEPROM 引用地址:STM32入門學習筆記之EEPROM存儲實驗4

上一篇:STM32學習中關于C語言基礎知識點
下一篇:STM32入門學習筆記之看門狗實驗(下)

推薦閱讀最新更新時間:2025-06-07 23:28

RAM、SRAM、SDRAM、ROM、EPROM、EEPROM、Flash存儲器概念
常見存儲器概念:RAM、SRAM、SDRAM、ROM、EPROM、EEPROM、Flash存儲器可以分為很多種類,其中根據掉電數據是否丟失可以分為RAM(隨機存取存儲器)和ROM(只讀存儲器),其中RAM的訪問速度比較快,但掉電后數據會丟失,而ROM掉電后數據不會丟失。 在單片機中,RAM主要是做運行時數據存儲器,FLASH主要是程序存儲器,EEPROM主要是用以在程序運行保存一些需要掉電不丟失的數據. FLASH:單片機運行的程序存儲的地方。 SRAM:存儲單片機運行過程中產生的了臨時數據。 EEPROM:視用戶的需要而定,一般用來存儲系統的一些參數,這些參數可能需要修改,也可能不會修改。 ROM和RAM指的都是
[單片機]
51單片機內部EEPROM讀寫
#include reg52.h #include intrins.h //定義類型,方便代碼移植 typedef unsigned char UINT8; typedef unsigned int UINT16; typedef unsigned long UINT32; typedef char INT8; typedef int INT16; typedef long INT32; static UINT8 i=0; /* 定義寄存器 ISP */ sfr ISP_DATA= 0xe2; // Flash數據寄存器 sfr ISP_ADDRH= 0xe3;// Flash高字節地址寄存器 sfr I
[單片機]
51單片機內部<font color='red'>EEPROM</font>讀寫
51單片機-EEPROM簡單使用
我們這一講簡要講解如何往EEPROM的地址0x55寫入一個數據,然后讀出這個數據的內容。本講代碼圍繞的是宋老師的lesson14_2例程代碼講解。 1.寫入一個字節內容 如果要在EEPROM的某個地址里寫入內容,那么步驟的實現歸為: 起始信號→找到這個器件是否存在(尋址),發送的字節最低位要為0意為要往這個器件寫內容→選擇EEPROM的哪個地址去寫→寫入8位的數據→停止信號。 宋老師寫的“void E2WriteByte(unsigned char addr, unsigned char dat)”函數里面,上一講都講解過里面的函數了,寫入一個字節內容的講解我們就介紹完了。 2.讀出一個字節內容 在“uns
[單片機]
AVR操作EEPROM應注意的問題
簡介:本文介紹了AVR單片機在實際使用時電源檢測的問題。 作為一個正式的系統或產品,當系統基本功能調試完成后,一旦進行現場測試階段,請注意馬上改寫熔絲位的配置,啟用AVR的電源檢測(BOD)功能。 對于5V系統,設置BOD電平為4.0V;對于3V系統,設置BOD電平為2.7V。然后允許BOD檢測。 這樣,一旦AVR的供電電壓低于BOD電平,AVR進入RESET(不執行程序了)。而當電源恢復到BOD電平以上,AVR才正式開始從頭執行程序。保證了系統的可靠性! 原因分析如下: AVR是寬電壓工作的芯片,當電壓跌至2.5V,系統程序還能工作。這是有2個可怕的現象可能出現, 1、外圍芯片工作已經混亂,AVR讀到的東
[單片機]
stm8 內部EEPROM
第一步:EEPROM介紹 數據EEPROM(DATA)區域可用于存儲用戶具體項目所需的數據。默認情況下, DATA區域是寫保護的,這樣可以在主程序工作在IAP模式時防止DATA區域被無意地修改。只有使用特定的MASS密鑰才能對DATA區域的寫保護解鎖(請參考對DATA區域的寫操作)。請參考4.4存儲器組織結構來了解不同的STM8S MCU的DATA區域大小。 第二步:寄存器說明 第三步:具體實現 /*EEPROM初始化*/ void Eeprom_Init(void) { FLASH_CR1 |= 0x01; //編程時間固定位標準編程時間tprog FLASH_CR2 |=
[單片機]
stm8 內部<font color='red'>EEPROM</font>
ATmega8的eeprom讀寫操作程序
ATmega8的eeprom讀寫操作,實測沒問題 單片機源程序如下: //ICC-AVR application builder // Target : M8 // Crystal: 8.0000Mhz #include iom8v.h #include macros.h #include 74164.h #include eeprom.h unsigned char display ; // 顯示緩沖區 unsigned char dis; // 當前顯示 unsigned char s,m; // 時間 //TIMER0 initialisation - prescale:256 /
[單片機]
HOLTEK推出HT24LC256新款大容量串行式EEPROM
HOLTEK推出新款串行式EEPROM產品 -- HT24LC256,使用兩線式串行接口,總共有256K位內存容量,內存架構為32768×8位。 HT24LC256的最快工作頻率為400kHz,工作電壓為2.2V至5.5V。它提供幾種讀寫操作,支持字節寫入、亦可使用64字節整頁寫入功能,以及隨機讀取和連續讀取功能,并有全部內存寫保護引腳,用于保護內存內容。其最大工作和待機電流分別為5mA和2uA。HT24LC256可承受高達100萬次的寫入作業,并可儲存數據長達40年之久。采用8SOP和8DIP的封裝形式。 HOLTEK已正式提供HT24LC256的樣品并可量產出貨。其封裝腳位及規格與市場其它多家的產
[嵌入式]
HOLTEK推出HT24LC256新款大容量串行式<font color='red'>EEPROM</font>
LTC2978-具EEPROM的8通道PMBus電源監視器和控制器
???? 描述:   LTC ? 2978 是一款符合 PMBus 標準的 8 通道電源監視器、.、排序器和裕度控制器。PMBus 功能包括報警以及用于 8 個輸出通道和 1 個輸入通道的故障 OV/UV 門限對。可編程故障響應能夠利用“在檢測到故障之后執行重試操作”的選項來停用電源。PMBus 讀數允許監視 8 個輸出電壓和 1 個輸入電壓。此外,奇數通道能夠替代檢測電阻器電壓測量以進行輸出電壓測量。PMBus 命令支持電源排序和至 3 個編程值之一的精準負載點電壓伺服:高裕度、低裕度和標稱裕度。一個可編程看門狗定時器負責監視微處理器運作的失速狀態,并在必要時使微處理器復位。單線式同步總線支持在多個 LTC2978 器件上進
[電源管理]
LTC2978-具<font color='red'>EEPROM</font>的8通道PMBus電源監視器和控制器
小廣播
設計資源 培訓 開發板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 永寿县| 辽源市| 崇阳县| 渭源县| 佛冈县| 蕉岭县| 高平市| 鸡西市| 田阳县| 大安市| 镇江市| 井陉县| 始兴县| 屯门区| 合江县| 龙海市| 清苑县| 娄烦县| 巴彦淖尔市| 龙南县| 衡阳县| 揭西县| 嵊泗县| 孝感市| 镇赉县| 昌江| 九龙坡区| 临高县| 鄄城县| 玉树县| 佳木斯市| 乾安县| 长白| 木里| 岐山县| 和平县| 吉木萨尔县| 中江县| 嘉定区| 衡水市| 尚志市|