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

[复制链接]
查看11 | 回复0 | 2021-1-27 06:20:34 | 显示全部楼层 |阅读模式
大佬们好,
我正在用英飞凌在一款带I2C的片子,具体型号是TLE493D-A2B6。
使用CUBEMX生成I2C驱动,使用了所有的驱动函数均无法生成如下图所示芯片手册上时序。
看了函数HAL_I2C_Mem_Read()的介绍,感觉应该可以生成,但是他在函数内部把设备地址的最低位置“0”了,也就是置为了“写”逻辑,然后把后面的寄存器
地址发了出去。而我想要的是在发送设备地址时最低位为“1”,也就是“读”指令,于是我把函数里发设备地址的最低位改为了“1”,用示波器监控,设备地址发送了出去且最低位也变为了“1”,但是无法发出后续的波形。
例如:我发bit:01101011(成功)->ack->00000011(无法发送)//需要的时序
发送bit:01101010(成功)->ack->00000011(成功)//函数原有时序
而用模拟I2C的方式能成功,证明芯片是正常工作的。
所以我想问,是否STM32的I2C在发送地址的时候最低位置"1",也就是读逻辑,之后,硬件无法发送数据给从机了吗?
谢谢。
Hi,
I'musingHAL_I2c_Mem_Read().
AndmayIaskifSTM32'sI2Ccangeneratewavelikethefollowingpicture.IhavetryedMem_read()andanyotherfunctionini2c.c,butthebitfollowingdeviceaddresis"0",whichmeans"write"inI2c.
eg.
Iwanttosendbit.01101011(success)->waitforack,thensend00000011(failed),
butfuctionsendsbit.01101010(success)->waitforack,thensend00000011(success).
Isendbit01101011success,butcan'tsend00000010,
andfuctionsendsbit.01101010success,thenfuctionsends00000011success.
MayIaskStm32'sI2ccansend01101011-ack-00000011ornot?BeceasetheLSBis"0"means"write"forI2Cmaster,andLSBis"1"means"read"forI2Cmaster,sowhenLSBis"1"I2Cmastercan'twritedatatoslave?
Ihavebit-bangandsuccess,butIjustwanttoknowmaystm32'si2chardwarecangeneratetheware,bythewaythechipisinfineon'stle493d-A2B6.
Mayyouhelpmeout,thanks.



分 -->
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行