基于STM32F103的IIC实验

实验七 IIC实验

一、实验目的

1. 掌握基于固件库进行编程的方法

2. 掌握基于IIC的编程方法

二、实验内容

1.实现EEPROM中数据读写并通过串口输出显示。

三、预备知识

1. 基于STM32固件库进行编程的方法

2. 基于STM32的IIC工作原理及配置过程

四、实验设备

    1. 硬件环境配置

计算机:Intel(R) Pentium(R) 及以上;

内存:1GB及以上;

实验设备:嵌入式开发平台,USB转串口数据线;

    2. 软件环境配置

操作系统:Microsoft Windows XP Professional Service Pack 2;

集成开发环境:Keil μVision5 IDE;

五、实验过程

1.电路设计

 

2.实现演示

 

3.  IIC初始化过程

IIC初始化过程通常包括以下几个步骤:

1. 确定IIC总线的时钟频率:IIC总线的时钟频率通常是由主设备控制的,需要根据从设备的最大时钟频率和通信速率确定。

2. 配置IIC控制器:根据所使用的微控制器或芯片的不同,IIC控制器的配置方法也会有所不同。通常需要设置IIC控制器的工作模式、时钟频率、主从模式、地址匹配方式等参数。

3. 配置从设备的地址:在IIC总线上,每个从设备都需要有一个独特的地址,以便主设备能够找到它。从设备的地址通常由硬件或软件来设置,具体方法也因芯片而异。

4. 发送启动信号:在开始与从设备通信之前,主设备需要发送一个启动信号,以表明它要开始发送或接收数据了。

5. 发送地址:主设备发送从设备的地址,以便确定通信对象,并判断从设备是否已准备好接收或发送数据。

6. 发送数据:如果是主设备发送数据,则发送完地址后可以直接发送数据。如果是从设备发送数据,则需要等待主设备的读取请求后才能发送。

7. 发送停止信号:当完成数据传输后,主设备需要发送一个停止信号,以表示通信结束。

4.软件设计及代码

1.IIC引脚定义

#define AT24C01 127

#define AT24C02 255

#define AT24C04 511

#define AT24C08 1023

#define AT24C16 2047

#define AT24C32 4095

#define AT24C64     8191

#define AT24C128 16383

#define AT24C256 32767  

//Mini STM32开发板使用的是24c02,所以定义EE_TYPE为AT24C02

#define EE_TYPE AT24C02

  

u8 AT24CXX_ReadOneByte(u16 ReadAddr); //指定地址读取一个字节

void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite); //指定地址写入一个字节

void AT24CXX_WriteLenByte(u16 WriteAddr,u32 DataToWrite,u8 Len);//指定地址开始写入指定长度的数据

u32 AT24CXX_ReadLenByte(u16 ReadAddr,u8 Len); //指定地址开始读取指定长度数据

void AT24CXX_Write(u16 WriteAddr,u8 *pBuffer,u16 NumToWrite); //从指定地址开始写入指定长度的数据

void AT24CXX_Read(u16 ReadAddr,u8 *pBuffer,u16 NumToRead);    //从指定地址开始读出指定长度的数据



u8 AT24CXX_Check(void);  //检查器件

void AT24CXX_Init(void); //初始化IIC

2.IIC初始化

//初始化IIC

void IIC_Init(void)

{      

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE ); //使能GPIOB时钟

   

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7); //PB6,PB7 输出高

}

3.主函数

#include "led.h"

#include "delay.h"

#include "key.h"

#include "sys.h"

#include "lcd.h"

#include "usart.h"

#include "usmart.h"  

#include "24cxx.h"  

 

//要写入到24c02的字符串数组

const u8 TEXT_Buffer[]={"Li Wei"};  

#define SIZE sizeof(TEXT_Buffer)



 int main(void)

 {  

u8 key;

u16 i=0;

u8 datatemp[SIZE];

delay_init();       //延时函数初始化   

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级

uart_init(115200);   //串口初始化为115200

LED_Init();    //初始化与LED连接的硬件接口

KEY_Init(); //按键初始化    

AT24CXX_Init(); //IIC初始化



  while(AT24CXX_Check())//检测不到24c02

{

delay_ms(500);

LED0=!LED0;//DS0闪烁

}

while(1)

{

key=KEY_Scan(0);



AT24CXX_Write(0,(u8*)TEXT_Buffer,SIZE);



if(key==KEY0_PRES)//KEY1按下,读取字符串并显示

{

 

AT24CXX_Read(0,datatemp,SIZE);

printf("The Data Readed IS:  %s",datatemp);

}

i++;

delay_ms(10);

if(i==20)

{

LED0=!LED0;//提示系统正在运行 datatemp

i=0;

}    

}

}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科创工作室li

你的鼓励将是大学生的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值