|
使用两个板子,在例程I2C_TwoBoards_RestartComIT代码上进行修改: 主机调用HAL_I2C_Mem_Read_IT函数,发送内存地址16位后读10个数据; 从机调用HAL_I2C_Slave_Seq_Receive_IT接收内存地址后再调用HAL_I2C_Slave_Seq_Transmit_IT发送10个数据; 现象: 从机正常接收,给主机发送第1个数据正常,到第2~10个数据时每次第八个时钟拉低了500多个ms才拉高,也就是延时了500多ms才回ack。不知道什么原因? 现在把HAL_I2C_Mem_Read_IT替换成查询模式HAL_I2C_Mem_Read,就没有以上时钟被拉低很久的现象。 这说明HAL_I2C_Mem_Read_IT函数封装哪里有问题?求指导 主机调用代码:
从机调用代码:
从机回调函数:
|
简单聊聊STM32的SPI外设
How to write the stm32g0's dts file for RB3 Gen2 ?
MDK5使用AC6优化等级问题
CMSIS里提供的GCC ld链接文件疑问
大家晚上好啊
stm32G071RBT6跑TOUCHGFX的时候使用仪表控件,更新数值的时候会卡死,怎么解决
STM32G070 I2C主机只发送设备地址读测试是否产生stop位
STM32G030K6Tx使用ADC+DMA进行6通道ADC采集,DMA传输错位问题。
夜深了,睡不着
晚上好啊,兄弟们
微信公众号
手机版
注意到代码又改变了~~
库里面有个例程,可以参考一下。
STM32Cube_FW_G0_V1.5.0\Projects\STM32G081B-EVAL\Examples\I2C\I2C_TwoBoards_ComIT\
已经找到原因,对比更新最新的G0代码时漏了开接收中断。
HAL_I2C_Mem_Read_IT函数最后调用I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT);
在I2C_Mem_ISR_IT里检测TC标志的地方需调用I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT);I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT);
主机没开接收中断,没有读RXDR就会拉低时钟线