文章目录

  • 1、原理图
  • 2、源代码

  下载工程文件:
  https://gitee.com/Joseph_Cooper/blue-bridge-embedded

1、原理图

顺便指出了该器件的地址。

24C02是2Kbits容量,一共256字节,所以可寻址范围是0x00~0xFF

2、源代码

实验:实现每重启一次Data数据+1

读代码指令:

使用了官方提供的IO口模拟IIC时序代码。
main.c:

#include "HeadFile.h"//Main Body
int main(void)
{u8 Str[20];u8 Dat = 0;SysTick_Config(SystemCoreClock/1000);//DelayInitLEDInit();IICInit();Delay_Ms(200);STM3210B_LCD_Init();LCD_Clear(Blue);LCD_SetBackColor(Blue);LCD_SetTextColor(White);Dat = EERead(0x01);sprintf((char *)Str,"Data = %d",Dat);EEWrite(0x01, (++Dat));LCD_DisplayStringLine(Line5,Str);while(1);
}

Tips:IIC协议代码在赛场内给的资源包里面有。
IIC.h:

#ifndef IIC_H_
#define IIC_H_void IICInit(void);
void delay1(unsigned int n);void I2CStart(void);
void I2CStop(void);
void I2CSendAck(void);
void I2CSendNotAck(void);
unsigned char I2CWaitAck(void);void I2CSendByte(unsigned char cSendByte);
unsigned char I2CReceiveByte(void);//For EEPROM
void EEWrite(u8 Addr,u8 Dat);
u8   EERead(u8 Addr);#endif

IIC.c:

