当前位置: 首页 > news >正文

STM32 HAL库 硬件IIC 从机一些问题整理(转载)

一、从机双地址,在回调函数中获取主机访问的地址:

void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *I2cHandle)
{uint16_t slaveaddrcode     = I2C_GET_ADDR_MATCH(I2cHandle);printf("R:%d\r\n",slaveaddrcode);
}

  

二、如果用地址回调函数HAL_I2C_AddrCallback(),这个回调函数触发后,会关闭中断,需要再次开启中断,才能继续监听。需要特别注意开启监听中断的位置,有人在这个回调函数里直接开启,我测试了一下,不行,开启失败;还有人,把开启监听放在主循环里,一直不断轮询去开启,大力出奇迹,这样确实可以用,但是经过测试发现有时候会丢失,不能触发回调函数。直到看到这篇文章,在HAL_I2C_ListenCpltCallback()函数中开启,才是最优解。

void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode)
{if(TransferDirection == I2C_DIRECTION_TRANSMIT){// if(HAL_I2C_Slave_Seq_Receive_IT(&hi2c1, i2c.RxData, sizeof(i2c.RxData), I2C_FIRST_FRAME) != HAL_OK)// {// }	  }else if(TransferDirection == I2C_DIRECTION_RECEIVE){// if(HAL_I2C_Slave_Seq_Transmit_IT(&hi2c1, i2c.TxData, sizeof(i2c.TxData), I2C_LAST_FRAME)!= HAL_OK)// {// }  }//HAL_I2C_EnableListen_IT(hi2c);//在这里启动监听会失败,没有用}

  

// 侦听完成回调函数(完成一次完整的i2c通信以后会进入该函数)
void HAL_I2C_ListenCpltCallback(I2C_HandleTypeDef *hi2c)
{// 完成一次通信,清除状态
//   first_byte_state = 1;
//   offset = 0;HAL_I2C_EnableListen_IT(hi2c); // slave is ready again
}

  

http://www.gsyq.cn/news/70582.html

相关文章:

  • 本地人推荐的火锅,天台火锅/麻辣火锅/老火锅/市井火锅/川渝火锅约会地点推荐榜单
  • 全程复盘:一次枚举值永远 Cloud2的坑——从玄学随机到只读属性
  • AutoCloseable接口 try-with-resources 、 try-catch-finally
  • rizhi
  • 代码随想录Day27_贪心1
  • 【本地AI部署】comfyUI + zImageTurbo
  • 主流玩家的高端主板!七彩虹战斧B850M超级黑刃主板评测:供电散热配置豪华 性价比极佳
  • 基于 Node.js 与 Tesseract.js 的验证码识别系统设计与实现
  • 刷题日记—前缀和
  • AI元人文:理论与技术的协同进化框架
  • 12月1日总结 - 作业----
  • lucas定理求组合数+错排模板
  • 备案合规定制化服务方案-自研与微调大模型企业如何备案
  • 算法和大模型备案登记的流程和指南-有哪些备案类型及要求
  • DBUtil
  • 第二篇Scrum冲刺
  • 团队作业4--项目冲刺
  • MyBatis完整教程IDEA版(2)--ResultMap/注解/一对多/多对一/lombok/log4j - 教程
  • Go 语言:类型别名 vs 新类型详解 - 若
  • 第一篇Scrum冲刺
  • 第六篇SCrum冲刺
  • Hudi 文件格式分析
  • 深入解析:微信小程序通过关联公众号发送待办消息:实战指南
  • 生命是一树花开
  • JavaSE--面向对象
  • 歌声转换SVC主流方法原理剖析4 — ReFlow-VAE-SVC
  • 敏捷冲刺日志 - Day 5
  • 深入解析:Spring Kafka消费者被踢出组?CommitFailedException异常全面解析与解决方案
  • 计算机视觉黄金时代的回顾与展望
  • homebrew运行机制