打印
[应用相关]

USBCDC与I2C有冲突

[复制链接]
752|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()

使用特权

评论回复
5
lizye| | 2019-1-4 18:02 | 只看该作者

/* Enable USB Interrupt */
  HAL_NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn);
这是例成例的,

使用特权

评论回复
6
shimx| | 2019-1-4 18:06 | 只看该作者

如果禁止的话,则是:
HAL_NVIC_DisableIRQ(IRQn_Type IRQn)

使用特权

评论回复
7
jiahy|  楼主 | 2019-1-4 18:08 | 只看该作者
哦,后来调试没有关USB中断,但是把I2C通信时间压缩了,现在测试稳定了。你的方案用了STM32Cube了,我这个没用到。下次用到STM32Cube就能采用你的方法了

使用特权

评论回复
8
jiaxw| | 2019-1-4 18:11 | 只看该作者
这种程序真的是演示性质的  明知道有这种潜在的bug也给放过去了

使用特权

评论回复
9
spark周| | 2019-1-4 18:16 | 只看该作者
其实也不算BUG,Dome程序能快速上手。但是确实要深入理解之后,才能解决根本性的问题。

使用特权

评论回复
10
jiahy|  楼主 | 2019-1-4 18:19 | 只看该作者
由于I2C开了中断,所以要把优先级调到最高。之前没调优先级,所以会和USB抢中断。

使用特权

评论回复
11
liliang9554| | 2019-1-4 18:22 | 只看该作者
对,I2C时序打乱后,就要重新通信了

使用特权

评论回复
12
jiahy|  楼主 | 2019-1-4 18:25 | 只看该作者
对,之间的冲突就是这个原因。

使用特权

评论回复
13
liliang9554| | 2019-1-4 18:34 | 只看该作者
老问题了  st的iic 不从iic去解决问题 想着关usb中断也是极品奇葩想法  有人已经深入测试了这个问题给出了解决方法  iic感觉各家模块非常混乱 结果大家都喜欢用模拟的 远不如spi模块统一  

使用特权

评论回复
14
dengdc| | 2019-1-4 18:39 | 只看该作者
IIC模拟的反倒比较方便

使用特权

评论回复
15
jiahy|  楼主 | 2019-1-4 18:41 | 只看该作者
嗯,我再好好缕一缕吧,有了好消息及时通知大家,结贴喽

使用特权

评论回复
16
磨砂| | 2019-1-6 16:25 | 只看该作者
如果速度要求不高的话 就用顺序传输  传输完成一个再试试另外一个

使用特权

评论回复
17
晓伍| | 2019-1-6 16:58 | 只看该作者
使用的中断吗?

使用特权

评论回复
18
八层楼| | 2019-1-6 17:01 | 只看该作者
肯定是时序上互相干扰了

使用特权

评论回复
19
guanjiaer| | 2019-1-7 11:51 | 只看该作者
分时进行处理 避免被打断

使用特权

评论回复
20
heimaojingzhang| | 2019-1-7 12:05 | 只看该作者
肯定是冲突了  自己做一个时序处理一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

862

主题

9861

帖子

4

粉丝