搜索
12
返回列表 发新帖
楼主: qazplm3218

[已解决] STM32F103驱动24C1024?

[复制链接]

该用户从未签到

38

主题

132

帖子

0

蝴蝶豆

金牌会员

最后登录
2021-9-28
 楼主| 发表于 2020-7-11 11:18:53 | 显示全部楼层
qazplm3218 发表于 2020-7-11 11:18
你好,帮我看下,这个代码哪里错误,要怎么修改?谢谢
void at24c1024_response(void)         //at24c1024应答 ...

这个是在24C02的基础上修改的
回复 支持 反对

使用道具 举报

该用户从未签到

27

主题

1912

帖子

42

蝴蝶豆

论坛元老

最后登录
2022-7-11
发表于 2020-7-11 12:50:16 | 显示全部楼层
除了地址长度不一致,其它读写方法都是相同的
回复 支持 反对

使用道具 举报

该用户从未签到

26

主题

1127

帖子

59

蝴蝶豆

论坛元老

最后登录
2021-7-29
发表于 2020-7-11 14:00:37 | 显示全部楼层
楼上正解。
可参考我的代码,分别是读写一个字节,和读写一页:
  1. /*************************************************************
  2. * 函数名:  at24cxx_Wite_Data(uint8_t addr,uint8_t data)
  3. * 输入参数:addr = 要写入的地址
  4. *           data = 要写入的数据
  5. * 输出参数:无
  6. *************************************************************/
  7. void at24cxx_Write_Data(uint16_t addr,uint8_t data) // 将数据data写入指定地址Addr
  8. {

  9.     SI2C_Start();                //开始I2C通讯
  10.     SI2C_Send(0xA0);             //发送EEPROM器件写入地址
  11.     SI2CIsAck();                 //等待应答
  12.     SI2C_Send(addr>>8);          //发送高8位地址
  13.     SI2CIsAck();                 //等待应答
  14.     SI2C_Send(addr%256);         //发送低8位地址
  15.     SI2CIsAck();                 //等待应答
  16.     SI2C_Send(data);             //发送数据
  17.     SI2CIsAck();                 //等待应答
  18.     SI2C_Stop();                 //结束I2C通讯
  19.     delay_us(4);
  20. }

  21. /*************************************************************
  22. * 函数名:  at24cxx_Read_Data(uint8_t addr)
  23. * 输入参数:addr = 要读取的地址
  24. * 输出参数:data = 读出的数据
  25. *************************************************************/
  26. uint8_t at24cxx_Read_Data(uint16_t addr)            // 读指定地址Addr里的数据Data
  27. {
  28.     uint8_t data=0x00;
  29.    
  30.     SI2C_Start();                //开始I2C通讯
  31.     SI2C_Send(0xA0);             //发送EEPROM器件地址
  32.     SI2CIsAck();                 //等待应答
  33.     SI2C_Send(addr>>8);          //发送高8位地址
  34.     SI2CIsAck();                 //等待应答
  35.     SI2C_Send(addr%256);         //发送低8位地址
  36.     SI2CIsAck();                 //等待应答

  37.     SI2C_Start();
  38.     SI2C_Send(0xA1);             //发送EEPROM器件读取地址
  39.     SI2CIsAck();
  40.    
  41.     data = SI2C_Receive();       //读一字节数据
  42.     SI2CDoAck();
  43.     SI2C_Stop();
  44.     delay_us(4);
  45.     return data;
  46. }

  47. /*************************************************************
  48. * 函数名:  at24cxx_Page_Write(uint8_t addr,uint8_t *buff,uint8_t size)
  49. * 输入参数:addr = 要写入的起始地址
  50. *           *buff= 要写入的数组指针
  51. *           size = 数组的长度
  52. * 输出参数:无
  53. *************************************************************/
  54. void at24cxx_Page_Write(uint16_t addr,uint8_t *buff,uint8_t size) // 将数据buff数组写入指定起的始地址Addr
  55. {
  56.     uint8_t i;
  57.        
  58.     SI2C_Start();                //开始I2C通讯
  59.     SI2C_Send(0xA0);             //发送EEPROM器件写入地址
  60.     SI2CIsAck();                 //等待应答
  61.     SI2C_Send(addr>>8);          //发送高8位地址
  62.     SI2CIsAck();                 //等待应答
  63.     SI2C_Send(addr%256);         //发送低8位地址
  64.     SI2CIsAck();                 //等待应答       
  65.         for(i=0; i<size; i++){
  66.         SI2C_Send(buff[i]);      //发送数据
  67.         SI2CIsAck();             //等待应答
  68.     }
  69.         SI2C_Stop();                 //结束I2C通讯
  70.     delay_us(4);
  71. }

  72. /*************************************************************
  73. * 函数名:  at24cxx_Page_Read(uint8_t addr)
  74. * 输入参数:addr = 要读取的地址
  75. * 输出参数:data = 读出的数据
  76. *************************************************************/
  77. uint8_t at24cxx_Page_Rea(uint16_t addr,uint8_t size)// 读指定起始地址Addr里的数据到buff
  78. {
  79.     uint8_t i,buff[size];
  80.    
  81.     SI2C_Start();                //开始I2C通讯
  82.     SI2C_Send(0xA0);             //发送EEPROM器件地址
  83.     SI2CIsAck();                 //等待应答
  84.     SI2C_Send(addr>>8);          //发送高8位地址
  85.     SI2CIsAck();                 //等待应答
  86.     SI2C_Send(addr%256);         //发送低8位地址
  87.     SI2CIsAck();                 //等待应答

  88.     SI2C_Start();
  89.     SI2C_Send(0xA1);             //发送EEPROM器件读取地址
  90.     SI2CIsAck();
  91.     for(i=0; i<size; i++){
  92.         buff[i] = SI2C_Receive();//读一字节数据
  93.         SI2CDoAck();
  94.     }
  95.         SI2C_Stop();
  96.     delay_us(4);
  97.     return *buff;
  98. }
