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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版