零死角玩转stm32-中级篇5、IIC(EEPROM).pdf

上传人:b****3 文档编号:3213810 上传时间:2022-11-20 格式:PDF 页数:15 大小:1.12MB
下载 相关 举报
零死角玩转stm32-中级篇5、IIC(EEPROM).pdf_第1页
第1页 / 共15页
零死角玩转stm32-中级篇5、IIC(EEPROM).pdf_第2页
第2页 / 共15页
零死角玩转stm32-中级篇5、IIC(EEPROM).pdf_第3页
第3页 / 共15页
零死角玩转stm32-中级篇5、IIC(EEPROM).pdf_第4页
第4页 / 共15页
零死角玩转stm32-中级篇5、IIC(EEPROM).pdf_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

零死角玩转stm32-中级篇5、IIC(EEPROM).pdf

《零死角玩转stm32-中级篇5、IIC(EEPROM).pdf》由会员分享,可在线阅读,更多相关《零死角玩转stm32-中级篇5、IIC(EEPROM).pdf(15页珍藏版)》请在冰豆网上搜索。

零死角玩转stm32-中级篇5、IIC(EEPROM).pdf

-第2页-00、友情提示、友情提示零死角玩转零死角玩转STM32系列教程由初级篇初级篇、中级篇中级篇、高级篇高级篇、系统篇、系统篇、四个部分组成,根据野火STM32开发板旧版教程升级而来,且经过重新深入编写,重新排版,更适合初学者,步步为营,从入门到精通,从裸奔到系统,让您零死角玩转STM32。

M3的世界,与野火同行,乐意惬无边。

另外,野火团队历时一年精心打造的STM32库开发实战指南库开发实战指南将于今年10月份由机械工业出版社机械工业出版社出版,该书的排版更适于纸质书本阅读以及更有利于查阅资料。

内容上会给你带来更多的惊喜。

是一本学习STM32必备的工具书。

敬请期待!

-第3页-55、IICIIC(EEPROMEEPROM)5.1实验描述及工程文件清单实验描述及工程文件清单实验描述实验描述向EERPOM写入数据,再读取出来,进行校验,通过串口打印写入与读取出来的数据,并输出校验结果。

硬件连接硬件连接PB6-I2C1_SCL,PB7-I2C1_SDA用到的库文件用到的库文件startup/start_stm32f10x_hd.cCMSIS/core_cm3.cCMSIS/system_stm32f10x.cFWlib/stm32f10x_gpio.cFWlib/stm32f10x_rcc.cFWlib/stm32f10x_usart.cFWlib/stm32f10x_i2c.c用户编写的文件用户编写的文件USER/main.cUSER/stm32f10x_it.cUSER/usart1.cUSER/i2c_ee.c野火STM32开发板I2C-EEPROM硬件原理图:

-第4页-5.2I2C简介简介I2C(芯片间)总线接口连接微控制器和串行I2C总线。

它提供多主机功能,控制所有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;1./*2.*函数名:

I2C_EE_Test3.*描述:

I2C(AT24C02)读写测试。

4.*输入:

无5.*输出:

无6.*返回:

无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。

1./*2.*函数名:

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 财务管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1