ImageVerifierCode 换一换
格式:PDF , 页数:15 ,大小:1.12MB ,
资源ID:3213810      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3213810.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(零死角玩转stm32-中级篇5、IIC(EEPROM).pdf)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、 -第 2 页-0 0、友情提示、友情提示 零死角玩转零死角玩转 STM32系列教程由初级篇初级篇、中级篇中级篇、高级篇高级篇、系统篇、系统篇、四个部分组成,根据野火 STM32 开发板旧版教程升级而来,且经过重新深入编写,重新排版,更适合初学者,步步为营,从入门到精通,从裸奔到系统,让您零死角玩转 STM32。M3 的世界,与野火同行,乐意惬无边。另外,野火团队历时一年精心打造的STM32 库开发实战指南库开发实战指南将于今年 10 月份由机械工业出版社机械工业出版社出版,该书的排版更适于纸质书本阅读以及更有利于查阅资料。内容上会给你带来更多的惊喜。是一本学习 STM32 必备的工具书。敬请

2、期待!-第 3 页-5 5、IICIIC(EEPROMEEPROM)5.1 实验描述及工程文件清单实验描述及工程文件清单 实验描述实验描述 向 EERPOM 写入数据,再读取出来,进行校验,通过串口打 印写入与读取出来的数据,并输出校验结果。硬件连接硬件连接 PB6-I2C1_SCL,PB7-I2C1_SDA 用到的库文件用到的库文件 startup/start_stm32f10 x_hd.c CMSIS/core_cm3.c CMSIS/system_stm32f10 x.c FWlib/stm32f10 x_gpio.c FWlib/stm32f10 x_rcc.c FWlib/stm32

3、f10 x_usart.c FWlib/stm32f10 x_i2c.c 用户编写的文件用户编写的文件 USER/main.c USER/stm32f10 x_it.c USER/usart1.c USER/i2c_ee.c 野火 STM32 开发板 I2C-EEPROM 硬件原理图:-第 4 页-5.2 I2C 简介简介 I2C(芯片间)总线接口连接微控制器和串行 I2C 总线。它提供多主机功能,控制所有 I2C 总线特定的时序、协议、仲裁和定时。支持标准和快速两种模式,stm32 的 I2C 可以使用 DMA 方式操作。野火 STM32 开发板用的是 STM32F103VET6。它有 2

4、个 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.stm32f10 x_gpio.c 2.stm32f10 x_rcc.c 3.stm32f10 x_usart.c 4.stm

5、32f10 x_i2c.c 还要在 stm32f10 x_conf.h 中把相应的头文件添加进来:1./*Uncomment the line below to enable peripheral header file inclusion*/2./*#include stm32f10 x_adc.h*/3./*#include stm32f10 x_bkp.h*/4./*#include stm32f10 x_can.h*/5./*#include stm32f10 x_crc.h*/6./*#include stm32f10 x_dac.h*/7./*#include stm32f10 x

6、_dbgmcu.h*/8./*#include stm32f10 x_dma.h*/9./*#include stm32f10 x_exti.h*/10./*#include stm32f10 x_flash.h*/11./*#include stm32f10 x_fsmc.h*/12.#include stm32f10 x_gpio.h 13.#include stm32f10 x_i2c.h 14./*#include stm32f10 x_iwdg.h*/15./*#include stm32f10 x_pwr.h*/16.#include stm32f10 x_rcc.h 17./*#

7、include stm32f10 x_rtc.h*/18./*#include stm32f10 x_sdio.h*/-第 5 页-19./*#include stm32f10 x_spi.h*/20./*#include stm32f10 x_tim.h*/21.#include stm32f10 x_usart.h 22./*#include stm32f10 x_wwdg.h*/23./*#include misc.h*/*High level functions for NVIC and SysTick(add-on to CMSIS functions)*/配置好所需的库文件之后,我

