立即注册 找回密码

微雪课堂

搜索
微雪课堂 首页 查看评论
引用 游客 2019-8-15 11:24
按照评论改了,读写还是不成功,读出来是00
引用 游客 2019-5-27 20:28
请问一下,这个串口print的工程是哪一个呀,教程里面没有找到。
引用 游客 2019-5-16 10:21
爲什麽我的結果都是0x00?寫都不成功
引用 游客 2018-8-28 09:50
: for (j=0; j<32; j++)         {                 if(HAL_I2C_Mem_Write(&hi2c2, ADDR_24LCxx_Write, 8*j, I2C_MEMADD_SIZE_8BIT,WriteBuffer+8*j,8, 1000) == H ...
这位兄弟的代码是对的
引用 游客 2018-8-6 16:14
for (j=0; j<32; j++)
        {
                if(HAL_I2C_Mem_Write(&hi2c2, ADDR_24LCxx_Write, 8*j, I2C_MEMADD_SIZE_8BIT,WriteBuffer+8*j,8, 1000) == HAL_OK)
                {
                                printf("\r\n EEPROM 24C02 Write Test OK \r\n");
                        HAL_Delay(20);
                }
                else
                {
                         HAL_Delay(20);
                                printf("\r\n EEPROM 24C02 Write Test False \r\n");
                }
         ...
引用 游客 2018-7-26 13:57
麻烦发一个程序呗 我按照教程调不通 返回数据不对 我的邮箱462421430@qq.com 求助各位大神~
引用 游客 2018-7-12 15:40
: AT24C256读出来也是FF,怎么改啊
找到了,把I2C_MEMADD_SIZE_8BIT改成I2C_MEMADD_SIZE_16BIT
引用 游客 2018-7-10 18:44
AT24C256读出来也是FF,怎么改啊
引用 游客 2018-6-30 23:12
总结一下之前的评论
1. 需要修改24c02的写操作,按照前面有个人说的,分成32次写入,延时,写入成功,代码修改如下。
for (i=0; i<32; i++)
        {
                if(HAL_I2C_Mem_Write(&hi2c4, ADDR_24LCxx_Write, 0, I2C_MEMADD_SIZE_8BIT,WriteBuffer,8, 0xff) == HAL_OK)
                {
                                printf("\r\n EEPROM 24C02 Write Test OK \r\n");
                        HAL_Delay(5);
                }
                else
                {
                         HAL_Delay(5);
                                printf("\r\n EEPROM 24C02 Write Test False \r\n");
                }
        }
2. IIC的回调函数里面不需要修改也可以的 ...
引用 游客 2018-6-22 09:46
: 为什么我读出来都是0XFF呢AT24C256
终于搞好了跟着教程会死人的
引用 游客 2018-6-15 14:01
为什么我读出来都是0XFF呢AT24C256
引用 游客 2018-4-22 11:07
我纠正一下上一个评论,硬件I2C测试成功,注意@开始现在 在评论中的调整
1. IIC的回调函数里面需要将时钟初始化放在引脚初始化之前
  /* USER CODE BEGIN I2C1_MspInit 0 */
    __HAL_RCC_I2C1_CLK_ENABLE(); //默认生成的放在了引脚初始化后面!
  /* USER CODE END I2C1_MspInit 0 */

2. 读写函数最后一个超时调整为1000以上
3. 每次写之后要delay 5ms
4. AT24C02页写入只支持8个byte,所以需要分32次写入。这不是HAL库的bug,而是AT24C02的限制,其他的EEPROM可以支持更多byte的写入。 ...
引用 游客 2018-4-11 12:54
STM的I2C一直不好用,最好出一个软件I2C的教程
引用 游客 2018-3-22 10:14
读写EEPROM 写的时候前八个数据一直有问题?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ...
引用 游客 2017-12-21 21:14
讲三点:
1.一楼解决了M3的bug;
2.如果但是请楼上没有调通的同志们,把读写函数最后一个超时调整为1000以上。否则,不能成功!
3.另外,楼上有个说一次只能写8个的也要注意一下。
引用 开始现在 2017-12-11 11:14
首先说明下开发条件:

1、开发板:秉火霸道,STM32F103ZET

2、软件:Cubemx V4.23(F1 V1.60库)

3、硬件:AT24C02 256KByte

问题描述:Cubemx生成IIC代码会出现死机问题,或者压根运行不了!

问题原因:

1、ST为了规避飞利浦IIC专利问题,将STM32的硬件IIC设计的比较复杂,而且稳定性不怎么好,所以一般教程都不推荐使用。

2、Cubemx生成的代码有Bug!

解决办法:

1、设置

捕获.JPG

2、IIC的回调函数里面需要将时钟初始化放在引脚初始化之前!

void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)

{



  GPIO_InitTypeDef GPIO_InitStruct;

  if(hi2c->Instance==I2C1)

  {

  /* USER CODE BEGIN I2C1_MspInit 0 */

    __HAL_RCC_I2C1_CLK_ENABLE(); //默认生成的放在了引脚初始化后面!

  /* USER CODE END I2C1_MspInit 0 */

  

    /**I2C1 GPIO Configuration   

    PB6     ------> I2C1_SCL

    PB7     ------> I2C1_SDA

    */

    GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;

    GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;

    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);



    ...
引用 游客 2017-10-31 21:05
24C02意味着2千比特= 2048/8 = 256字节==>可寻址8位索引(我们说子地址)

==>使用1字节寻址作为子地址就足够了。
引用 游客 2017-10-24 16:11
MyMX1213您好!首先对你发布的教程表示感谢,但此篇文章您发布的有点不负责任,首先ATC24C02只支持每页8KB的读写,可能这也是HAL驱动忽略的地方,如按你的代码最多只能写入前面8位的数据,不知道你串口打印输出怎么会是对的,我整整折腾了两天,查了好多资料最确定是写入部分出问题,按你生成的256数据必须分成32次去写,且每次写必须中断5ms以上,读没有问题。EPROM同是ATC24C02,在此跟贴希望警示后来的读者,HAL库版本是V1.7.1,其它版本没试过,有可能作者的版本与我的不一样。 ...
引用 游客 2017-10-23 14:47
这个跟本写不进去,是STM32CubeMX版本不对呢?还是其它有设置问题,用原生库读写没问题
引用 游客 2017-8-19 23:25
LZ  我按照您这个来配置,读写EEPROM 写的时候前八个数据一直有问题,HAL库的硬件IIC是不是还是存在BUG?
引用 游客 2017-8-2 18:01
我想请问下,我按照你的这个程序来写的,可是读出的数据是0xF0,F1....0XFF,请问这个是什么原因呢?
引用 游客 2017-2-25 10:30
: 楼主 我想咨询一个关于I2c的问题,HAL_I2C_Mem_Read()函数中,参数pdata是8位的,但是我有一个模块的数据存储是16位的,请问这个时候我该怎么办呢 ...
就读2个8bint的数据再转为16位数据
引用 游客 2017-2-23 21:50
楼主 我想咨询一个关于I2c的问题,HAL_I2C_Mem_Read()函数中,参数pdata是8位的,但是我有一个模块的数据存储是16位的,请问这个时候我该怎么办呢
引用 Ezio_神仙醋 2017-1-19 15:05
good

微雪官网|产品资料|手机版|小黑屋|微雪课堂. ( 粤ICP备05067009号 )

GMT+8, 2019-12-7 04:48 , Processed in 0.010313 second(s), 7 queries .

Powered by Discuz! X3.2 © 2001-2013 Comsenz Inc & Style Design

返回顶部