打印
[STM32F1]

USBCDC与I2C有冲突

[复制链接]
757|33
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiahy|  楼主 | 2022-12-3 13:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前在做的一个项目,需要用USBCDC传输数据。数据通过I2C方式读取到。但是调试发现USBCDC与I2C有冲突。程序单独调试I2C一切正常、单独调试USBCDC也没有问题。将两个融合到一起就会导致I2C通信失败,但是USBCDC却没问题。

使用特权

评论回复
沙发
jlyuan| | 2022-12-3 13:48 | 只看该作者
STM32在USBCDC的中断处理中加入了while判断条件

使用特权

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

使用特权

评论回复
地板
chuxh| | 2022-12-3 13:51 | 只看该作者
参照STM32F1的Cube库函数中的stm32f1xx_ll_usb.c文件中的函数HAL_StatusTypeDef USB_DevInit()

使用特权

评论回复
5
supernan| | 2022-12-3 13:53 | 只看该作者

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

使用特权

评论回复
6
liliang9554| | 2022-12-3 13:55 | 只看该作者

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

使用特权

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

使用特权

评论回复
8
llljh| | 2022-12-3 14:03 | 只看该作者
这种程序真的是演示性质的  明知道有这种潜在的bug也给放过去了

使用特权

评论回复
9
pengf| | 2022-12-3 14:05 | 只看该作者
其实也不算BUG,Dome程序能快速上手。但是确实要深入理解之后,才能解决根本性的问题。

使用特权

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

使用特权

评论回复
11
zhuhuis| | 2022-12-3 14:09 | 只看该作者
没用过USB接口。

使用特权

评论回复
12
zhanghqi| | 2022-12-3 14:11 | 只看该作者
对,I2C时序打乱后,就要重新通信了

使用特权

评论回复
13
jiahy|  楼主 | 2022-12-3 14:14 | 只看该作者
对,之间的冲突就是这个原因。

使用特权

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

使用特权

评论回复
15
dingy| | 2022-12-3 14:19 | 只看该作者
IIC模拟的反倒比较方便

使用特权

评论回复
16
shimx| | 2022-12-3 14:22 | 只看该作者
如果速度要求不高的话 就用顺序传输  传输完成一个再试试另外一个

使用特权

评论回复
17
spark周| | 2022-12-3 14:24 | 只看该作者
肯定是时序上互相干扰了

使用特权

评论回复
18
jiajs| | 2022-12-3 14:26 | 只看该作者
分时进行处理 避免被打断

使用特权

评论回复
19
huwr| | 2022-12-3 14:28 | 只看该作者
肯定是冲突了  自己做一个时序处理一下

使用特权

评论回复
20
chenho| | 2022-12-3 14:31 | 只看该作者
最后怎么解决的啊

使用特权

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

本版积分规则

862

主题

9861

帖子

4

粉丝