打印
[应用相关]

STM32怎么关闭USB中断

[复制链接]
4233|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yangliuzhu|  楼主 | 2015-11-16 11:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前在做的一个项目,需要用USBCDC传输数据。数据通过I2C方式读取到。但是调试发现USBCDC与I2C有冲突。程序单独调试I2C一切正常、单独调试USBCDC也没有问题。将两个融合到一起就会导致I2C通信失败,但是USBCDC却没问题。
检查后发现,STM32在USBCDC的中断处理中加入了while判断条件。
因此想在I2C通信的时候直接关闭USB中断,但是在找不到对应的函数。。。
沙发
小小刀| | 2015-11-17 15:59 | 只看该作者
参照STM32F1的Cube库函数中的stm32f1xx_ll_usb.c文件中的函数HAL_StatusTypeDef USB_DevInit(),里面有一段代码:
  /* Disable all interrupts. */
  USBx->GINTMSK = 0;
应该就是楼主想要甬道的把

使用特权

评论回复
板凳
小小刀| | 2015-11-17 17:13 | 只看该作者
  /* Enable USB Interrupt */
  HAL_NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn);
这是例成例的,如果禁止的话,则是:
HAL_NVIC_DisableIRQ(IRQn_Type IRQn)

使用特权

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

使用特权

评论回复
5
myxiaonia| | 2015-11-18 11:04 | 只看该作者
这种程序真的是演示性质的  明知道有这种潜在的bug也给放过去了  标准真的是太低了  产品质量令人担忧啊

想想还有很多未知的bug  再加上这些已知的bug  不敢再往下想了

使用特权

评论回复
6
yangliuzhu|  楼主 | 2015-11-25 16:05 | 只看该作者
其实也不算BUG,Dome程序能快速上手。但是确实要深入理解之后,才能解决根本性的问题。谢谢你的意见了。由于I2C开了中断,所以要把优先级调到最高。之前没调优先级,所以会和USB抢中断。而且I2C时序打乱后,就要重新通信了。之间的冲突就是这个原因。

使用特权

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

使用特权

评论回复
8
pjzmj2012| | 2021-12-14 15:22 | 只看该作者
小小刀 发表于 2015-11-17 17:13
/* Enable USB Interrupt */
  HAL_NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn);
这是例成例的,如果禁止的话, ...

没有用Hal库怎么办? 怎么关中断

使用特权

评论回复
评论
香水城 2021-12-17 17:34 回复TA
不管你用什么库,你怎么开的就怎么关啊! 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

12

帖子

1

粉丝