ST意法半导体
直播中

陈超

7年用户 919经验值
私信 关注
[问答]

ST-LINK V3桥API问题求解

想知道是否有人了解ST-LINK V3 Bridge API?我正在开发一个 GUI 应用程序的个人项目,该应用程序使用 API 来提供类似 Bus Pirate 类型的开发工具。如果您想查看糟糕的 C/C++ 代码,该项目位于GitHub 上。我已经让 GPIO 部分开始工作并且正在研究 I2C。我的具体问题是:
I2C 读/写方法采用一个参数来返回写入总线的实际字节数。这是方法签名之一:
  • Brg_StatusT WriteI2C(const uint8_t *pBuffer, uint16_t Addr, uint16_t SizeInBytes, uint16_t *pSizeWritten);
pSizeWritten 是有问题的参数。它似乎总是返回零,即使 BrgStatusT 返回值为 BRG_NO_ERR。我查看了示波器上的总线,可以看到写入/读取的字节,它们看起来是正确的。
那么,这是我对 API 的误用/误解,还是桥源中的错误、DLL 中的错误或宇宙干扰?
编辑:忘记任何类型的版本信息:
ST-LINK V3SET - 固件版本 V3J7M2B4S1
ST-LINK V3 桥 API 版本 - 1
ST-LINK USB Driver DLL version (from windows) - 5.1.3.0,我认为这对应于 STSW-LINK007 的 2.36.26
赢10机









回帖(1)

朱晓妤

2023-2-1 11:51:45
所以看来我找到了自己的答案。我多次阅读了资料来源,但错过了一些花絮:


  • /**
  • * @ingroup I2C
  • * @brief This routine allows to transmit bytes on the I2C interface, in the mode initialized by Brg::InitI2C().n
  • * In master mode I2C the size bytes are transmitted in one I2C transaction ((re)start- addr- data -stop)
  • * even if data may be split into several USB packets.
  • * @param[in]  Addr  I2C slave address used in master mode (default 7bit):
  • *             use #I2C_10B_ADDR(Addr) if it is a 10bit address.
  • * @param[in]  pBuffer Pointer on data buffer with data to be read.
  • * @param[in]  SizeInBytes Data size to be read in bytes (min 1, max data buffer size).
  • * @param[out] pSizeWritten If not NULL and in case of error, pSizeWritten returns the number of bytes
  • *             transmitted before the error.
  • *
  • * @retval #BRG_NO_STLINK If Brg::OpenStlink() not called before
  • * @retval #BRG_COM_INIT_NOT_DONE If I2C is not initialized
  • * @retval #BRG_I2C_ERR In case of I2C error
  • * @retval #BRG_COM_CMD_ORDER_ERR If low level I2C function call order is not consitent (Start, Cont, Stop)
  • * @retval #BRG_NO_ERR If no error
  • */

pSizeWritten 仅在出现错误时填充一个值。所以我想毫无错误地假设 SizeWritten == SizeInBytes 是安全的。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分