打印
[应用相关]

USBCDC与I2C有冲突

[复制链接]
733|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiahy|  楼主 | 2016-9-30 22:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前在做的一个项目,需要用USBCDC传输数据。数据通过I2C方式读取到。但是调试发现USBCDC与I2C有冲突。程序单独调试I2C一切正常、单独调试USBCDC也没有问题。将两个融合到一起就会导致I2C通信失败,但是USBCDC却没问题。
沙发
yszong| | 2016-9-30 22:36 | 只看该作者
STM32在USBCDC的中断处理中加入了while判断条件

使用特权

评论回复
板凳
jiahy|  楼主 | 2016-9-30 22:36 | 只看该作者
因此想在I2C通信的时候直接关闭USB中断,但是在找不到对应的函数。。。

使用特权

评论回复
地板
heweibig| | 2016-9-30 22:36 | 只看该作者
参照STM32F1的Cube库函数中的stm32f1xx_ll_usb.c文件中的函数HAL_StatusTypeDef USB_DevInit()

使用特权

评论回复
5
wuhany| | 2016-9-30 22:36 | 只看该作者
里面有一段代码:
  /* Disable all interrupts. */
  USBx->GINTMSK = 0;

使用特权

评论回复
6
lizye| | 2016-9-30 22:37 | 只看该作者
/* Enable USB Interrupt */
  HAL_NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn);
这是例成例的,

使用特权

评论回复
7
shimx| | 2016-9-30 22:37 | 只看该作者
如果禁止的话,则是:
HAL_NVIC_DisableIRQ(IRQn_Type IRQn)

使用特权

评论回复
8
jiahy|  楼主 | 2016-9-30 22:37 | 只看该作者

哦,后来调试没有关USB中断,但是把I2C通信时间压缩了,现在测试稳定了。你的方案用了STM32Cube了,我这个没用到。下次用到STM32Cube就能采用你的方法了

使用特权

评论回复
9
jiaxw| | 2016-9-30 22:38 | 只看该作者
这种程序真的是演示性质的  明知道有这种潜在的bug也给放过去了

使用特权

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

使用特权

评论回复
11
jiahy|  楼主 | 2016-9-30 22:39 | 只看该作者
由于I2C开了中断,所以要把优先级调到最高。之前没调优先级,所以会和USB抢中断。

使用特权

评论回复
12
liliang9554| | 2016-9-30 22:39 | 只看该作者
对,I2C时序打乱后,就要重新通信了

使用特权

评论回复
13
jiahy|  楼主 | 2016-9-30 22:39 | 只看该作者
对,之间的冲突就是这个原因。

使用特权

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

使用特权

评论回复
15
jiahy|  楼主 | 2016-9-30 22:40 | 只看该作者
嗯,我再好好缕一缕吧,有了好消息及时通知大家,结贴喽

使用特权

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

本版积分规则

862

主题

9861

帖子

4

粉丝