零死角玩转stm32-中级篇5、IIC(EEPROM)资料下载.pdf
- 文档编号:16121614
- 上传时间:2022-11-20
- 格式:PDF
- 页数:15
- 大小:1.12MB
零死角玩转stm32-中级篇5、IIC(EEPROM)资料下载.pdf
《零死角玩转stm32-中级篇5、IIC(EEPROM)资料下载.pdf》由会员分享,可在线阅读,更多相关《零死角玩转stm32-中级篇5、IIC(EEPROM)资料下载.pdf(15页珍藏版)》请在冰豆网上搜索。
它提供多主机功能,控制所有I2C总线特定的时序、协议、仲裁和定时。
支持标准和快速两种模式,stm32的I2C可以使用DMA方式操作。
野火STM32开发板用的是STM32F103VET6。
它有2个I2C接口。
I/O口定义为PB6-I2C1_SCL,PB7-I2C1_SDA;
PB10-I2C2_SCL,PB11-I2C2_SDA。
本实验使用I2C1,对应地连接到EERPOM(型号:
AT24C02)的SCL和SDA线。
实现I2C通讯,对EERPOM进行读写。
本实验采用主模式,分别用作主发送器和主接收器。
通过查询事件的方式来确保正常通讯。
5.3代码分析代码分析首先要添加用的库文件,在工程文件夹下Fwlib下我们需添加以下库文件:
1.stm32f10x_gpio.c2.stm32f10x_rcc.c3.stm32f10x_usart.c4.stm32f10x_i2c.c还要在stm32f10x_conf.h中把相应的头文件添加进来:
1./*Uncommentthelinebelowtoenableperipheralheaderfileinclusion*/2./*#includestm32f10x_adc.h*/3./*#includestm32f10x_bkp.h*/4./*#includestm32f10x_can.h*/5./*#includestm32f10x_crc.h*/6./*#includestm32f10x_dac.h*/7./*#includestm32f10x_dbgmcu.h*/8./*#includestm32f10x_dma.h*/9./*#includestm32f10x_exti.h*/10./*#includestm32f10x_flash.h*/11./*#includestm32f10x_fsmc.h*/12.#includestm32f10x_gpio.h13.#includestm32f10x_i2c.h14./*#includestm32f10x_iwdg.h*/15./*#includestm32f10x_pwr.h*/16.#includestm32f10x_rcc.h17./*#includestm32f10x_rtc.h*/18./*#includestm32f10x_sdio.h*/-第5页-19./*#includestm32f10x_spi.h*/20./*#includestm32f10x_tim.h*/21.#includestm32f10x_usart.h22./*#includestm32f10x_wwdg.h*/23./*#includemisc.h*/*HighlevelfunctionsforNVICandSysTick(add-ontoCMSISfunctions)*/配置好所需的库文件之后,我们就从main函数开始分析:
1./*2.*函数名:
main3.*描述:
主函数4.*输入:
无5.*输出:
无6.*返回:
无7.*/8.intmain(void)9.10./*配置系统时钟为72M*/11.SystemInit();
12.13./*串口1初始化*/14.USART1_Config();
15.16./*I2C外设初(AT24C02)始化*/17.I2C_EE_Init();
18.19.USART1_printf(USART1,rn这是一个I2C外设(AT24C02)读写测试例程rn);
20.USART1_printf(USART1,rn(_DATE_-_TIME_)rn);
21.22.I2C_Test();
23.24.while
(1)25.26.27.系统库函数SystemInit();
将系统时钟设置为72M,USART1_Config();
配置串口,关于这两个函数的具体讲解可以参考前面的教程,这里不再详述。
/*1.*函数名:
I2C_EE_Init2.*描述:
I2C外设(EEPROM)初始化3.*输入:
无4.*输出:
无5.*调用:
外部调用6.*/7.voidI2C_EE_Init(void)8.9.10.I2C_GPIO_Config();
11.12.I2C_Mode_Configu();
13.14./*根据头文件i2c_ee.h中的定义来选择EEPROM要写入的地址*/15.#ifdefEEPROM_Block0_ADDRESS16./*选择EEPROMBlock0来写入*/17.EEPROM_ADDRESS=EEPROM_Block0_ADDRESS;
18.#endif-第6页-19.20.#ifdefEEPROM_Block1_ADDRESS21./*选择EEPROMBlock1来写入*/22.EEPROM_ADDRESS=EEPROM_Block1_ADDRESS;
23.#endif24.25.#ifdefEEPROM_Block2_ADDRESS26./*选择EEPROMBlock2来写入*/27.EEPROM_ADDRESS=EEPROM_Block2_ADDRESS;
28.#endif29.30.#ifdefEEPROM_Block3_ADDRESS31./*选择EEPROMBlock3来写入*/32.EEPROM_ADDRESS=EEPROM_Block3_ADDRESS;
33.#endifI2C_EE_Init();
是用户编写的函数,其中调用了I2C_GPIO_Config();
配置好I2C所用的I/O端口,调用I2C_Mode_Configu();
设置I2C的工作模式。
并使能相关外设的时钟。
其中的条件编译确定了EERPOM的器件地址,按我们的硬件设置方式,地址为0xA0;
I2C_EE_Test3.*描述:
I2C(AT24C02)读写测试。
4.*输入:
无7.*/8.voidI2C_Test(void)9.10.u16i;
11.12.printf(写入的数据nr);
13.14.for(i=0;
i=255;
i+)/填充缓冲15.16.I2c_Buf_Writei=i;
17.18.printf(0x%02X,I2c_Buf_Writei);
19.if(i%16=15)20.printf(nr);
21.22.23./将I2c_Buf_Write中顺序递增的数据写入EERPOM中24.I2C_EE_BufferWrite(I2c_Buf_Write,EEP_Firstpage,256);
25.26.printf(nr读出的数据nr);
27./将EEPROM读出数据顺序保持到I2c_Buf_Read中28.I2C_EE_BufferRead(I2c_Buf_Read,EEP_Firstpage,256);
29.30./将I2c_Buf_Read中的数据通过串口打印31.for(i=0;
i256;
i+)32.33.if(I2c_Buf_Readi!
=I2c_Buf_Writei)34.35.printf(0x%02X,I2c_Buf_Readi);
36.printf(错误:
I2CEEPROM写入与读出的数据不一致nr);
37.return;
38.39.printf(0x%02X,I2c_Buf_Readi);
-第7页-40.if(i%16=15)41.printf(nr);
42.43.44.printf(I2C(AT24C02)读写测试成功nr);
45.I2C_Test(void)是这个例程中最主要的部分,把0255按顺序填入缓冲区并通过串口打印到端口,接着把缓冲区的数据通过调用I2C_EE_BufferWrite()函数写入EEPROM。
I2C_EE_BufferWrite3.*描述:
将缓冲区中的数据写到I2CEEPROM中4.*输入:
-pBuffer缓冲区指针5.*-WriteAddr接收数据的EEPROM的地址6.*-NumByteToWrite要写入EEPROM的字节数7.*输出:
无8.*返回:
无9.*调用:
外部调用10.*/11.voidI2C_EE_BufferWrite(u8*pBuffer,u8WriteAddr,u16NumByteToWrite)12.13.u8NumOfPage=0,NumOfSingle=0,Addr=0,count=0;
14.15.Addr=WriteAddr%I2C_PageSize;
16.count=I2C_PageSize-Addr;
17.NumOfPage=NumByteToWrite/I2C_PageSize;
18.NumOfSingle=NumByteToWrite%I2C_PageSize;
19.20./*IfWriteAddrisI2C_PageSizealigned*/21.if(Addr=0)22.23./*IfNumByteToWriteI2C_PageSize*/30.else31.32.while(NumOfPage-)33.34.I2C_EE_PageWrite(pBuffer,WriteAddr,I2C_PageSize);
35.I2C_EE_WaitEepromStandbyState();
36.WriteAddr+=I2C_PageSize;
37.pBuffer+=I2C_PageSize;
38.39.40.if(NumOfSingle!
=0)41.42.I2C_EE_PageWrite(pBuffer,WriteAddr,NumOfSingle);
4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 死角 stm32 中级 IIC EEPROM