关于CUBEMX生成在I2C驱动函数在问题 HAL_I2C_Mem_Read

所属分类:STM32F系列 浏览数:1218 提问者:羽夜霜降 提问时间:2019-01-17

问:

大佬们好, 我正在用英飞凌在一款带I2C的片子,具体型号是TLE493D-A2B6。 使用CUBEMX生成I2C驱动,使用了所有的驱动函数均无法生成如下图所示芯片手册上时序。 看了函数HAL_I2C_Mem_Read()的介绍,感觉应该可以生成,但是他在函数内部把设备地址的最低位置“0”了,也就是置为了“写”逻辑,然后把后面的寄存器 地址发了出去。而我想要的是在发送设备地址时最低位为“1”,也就是“读”指令,于是我把函数里发设备地址的最低位改为了“1”,用示波器监控,设备地址发送了出去且最低位也变为了“1”,但是无法发出后续的波形。 例如:我发bit: 0110 1011(成功)->ack->0000 0011(无法发送) //需要的时序 发送bit:0110 1010(成功)->ack->0000 0011(成功) //函数原有时序 而用模拟I2C的方式能成功,证明芯片是正常工作的。 所以我想问,是否STM32的I2C在发送地址的时候最低位置"1",也就是读逻辑,之后,硬件无法发送数据给从机谢谢。


答:从字面的意思理解为从存贮器读的函数,如果是面对EEPROM,根据I2C协议应该是先写地址,再去读,如果这时候修改肯定不妥。HAL库中有些函数是中间函数,为其他函数服务的,单独调用未必能完成完整功能。最好的办法是参考相关例程,调用例程中的函数。下载对应的cube 库后,里面有相关例程的项目,看一下readme 会比较清楚。然后看例程是否是你需要的。
回答者:butterflyspring 回答时间:2019-01-22

登录后回答。
图书推荐
算法心得:高效算法的奥秘

算法心得:高效算法的奥秘

本书给我们带来了一大批极为诱人的知识,其中包括各种节省程序运行时间的技巧、算法与窍门...
漫画半导体(高清版)

漫画半导体(高清版)

这是一本实用性很强的图书,,以漫画的形式更易于让人接受,边读故事边学知识,轻松且易于记忆。
广告