[技术问答] 新唐的BSP库函数中I2C的写入操作是否有判断成功与否

[复制链接]
1230|6
 楼主| yiyigirl2014 发表于 2024-1-9 13:57 | 显示全部楼层 |阅读模式
发现部分厂家的库函数是非阻塞的,比如PIC没有在函数结束后检测是否成功发送。不知道新唐的有没有做这个。
 楼主| yiyigirl2014 发表于 2024-1-9 14:09 | 显示全部楼层
M051的库函数特别简单,只要写入寄存器就没了
  1. uint8_t I2C_GetData(I2C_T *i2c)
  2. {
  3.     return (i2c->I2CDAT);
  4. }

  5. /**
  6. * [url=home.php?mod=space&uid=247401]@brief[/url]      Send a byte to I2C bus
  7. *
  8. * @param[in]  i2c          I2C port
  9. * @param[in]  u8Data       The data to send to I2C bus
  10. *
  11. * [url=home.php?mod=space&uid=266161]@return[/url]     None
  12. *
  13. * [url=home.php?mod=space&uid=1543424]@Details[/url]    This function is used to write a byte to specified I2C port
  14. */
  15. void I2C_SetData(I2C_T *i2c, uint8_t u8Data)
  16. {
  17.     i2c->I2CDAT = u8Data;
  18. }
duo点 发表于 2024-1-9 16:37 | 显示全部楼层
在许多BSP(Board Support Package)库中,I2C的写入操作通常会有一个返回值来判断操作是否成功。
 楼主| yiyigirl2014 发表于 2024-1-9 16:39 | 显示全部楼层
duo点 发表于 2024-1-9 16:37
在许多BSP(Board Support Package)库中,I2C的写入操作通常会有一个返回值来判断操作是否成功。 ...

那么就会有不成功的情况,我觉得这个方法不是很好,这样也会导致丢弃,可以在程序里判断是否发送成功,发送后就等待若干时间或者收到了成功的消息,即总线不忙了,再结束函数,这样比较好。
AloneKaven 发表于 2024-1-10 08:22 来自手机 | 显示全部楼层
不检测有什么影响吗?
 楼主| yiyigirl2014 发表于 2024-1-11 20:27 | 显示全部楼层
AloneKaven 发表于 2024-1-10 08:22
不检测有什么影响吗?

可能导致之前的数据还没发送完成,新数据又来覆盖了。
埃娃 发表于 2024-1-29 11:07 来自手机 | 显示全部楼层
有相关的标志位吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

230

主题

3676

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部