[应用相关] USBCDC与I2C有冲突

[复制链接]
1433|20
 楼主| jiahy 发表于 2019-1-4 16:33 | 显示全部楼层 |阅读模式
目前在做的一个项目,需要用USBCDC传输数据。数据通过I2C方式读取到。但是调试发现USBCDC与I2C有冲突。程序单独调试I2C一切正常、单独调试USBCDC也没有问题。将两个融合到一起就会导致I2C通信失败,但是USBCDC却没问题。
yszong 发表于 2019-1-4 16:36 | 显示全部楼层
STM32在USBCDC的中断处理中加入了while判断条件
 楼主| jiahy 发表于 2019-1-4 17:56 | 显示全部楼层
因此想在I2C通信的时候直接关闭USB中断,但是在找不到对应的函数。。。
heweibig 发表于 2019-1-4 17:59 | 显示全部楼层
参照STM32F1的Cube库函数中的stm32f1xx_ll_usb.c文件中的函数HAL_StatusTypeDef USB_DevInit()
lizye 发表于 2019-1-4 18:02 | 显示全部楼层

/* Enable USB Interrupt */
  HAL_NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn);
这是例成例的,
shimx 发表于 2019-1-4 18:06 | 显示全部楼层

如果禁止的话,则是:
HAL_NVIC_DisableIRQ(IRQn_Type IRQn)
 楼主| jiahy 发表于 2019-1-4 18:08 | 显示全部楼层
哦,后来调试没有关USB中断,但是把I2C通信时间压缩了,现在测试稳定了。你的方案用了STM32Cube了,我这个没用到。下次用到STM32Cube就能采用你的方法了
jiaxw 发表于 2019-1-4 18:11 | 显示全部楼层
这种程序真的是演示性质的  明知道有这种潜在的bug也给放过去了
spark周 发表于 2019-1-4 18:16 | 显示全部楼层
其实也不算BUG,Dome程序能快速上手。但是确实要深入理解之后,才能解决根本性的问题。
 楼主| jiahy 发表于 2019-1-4 18:19 | 显示全部楼层
由于I2C开了中断,所以要把优先级调到最高。之前没调优先级,所以会和USB抢中断。
liliang9554 发表于 2019-1-4 18:22 | 显示全部楼层
对,I2C时序打乱后,就要重新通信了
 楼主| jiahy 发表于 2019-1-4 18:25 | 显示全部楼层
对,之间的冲突就是这个原因。
liliang9554 发表于 2019-1-4 18:34 | 显示全部楼层
老问题了  st的iic 不从iic去解决问题 想着关usb中断也是极品奇葩想法  有人已经深入测试了这个问题给出了解决方法  iic感觉各家模块非常混乱 结果大家都喜欢用模拟的 远不如spi模块统一  
dengdc 发表于 2019-1-4 18:39 | 显示全部楼层
IIC模拟的反倒比较方便
 楼主| jiahy 发表于 2019-1-4 18:41 | 显示全部楼层
嗯,我再好好缕一缕吧,有了好消息及时通知大家,结贴喽
磨砂 发表于 2019-1-6 16:25 | 显示全部楼层
如果速度要求不高的话 就用顺序传输  传输完成一个再试试另外一个
晓伍 发表于 2019-1-6 16:58 | 显示全部楼层
使用的中断吗?
八层楼 发表于 2019-1-6 17:01 | 显示全部楼层
肯定是时序上互相干扰了
guanjiaer 发表于 2019-1-7 11:51 | 显示全部楼层
分时进行处理 避免被打断
heimaojingzhang 发表于 2019-1-7 12:05 | 显示全部楼层
肯定是冲突了  自己做一个时序处理一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

862

主题

9861

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部