#include "HeadFile.h"/** I2C 总线接口 */
#define I2C_PORT GPIOB
#define SDA_Pin GPIO_Pin_7
#define SCL_Pin GPIO_Pin_6#define FAILURE 0
#define SUCCESS 1//配置SDA信号线为输入模式
void SDA_Input_Mode()
{GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = SDA_Pin;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;     GPIO_Init(I2C_PORT, &GPIO_InitStructure);
}//配置SDA信号线为输出模式
void SDA_Output_Mode()
{GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = SDA_Pin;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(I2C_PORT, &GPIO_InitStructure);
}//
void SDA_Output( uint16_t val )
{if ( val ) {GPIO_SetBits(I2C_PORT,SDA_Pin);} else {GPIO_ResetBits(I2C_PORT,SDA_Pin);}
}//
void SCL_Output( uint16_t val )
{if ( val ) {GPIO_SetBits(I2C_PORT,SCL_Pin);} else {GPIO_ResetBits(I2C_PORT,SCL_Pin);}
}//
uint8_t SDA_Input()
{return GPIO_ReadInputDataBit( I2C_PORT, SDA_Pin);
}//延时程序
void delay1(unsigned int n)
{unsigned int i;for ( i=0;i<n;++i);
}//I2C总线启动
void I2CStart(void)
{SDA_Output(1);delay1(500);SCL_Output(1);delay1(500);SDA_Output(0);delay1(500);SCL_Output(0);delay1(500);
}//I2C总线停止
void I2CStop(void)
{SCL_Output(0); delay1(500);SDA_Output(0); delay1(500);SCL_Output(1); delay1(500);SDA_Output(1); delay1(500);}//等待应答
unsigned char I2CWaitAck(void)
{unsigned short cErrTime = 5;SDA_Input_Mode(); delay1(500);SCL_Output(1);delay1(500);while(SDA_Input()){cErrTime--;delay1(500);if (0 == cErrTime){SDA_Output_Mode();I2CStop();return FAILURE;}}SDA_Output_Mode();SCL_Output(0);delay1(500); return SUCCESS;
}//发送应答位
void I2CSendAck(void)
{SDA_Output(0);delay1(500);delay1(500);SCL_Output(1); delay1(500);SCL_Output(0); delay1(500);}//
void I2CSendNotAck(void)
{SDA_Output(1);delay1(500);SCL_Output(1); delay1(500);SCL_Output(0); delay1(500);}//通过I2C总线发送一个字节数据
void I2CSendByte(unsigned char cSendByte)
{unsigned char  i = 8;while (i--){SCL_Output(0);delay1(500); SDA_Output(cSendByte & 0x80); delay1(500);cSendByte += cSendByte;delay1(500); SCL_Output(1);delay1(500); }SCL_Output(0);delay1(500);
}//从I2C总线接收一个字节数据
unsigned char I2CReceiveByte(void)
{unsigned char i = 8;unsigned char cR_Byte = 0;SDA_Input_Mode(); while (i--){cR_Byte += cR_Byte;SCL_Output(0);delay1(500); delay1(500); SCL_Output(1);delay1(500); cR_Byte |=  SDA_Input(); }SCL_Output(0);delay1(500); SDA_Output_Mode();return cR_Byte;
}//I2C总线初始化
void IICInit()
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin = SDA_Pin | SCL_Pin;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   // **GPIO_Init(I2C_PORT, &GPIO_InitStructure);}//For EEPROMvoid EEWrite(u8 Addr,u8 Dat)
{I2CStart();I2CSendByte(0xA0);//器件地址I2CWaitAck();I2CSendByte(Addr);//内存地址I2CWaitAck();I2CSendByte(Dat);I2CWaitAck();I2CStop();}u8 EERead(u8 Addr)
{u8 temp = 0;I2CStart();I2CSendByte(0xA0);//器件地址I2CWaitAck();I2CSendByte(Addr);//内存地址I2CWaitAck();I2CStart();I2CSendByte(0xA1);//发送读指令I2CWaitAck();temp = I2CReceiveByte();I2CSendNotAck();I2CStop();return temp;
}

【蓝桥杯嵌入式】【STM32】5_IICEEPROM之软件模拟IIC相关推荐

  1. stm32入门学什么板子_“蓝桥杯”嵌入式stm32开发入门(1)概述

    声明:笔者绝不是给"蓝桥杯"打广告,而是笔者曾经参加过蓝桥杯嵌入式设计与开发比赛,想借此机会总结并分享自己的学习中的点点滴滴. 此系列教程将以蓝桥杯官方指定的开发板和接口板来深入浅 ...

  2. 蓝桥杯嵌入式STM32 G431 HAL库开发速成指南(1)LED

    本教程适用于报名参加蓝桥杯嵌入式用新开发板(G431)且想要快速开发的小白,不具体讲解复杂的原理,只讲Cubemx初始化配置以及在KEIL里面使用相应的库函数功能对外设进行编程. CUBEMX配置流程 ...

  3. 蓝桥杯嵌入式——题目总结及文章汇总

    蓝桥杯嵌入式--题目总结及文章汇总 一.前言 笔者也是最近准备参加第十二届蓝桥杯嵌入式的选手,希望能够和大家一起学习.我也将我自己学习过程中,学习stm32遇到的一些问题,以及刷题的代码等都进行了整理 ...

  4. 【Pre蓝桥杯嵌入式】【STM32】学习索引

    写在前面     0.专栏链接     1.Unkown device     2.移植LCD程序+建立工程+LCD程序分析     3.如何直接使用LCD例程来作为赛场使用的工程 学习目录      ...

  5. 第11届 蓝桥杯-第1、2次模拟(软件类)真题-(2020年3月、4月)-官方讲解视频

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

  6. 蓝桥杯嵌入式第七届省赛——“模拟液位检测告警系统”旧板标准库

    一.赛题分析 模拟液位检测告警系统,涉及到KEY.ADC.EEPROM.LED.USART.LCD等模块.本届赛题相对简单,各个模块均可在往期文章中找到配置方法和编写说明.如: 蓝桥杯嵌入式--第六届 ...

  7. STM32G431-基于HAL库(第十四届蓝桥杯嵌入式模拟题2)

    文章目录 前言 一.CubeMX配置(第十四届模拟题2完整版) 二.代码相关定义.声明 1.函数声明 2.宏定义 3.变量定义 三.主要函数 1.按键扫描 2.各参数控制 3.LCD显示 4.输出信号 ...

  8. 【蓝桥杯嵌入式】【STM32】7_RTC之实时时间显示和硬件闹钟设置

    文章目录 1.RTC的三个可用时钟源 2.RTC框图 3.写代码前需要知道的一些标志位 4.配置流程 5.源代码 6.关于设置闹钟这件事  6.1.配置流程  6.2.实验源代码   下载工程文件: ...

  9. 国信长天蓝桥杯嵌入式类——stm32——使用keil4建立工程文件过程

    蓝桥杯嵌入式----使用keil4建立工程文件过程 目录 蓝桥杯嵌入式----使用keil4建立工程文件过程 一.完成文件建立 (一).先建立名为test工程文件夹,如图.并建立如下几个文件夹 (二) ...

最新文章

  1. 11月29号例会记录
  2. freemarker的测试结果框架_TestNG框架Listener介绍及测试结果的收集
  3. QML中类似QMap的用法
  4. Oracle impdp的ignore及 fromuser / touser 功能
  5. LeetCode 1586. 二叉搜索树迭代器 II(数组+栈)
  6. 是Dubbo不香了吗?阿里为啥又搞一套Spring Cloud Alibaba?
  7. 什么样的简历,面试官一看就知道多少水份!!!
  8. UE4 蓝图入门学习笔记
  9. word2013不能执行撤销操作,ctrl+Z键也无效的解决方法
  10. 自学单片机是否先学c语言,学习单片机需要先学好C语言再去学单片机吗
  11. 修改植物大战僵尸数据
  12. 伤害世界怎么自建服务器,伤害世界服务器架设方法_伤害世界Hurtworld怎么架设服务器_游戏堡...
  13. 华为P40系列搭载HMS后,华为钱包很不错
  14. 在xp系统电脑上建立宽带连接服务器吗,windows xp系统如何在电脑桌面上创建ADSL连接...
  15. python应用(3)svm模型预测股票涨跌
  16. sfc /scannow命令如何能用虚拟光驱完成修复?
  17. 速达3000 自动导入工具
  18. When allowCredentials is true, allowedOrigins cannot contain the specia 跨域 网关跨域
  19. 对抗攻击方法及论文总结
  20. 19. linux中权限详解,Linux权限位,读写执行权限真正含义,chmod详解

热门文章

  1. HikariDataSource 监控_Prometheus监控告警浅析
  2. 算法提高 解二元一次方程组(java)
  3. 树状数组 + 离散化 求逆序对数量
  4. sql oracle 自增长字段,Oracle添加自增长字段方法步骤
  5. linux设置板卡时间,嵌入式VS-RK3288板卡 Linux 修改BOOTDELAY介绍
  6. mysql连接命令行,从命令行连接到MySQL
  7. chattr 改变文件的扩展属性
  8. BZOJ 2716: [Violet 3]天使玩偶 | CDQ分治
  9. 使TextView里面的文字滚动起来
  10. php/js互传cookie中文乱码的问题