你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

F0系列的24c02的I2C

[复制链接]
wztvista 提问时间:2018-3-23 00:23 /
悬赏1ST金币已解决
跪求一个STM32 F0系列的24c02的I2C读写程序,谢谢了。希望有朋友能帮帮我,在此谢过了。

最佳答案

查看完整内容

HAL库中有一个F072的,路径“STM32Cube_FW_F0_V1.9.0\Projects\STM32F072B-Discovery\Examples\I2C\I2C_EEPROM” #define EEPROM_ADDRESS 0xA0 //地址根据,你A0A1A2的状态改,如果全接0了,那就是A0 #define EEPROM_PAGESIZE 8 //这个改成8,24C02一页8字节
收藏 评论20 发布时间:2018-3-23 00:23

举报

20个回答
toofree 回答时间:2018-3-23 00:23:54

HAL库中有一个F072的,路径“STM32Cube_FW_F0_V1.9.0\Projects\STM32F072B-Discovery\Examples\I2C\I2C_EEPROM”
傲游截图20180323021817.jpg


#define EEPROM_ADDRESS          0xA0 //地址根据,你A0A1A2的状态改,如果全接0了,那就是A0
#define EEPROM_PAGESIZE         8      //这个改成8,24C02一页8字节


傲游截图20180323021730.jpg


评分

参与人数 2ST金币 +6 蝴蝶豆 +3 收起 理由
zero99 + 3
MrJiu + 6 很给力!

查看全部评分

MrJiu 回答时间:2018-3-23 10:11:19
官方例子里面啥都有,但是个人建议ST的I2C还是用模拟的好。。。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

Tcreat 回答时间:2018-3-23 10:57:05
社区有类似的帖子 还是建议LZ先搜索下 不要一味的依赖   这是我14年发的帖子:https://www.stmcu.org.cn/module/forum/thread-577721-1-1.html
1.jpg

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