复制代码

评分

参与人数 1蝴蝶豆 +4 收起 理由
STMCU + 4

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

38

主题

132

帖子

0

蝴蝶豆

金牌会员

最后登录
2021-9-28
 楼主| 发表于 2020-7-11 15:15:54 | 显示全部楼层
hujjj 发表于 2020-7-11 14:00
楼上正解。
可参考我的代码,分别是读写一个字节,和读写一页:

非常感谢您,我仔细看看
回复 支持 反对

使用道具 举报

该用户从未签到

38

主题

132

帖子

0

蝴蝶豆

金牌会员

最后登录
2021-9-28
 楼主| 发表于 2020-7-11 16:24:03 | 显示全部楼层
hujjj 发表于 2020-7-11 14:00
楼上正解。
可参考我的代码,分别是读写一个字节,和读写一页:

你好,能把完整的24C1024驱动发我参考下吗?私发也可以,6135135@qq.com
回复 支持 反对

使用道具 举报

该用户从未签到

26

主题

1127

帖子

59

蝴蝶豆

论坛元老

最后登录
2021-7-29
发表于 2020-7-11 17:06:43 | 显示全部楼层
qazplm3218 发表于 2020-7-11 16:24
你好,能把完整的24C1024驱动发我参考下吗?私发也可以,

这个就是完整的驱动,我在AT24C32上使用的,不知道在AT24C1024上能否直接使用。这个驱动是直接调用I2C的基本功能,您可能需要对相应的函数名称稍作修改,或者参考这个代码,对您的驱动程序中写操作地址添加高低字节写入功能就行。
回复 支持 反对

使用道具 举报

该用户从未签到

38

主题

132

帖子

0

蝴蝶豆

金牌会员

最后登录
2021-9-28
 楼主| 发表于 2020-7-11 19:42:56 | 显示全部楼层
hujjj 发表于 2020-7-11 17:06
这个就是完整的驱动,我在AT24C32上使用的,不知道在AT24C1024上能否直接使用。这个驱动是直接调用I2C的 ...

好的,感谢
回复 支持 反对

使用道具 举报

该用户从未签到

54

主题

499

帖子

152

蝴蝶豆

论坛元老

最后登录
2021-3-29
发表于 2020-7-12 15:57:18 | 显示全部楼层
https://www.stmcu.org.cn/module/forum/thread-621388-1-1.html
我之前发过的帖子,标题是“[分享] 重新封装函数读写AT24CM02

对于24C1024而言,已经地址寻址到17位,16位地址是不够用的,参考我这个帖子的处理,当然我劝你看HAL库的封装的函数

评分

参与人数 1蝴蝶豆 +4 收起 理由
STMCU + 4

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

38

主题

132

帖子

0

蝴蝶豆

金牌会员

最后登录
2021-9-28
 楼主| 发表于 2020-7-13 23:08:41 | 显示全部楼层
奏奏奏 发表于 2020-7-12 15:57
https://www.stmcu.org.cn/module/forum/thread-621388-1-1.html
我之前发过的帖子,标题是“[分享] 重新封 ...

你好,16位地址通过以下代码处理,已经测试通过,
SI2C_Send(addr>>8);          //发送高8位地址
SI2CIsAck();                 //等待应答
SI2C_Send(addr%256);         //发送低8位地址

那17位地址改如何处理?
谢谢!
回复 支持 反对

使用道具 举报

该用户从未签到

38

主题

132

帖子

0

蝴蝶豆

金牌会员

最后登录
2021-9-28
 楼主| 发表于 2020-7-14 20:05:39 | 显示全部楼层
谢谢各位,已解决!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-27 12:32 , Processed in 0.179833 second(s), 38 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表