使用两个板子,在例程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的H5/U5系列处理器内置运放支持负压运算吗?比如输入-1V,放大倍数为2时输出-2V
stm32G030C8T6 官方例程库
STM32G030F6P6中的3种睡眠模式的功耗分别是多少
STM32G030F6 ADC+DMA多通道非连续采样无法正常工作?
STM32G0B1VE的CAN过滤器个数问题
STM32G0B1adc+dma采样数据错位
有没有stm32g071 Discovery kit的micropython的固件
STM32G0B1CBT6 Flash 不能写擦除,更不要说写入?fal库示例代码哪里有,分享一下,谢谢
STM32G031G6U6 PA8无法输出高低电平
STM32G071CBT6技术支持
注意到代码又改变了~~
库里面有个例程,可以参考一下。
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就会拉低时钟线