2301_76839845 2023-10-18 11:41 采纳率: 0%
浏览 5

AT24C02不运行

使用stmcubemx配置IIC,无法运行AT24C02无法写入和读取


    HAL_UART_Transmit_IT(&huart1,"Init Ok!\r\n",sizeof("Init Ok!\r\n"));
    HAL_Delay(100);
    //阻塞方式写入读取
    if(HAL_I2C_Mem_Write(&hi2c1,AT24C02_Write,0,I2C_MEMADD_SIZE_8BIT,str1,sizeof(str1),1000)==HAL_OK)
        HAL_UART_Transmit_IT(&huart1,"STR1_Write_OK\r\n",sizeof("STR1_Write_OK\r\n"));
    HAL_I2C_Mem_Write(&hi2c1,AT24C02_Write,0,I2C_MEMADD_SIZE_8BIT,str1,sizeof(str1),1000);
    HAL_Delay(1000);
    HAL_I2C_Mem_Read(&hi2c1,AT24C02_Read,0,I2C_MEMADD_SIZE_8BIT,ReadBuffer,sizeof(str1),1000);
    HAL_Delay(1000);
    HAL_UART_Transmit_IT(&huart1,ReadBuffer,sizeof(str1));
    HAL_Delay(1000);
    //中断方式写入读取
    if(HAL_I2C_Mem_Write_IT(&hi2c1,AT24C02_Write,0,I2C_MEMADD_SIZE_8BIT,str2,sizeof(str2))==HAL_OK)
        HAL_UART_Transmit_IT(&huart1,"STR2_Write_OK\r\n",sizeof("STR2_Write_OK\r\n"));
    HAL_Delay(1000);
    HAL_I2C_Mem_Read_IT(&hi2c1,AT24C02_Read,0,I2C_MEMADD_SIZE_8BIT,ReadBuffer,sizeof(str2));
    HAL_Delay(1000);
    HAL_UART_Transmit_IT(&huart1,ReadBuffer,sizeof(str2));
    HAL_Delay(1000);
    //DMA中断方式写入读取
    if(HAL_I2C_Mem_Write_DMA(&hi2c1,AT24C02_Write,0,I2C_MEMADD_SIZE_8BIT,str3,sizeof(str3))==HAL_OK)
        HAL_UART_Transmit_IT(&huart1,"STR3_Write_OK\r\n",sizeof("STR3_Write_OK\r\n"));
    HAL_Delay(1000);
    HAL_I2C_Mem_Read_DMA(&hi2c1,AT24C02_Read,0,I2C_MEMADD_SIZE_8BIT,ReadBuffer,sizeof(str3));
    HAL_Delay(1000);
    HAL_UART_Transmit_IT(&huart1,ReadBuffer,sizeof(str3));
    HAL_Delay(1000);

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-18 14:25
    关注

    【以下回答由 GPT 生成】

    问题描述不够清晰,但从代码片段可以看出问题可能存在于AT24C02芯片的写入和读取操作上。以下是我根据假设给出的可能解决方案:

    1. 检查硬件连接:首先,请确保AT24C02芯片正确连接到I2C总线以及I2C总线已经正确连接到微控制器。您可以检查硬件连接和线路是否正确。

    2. 检查I2C配置:使用stmicroelectronics提供的stmcubemx配置I2C时,请确保已正确设置I2C的时钟频率、通信模式、地址长度等参数。并且在代码中检查是否正确初始化I2C外设(例如,I2C GPIO引脚的初始化等)。

    3. 检查I2C访问权限:在一些平台上,例如ARM Cortex-M系列微控制器,I2C资源被特权和非特权级别分割。请确保代码正常运行在非特权级别下,以确保对I2C资源的正确访问。

    4. 检查AT24C02芯片数据存储器:可能存在芯片或芯片内存问题。请确保芯片没有被写保护,并且正确选择了要写入/读取的存储单元地址。

    5. 检查I2C操作的返回值:在代码片段中,对于I2C写入/读取操作,使用了HAL库提供的函数。请确保通过查看返回值来确认操作是否成功。您可以在每个I2C操作后,检查函数返回值并发送相应的调试信息来诊断问题。

    6. 检查I2C时序:在某些情况下,可能需要调整I2C总线的时钟频率和时序,以适应AT24C02芯片的要求。请参考AT24C02的数据手册,检查是否需要配置I2C总线的时钟频率和时序参数。

    尽管以上解决方案是根据假设给出的,但在实践中可能出现其他问题。如果问题仍然存在,请您提供更多详细信息,例如硬件平台、处理器型号、使用的IDE等,以便我们更准确地帮助您解决问题。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月18日

悬赏问题

  • ¥15 三分类机器学习模型可视化分析
  • ¥15 本地测试网站127.0.0.1 已拒绝连接,如何解决?(标签-ubuntu)
  • ¥50 Qt在release捕获异常并跟踪堆栈(有Demo,跑一下环境再回答)
  • ¥30 python,LLM 文本提炼
  • ¥15 关于将inet引入的相关问题
  • ¥15 关于一个倒计时的操作和显示设计
  • ¥15 提问STK的问题,哪位航天领域的同学会啊
  • ¥15 苹果系统的mac m1芯片的笔记本使用ce修改器使用不了
  • ¥15 单相逆变的电压电流双闭环中进行低通滤波PID算法改进
  • ¥15 关于#java#的问题,请各位专家解答!