完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我用103做了一个从机, 接收数据在HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c)里面可以中断。数据也接收正常。但是主机读取从机数据的时候就郁闷了。 HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c)和HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c)都没有响应中断,但是数据已经发送回去了。而且就是主机写入的数据。怎么回事,用的是IIC中断, 没有用DMA.
我用另一个STM32读取60从机02地址的两个数据。什么中断都没有响应就完成了。 而且41,28是我RX接收数组里面收到的数据。 不应该是接到到从机地址或数据时就应该中断让我们判断命令吗? |
|
相关推荐
1个回答
|
|
从您的描述来看,您在使用STM32的HAL库实现I2C从机时遇到了一些问题。您提到了在接收数据时,`HAL_I2C_SlaveRxCpltCallback`回调函数能够正常工作,但是在发送数据时,`HAL_I2C_SlaveTxCpltCallback`回调函数没有响应。同时,您提到了数据已经发送回去,但是没有触发相应的中断。
为了解决这个问题,我们可以尝试以下几个步骤: 1. 确保您的I2C从机配置正确。检查I2C时钟、地址、数据格式等设置是否正确。 2. 在初始化I2C从机时,确保您已经正确设置了回调函数。例如: ```c I2C_HandleTypeDef hi2c; hi2c.Instance = I2Cx; hi2c.Init.ClockSpeed = 100000; hi2c.Init.DutyCycle = I2C_DUTYCYCLE_2; // ... 其他初始化参数 HAL_I2C_Init(&hi2c); HAL_I2C_RegisterAddrCallback(&hi2c, HAL_I2C_ADDRCallbackID_SLAVE_TX, HAL_I2C_SlaveTxCpltCallback); ``` 3. 在`HAL_I2C_SlaveTxCpltCallback`回调函数中,检查您的代码逻辑是否正确。例如,您可能需要在回调函数中处理发送完成的逻辑,例如: ```c void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c) { // 处理发送完成的逻辑 // 例如,清除发送标志、准备下一次发送等 } ``` 4. 如果问题仍然存在,您可以尝试使用STM32的HAL库提供的其他回调函数,例如`HAL_I2C_SlaveRxCpltCallback`、`HAL_I2C_SlaveAddrCallback`等,以确保您的代码在不同阶段能够正确响应。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1760 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1613 浏览 1 评论
1058 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1670 浏览 2 评论
1932浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
724浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
564浏览 3评论
590浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
548浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 17:23 , Processed in 0.783448 second(s), Total 49, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号