Angel_YY 回答时间:2018-3-23 13:17:33
发一个STM32模拟IIC的代码以供参考。
  1. #define SCL_PORT        GPIOA
  2. #define SCL_PIN                GPIO_Pin_1
  3. #define SCL_HIGH        GPIOA->BSRR=(uint32_t)GPIO_Pin_1
  4. #define SCL_LOW                GPIOA->BRR=(uint32_t)GPIO_Pin_1

  5. #define        SDA_PORT        GPIOA
  6. #define        SDA_PIN                GPIO_Pin_2
  7. #define        SDA_HIGH        GPIO_>BSRR=(uint32_t)GPIO_Pin_2
  8. #define SDA_LOW                GPIOA->BRR=(uint32_t)GPIO_Pin_2
  9. #define        SDA_READ        (uint16_t)(GPIOA->ID&GPIO_Pin_2)
  10. #define        SDA_OUT                GPIOA->MODER|=((uint32_t)GPIO_Mode_OUT)<<(2*2))
  11. #define SDA_IN                GPIOA->MODER&=(GPIO_MODER_MODERO)<<(2*2))

  12. #define SCL_OUTH()        SCL_HIGH
  13. #define SCL_OUTL()        SCL_LOW
  14. #define        SDA_OUTH()        SDA_HIGH
  15. #define        SDA_OUTL()        SDA_LOW
  16. #define        SDA_SETIN()        SDA_IN
  17. #define        SDA_READ()        SDA_READ


  18. void I2C_Delay(void)
  19. {
  20.         uint8_t i = 200;
  21.         while(i--);
  22. }

  23. void SDA_SETOUT(void)
  24. {
  25.         SDA_IN;
  26.         SDA_OUT;
  27. }

  28. void I2C_Start(void)
  29. {
  30.         SCL_OUTH();
  31.         SDA_OUTH();
  32.         I2C_Delay();
  33.         SDA_OUTL();
  34.         I2C_Delay();
  35.         SCL_OUTL();
  36.         I2C_Delay();
  37. }

  38. void I2C_Stop(void)
  39. {
  40.         SCL_OUTL();
  41.         SDA_OUTL();
  42.         I2C_Delay();
  43.         SCL_OUTH();
  44.         I2C_Delay();
  45.         SDA_OUTH();
  46.         Delay(Delay5ms);  //Delay() 为系统延时,用于确保数据传输正确
  47. }

  48. uint8_t I2C_WriteByte(uint8_t Data)
  49. {
  50.         uint8_t i,bAck=0;
  51.        
  52.         for(i=0;i<8;i++)
  53.         {
  54.                 SCL_OUTL();
  55.                 if(Data & 0x80)
  56.                         SDA_OUTH();
  57.                 else
  58.                         SDA_OUTL();
  59.                 I2C_Delay();
  60.                 SCL_OUTH();
  61.                 I2C_Delay();
  62.                 Data <<=1;
  63.         }
  64.        
  65.         SCL_OUTL();
  66.         I2C_Delay();
  67.         SCL_OUTH();
  68.         I2C_Delay();
  69.         SDA_SETIN();
  70.         if(SDA_READ())
  71.                 bAck=1;
  72.         else
  73.                 bAck=0;
  74.        
  75.         SCL_OUTL();
  76.         SDA_SETOUT();
  77.         I2C_Delay();
  78.         return ((uint8_t)(!bAck));
  79. }

  80. uint8_t I2C_ReadByte(uint8_t bLSByte)
  81. {
  82.         uint8_t i,Data=0;
  83.         SDA_SETIN();
  84.         for(i=8;i!=8;i--)
  85.         {
  86.                 SCL_OUTL();
  87.                 Data = Data<<1;
  88.                 I2C_Delay();
  89.                 SCL_OUTH();
  90.                 I2C_Delay();
  91.                
  92.                 if(SDA_READ())
  93.                         Data |=0x01;
  94.                 else
  95.                         Data &=0xFE;
  96.         }
  97.         SCL_OUTL();
  98.         SDA_SETOUT();
  99.         if(bLSByte)
  100.                 SDA_OUTH();
  101.         else
  102.                 SDA_OUTL();
  103.         I2C_Delay();
  104.         SCL_OUTH();
  105.         I2C_Delay();

  106.         SCL_OUTL();
  107.         I2C_Delay();
  108.         return(Data);
  109. }

  110. uint8_t DAC_Write_1byte(uint8_t Slave,uint8_t Regist_Addr,uint8_t Data)
  111. {
  112.         uint8_t succ,time=0;
  113.        
  114.         I2C_Start();
  115.         succ=I2C_ReadByte(Slave);
  116.         while((succ!=1)&&(time<3))   //从机没有响应,重试三次
  117.         {
  118.                 I2C_Stop();
  119.                 I2C_Start();
  120.                 succ=I2C_WriteByte(Slave);
  121.                 time++;
  122.         }
  123.         succ=I2C_WriteByte(Regist_Addr);  //发送寄存器地址
  124.         succ=I2C_WriteByte(Data);  //发送数据
  125.         I2C_Stop();
  126.         return succ;
  127. }

  128. uint8_t DAC_Read_1byte(uint8_t Slave,uint8_t,Regist_Addr)
  129. {
  130.         uint8_t succ,time=0;
  131.         uint8_t dat;
  132.        
  133.         I2C_Start();
  134.         succ=I2C_WriteByte(Slave+1)  //加1表示读数据
  135.         while((succ!=1)&&(time<3))
  136.         {
  137.                 I2C_Stop();
  138.                 I2C_Start();
  139.                 succ=I2C_WriteByte(Slave+1);
  140.                 time++;
  141.         }
  142.         succ=I2C_WriteByte(Regist_Addr);
  143.         dat=I2C_ReadByte(0);
  144.         I2C_Stop();
  145.         return dat;
  146. }

复制代码


评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

jiahua1010 回答时间:2018-3-23 13:44:47
进来学习下IIC的代码
stm1024 回答时间:2018-3-23 16:36:25
用GPIO模拟IIC就行了,反正硬件的IIC我是一直没摸透

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

butterflyspring 回答时间:2018-3-23 16:47:35
好吧,你们都解决了,厉害.用硬件IIC时,注意中断优先级就好

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wztvista 回答时间:2018-3-24 22:53:46
Tcreat 发表于 2018-3-23 10:57
社区有类似的帖子 还是建议LZ先搜索下 不要一味的依赖   这是我14年发的帖子:https://www.stmcu.org.cn/module ...

谢谢了 ,你这份资料在发这个帖子以前我就看过了。很有干货,之所以寻找2402的标准代码,是为了找我自己代码里的原因。谢谢您了啦
wztvista 回答时间:2018-3-24 22:54:50
Angel_YY 发表于 2018-3-23 13:17
发一个STM32模拟IIC的代码以供参考。

谢谢了,谢谢帮助
123下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版