8、们就从 main 函数开始分析:1./*2.*函数名:main 3.*描述 :主函数 4.*输入 :无 5.*输出 :无 6.*返回 :无 7.*/8.int main(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(_DAT

9、E_ -_TIME_)rn);21.22.I2C_Test();23.24.while(1)25.26.27.系统库函数 SystemInit();将系统时钟设置为72M,USART1_Config();配置串口,关于这两个函数的具体讲解可以参考前面的教程,这里不再详述。/*1.*函数名:I2C_EE_Init 2.*描述 :I2C 外设(EEPROM)初始化 3.*输入 :无 4.*输出 :无 5.*调用 :外部调用 6.*/7.void I2C_EE_Init(void)8.9.10.I2C_GPIO_Config();11.12.I2C_Mode_Configu();13.14./*根据

10、头文件 i2c_ee.h 中的定义来选择 EEPROM 要写入的地址*/15.#ifdef EEPROM_Block0_ADDRESS 16./*选择 EEPROM Block0 来写入*/17.EEPROM_ADDRESS=EEPROM_Block0_ADDRESS;18.#endif -第 6 页-19.20.#ifdef EEPROM_Block1_ADDRESS 21./*选择 EEPROM Block1 来写入*/22.EEPROM_ADDRESS=EEPROM_Block1_ADDRESS;23.#endif 24.25.#ifdef EEPROM_Block2_ADDRESS 2

11、6./*选择 EEPROM Block2 来写入*/27.EEPROM_ADDRESS=EEPROM_Block2_ADDRESS;28.#endif 29.30.#ifdef EEPROM_Block3_ADDRESS 31./*选择 EEPROM Block3 来写入*/32.EEPROM_ADDRESS=EEPROM_Block3_ADDRESS;33.#endif I2C_EE_Init();是用户编写的函数,其中调用了I2C_GPIO_Config();配置好 I2C 所用的 I/O 端口,调用 I2C_Mode_Configu();设置 I2C 的工作模式。并使能相关外设的时钟。其

12、中的条件编译确定了 EERPOM 的器件地址,按我们的硬件设置方式,地址为 0 xA0;1./*2.*函数名:I2C_EE_Test 3.*描述 :I2C(AT24C02)读写测试。4.*输入 :无 5.*输出 :无 6.*返回 :无 7.*/8.void I2C_Test(void)9.10.u16 i;11.12.printf(写入的数据nr);13.14.for(i=0;i=255;i+)/填充缓冲 15.16.I2c_Buf_Writei=i;17.18.printf(0 x%02X,I2c_Buf_Writei);19.if(i%16=15)20.printf(nr);21.22.2

13、3./将 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

14、)34.35.printf(0 x%02X,I2c_Buf_Readi);36.printf(错误:I2C EEPROM 写入与读出的数据不一致nr);37.return;38.39.printf(0 x%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./*

15、2.*函数名:I2C_EE_BufferWrite 3.*描述 :将缓冲区中的数据写到 I2C EEPROM 中 4.*输入 :-pBuffer 缓冲区指针 5.*-WriteAddr 接收数据的 EEPROM 的地址 6.*-NumByteToWrite 要写入 EEPROM 的字节数 7.*输出 :无 8.*返回 :无 9.*调用 :外部调用 10.*/11.void I2C_EE_BufferWrite(u8*pBuffer,u8 WriteAddr,u16 NumByteToWrite)12.13.u8 NumOfPage=0,NumOfSingle=0,Addr=0,count=0;

16、14.15.Addr=WriteAddr%I2C_PageSize;16.count=I2C_PageSize-Addr;17.NumOfPage=NumByteToWrite/I2C_PageSize;18.NumOfSingle=NumByteToWrite%I2C_PageSize;19.20./*If WriteAddr is I2C_PageSize aligned */21.if(Addr=0)22.23./*If NumByteToWrite I2C_PageSize*/30.else 31.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