HAL_I2C_Mem_Write 函数的返回值是一个 HAL_StatusTypeDef 枚举值,用于表示写入操作的结果。常见的返回值包括 HAL_OK(成功)、HAL_ERROR(错误)、HAL_BUSY(总线繁忙)和 HAL_TIMEOUT(超时)。调用者应根据这些返回值来判断写入操作是否成功,并采取相应的处理措施。
/* 检查huart->RxState是否处于接收空闲 状态。 当这一状态标志非READY时,会跳过DMA接收参数设置,直接返回HAL_BUSY。 其它的UART接收函数也会检查这个状态,所以,哪个先调用就执行哪个。*/ if(huart->RxState == HAL_UART_STATE_READY) { if((pData == NULL) || (Size == 0U)) { return HAL_ERROR;...
我们看一下 i2c_transfer 接口的参数说明: [cpp int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs,int num); 其中 adap 为此次主机与从机通信的适配器;msgs 为通信的数据包,这里可以是单个或多个数据包;num用于指定数据包的个数,如果大于1则表明将进行不止一次的通信。通信一次就需要寻址...
不过自动生成的代码,调用HAL_I2C_XXX的API工作不正常,返回错误代码为I2C_BUSY 使用STM32的I2C接口使用时需要注意很多细节,不过HAL库中官方已经为用户根据这些细节做了处理,可以直接使用。不过这个I2C代码并不稳定,有些板子可以用,另一些则出错. 出错现象为调用HAL_I2C的API时,返回I2C_BUSY 查看寄存器 BUSY位被置位 ...
STM32HAL库I2C⼯作出错返回I2C_BUSY 使⽤stm32cubemx⽣成硬件I2C的代码 不过⾃动⽣成的代码,调⽤HAL_I2C_XXX的API⼯作不正常,返回错误代码为I2C_BUSY 使⽤STM32的I2C接⼝使⽤时需要注意很多细节,不过HAL库中官⽅已经为⽤户根据这些细节做了处理,可以直接使⽤。不过这个I2C代码并不稳定,...
1.HAL_I2C_Master_Transmit 或者 HAL_I2C_Master_Receive 一直返回 BUSY 或 TIMEOUT 参考:STM32 I2C 死锁问题_if (i2c_waitonflaguntiltimeout(hi2c, i2c_flag_busy-CSDN博客 他这一篇已经比较完备的介绍了问题,提出了几个解决方法: 1.当I2C报错时,对其写入一个stop信号,将管脚配置为普通输出管脚后,实现电平...
HAL_I2C_Mem_Write()函数位于stm32fxx_hal_i2c.c文件的2432行,源代码对该函数的解释如下图 HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint
HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout) 参数说明如下: * hi2c:I2C句柄 * DevAddress:I2C设备地址 * MemAddress:要写入的内存地址 * MemAddSize:内存地址...
卡在低电平并且HAL_BUSY在连续的I2C读取时返回。我可以重现此问题,同时强调I2C读取(读取加速度传感器的 7 个值)并结合运行 httpd 并每 5 秒在浏览器中刷新一次网页。我 stm32f401rei2c使用 HAL_ERR和HAL_BUSY,只能通过复位I2C和软重启解决。后来改用模拟I2C,在抓包时发现又是会出现10ns的毛刺信号,头疼。初步怀...
if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) { return HAL_ERROR; } 在调试中发现如果使用模拟IIC,可以与从机正常通信,但是使用硬件IICHAL库函数读取从机,超时返回HAL_ERROR,对比发现模拟IIC,管脚配置为推挽输出,硬件I2C则是开漏,所以在从机和主机都没有接上拉电阻的情况下,...