你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F407高速USB Device模式在外部中断15响应后发送4K个数据,外部中断循环给出,会导致一部分外部中断接收不到

[复制链接]
tty0805 提问时间:2025-1-17 11:20 / 已解决

外部中断间隔时间80us,共8000个,80us时间USB发送4KByte数据,外部中断会少100多个。如果把USB发送屏蔽掉,8000个中断都能正常响应。所以还是USB发送打断了外部中断响应,还有个问题是,用示波器查看CDC_Transmit_HS函数发送4KByte,执行完只需要几个us。USB发送的机制到底是什么样的,是不是虽然CDC_Transmit_HS函数执行完了,不代表发送完成了,后台模块还会占用单片机资源,进行发送。有没有解决办法,期待回复,谢谢了。

收藏 评论3 发布时间:2025-1-17 11:20

举报

3个回答
xmshao 最优答案 回答时间:2025-1-20 18:02:01
根据我阅读相关代码,我的理解大致是这样的。


当USB控制器完成一次IN事务传输后,会触发传输完成中断。中断处理程序会调用 USBD_LL_DataInStage 函数。

在 USBD_LL_DataInStage 函数中,调用DataIn 回调函数 USBD_CDC_DataIn继续后续的数据发送,当全部数据发送完毕后,会再调用
CDC_TransmitCplt_FS()函数,它返回OK时即表征当前一批数据发送完成。
xmshao 回答时间:2025-1-17 16:30:01
这里应该是发生了中断响应竞争的问题。


结合你的应用,建议将usb中断优先级相对调得低于EXTI的中断优先级,USB传输毕竟是基于缓冲和握手应答,它的中断优先级可以相对调低点。


DC_Transmit_HS函数执行完了,不代表发送完成。


调用 CDC_Transmit_FS 或 CDC_Transmit_HS 函数只是做好了发送数据的准备,实际的数据传输是由底层的 USB 驱动和硬件控制器完成的。


传输完成后,USB 控制器可以触发传输完成中断,并调用传输完成回调函数。
tty0805 回答时间:2025-1-19 15:49:06

xmshao 发表于 2025-1-17 16:30
这里应该是发生了中断响应竞争的问题。</p>
<p>

非常感谢您的回复,有几个问题请教:

1、您说的“传输完成后,USB 控制器可以触发传输完成中断,并调用传输完成回调函数”USB 控制器可以触发传输完成中断指的是OTG_HS_EP1_OUT吗?传输完成回调函数是CDC_TransmitCplt_HS()吗?我在CDC_Transmit_HS()中调用了CDC_TransmitCplt_HS(),是不是CDC_Transmit_HS()执行完,也就是发送全部完成了。

2、我的中断优先级代码:

HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2); HAL_NVIC_SetPriority(EXTI15_10_IRQn, 1, 1); HAL_NVIC_SetPriority(OTG_HS_IRQn, 2, 2);

3、发送数据部分代码

while(1) { if(loopnum>270336||loopnum==270336) { HAL_NVIC_DisableIRQ(EXTI15_10_IRQn); goto loop2; } else { if(pixnum==4096||pixnum>4096) { HAL_NVIC_EnableIRQ(OTG_HS_IRQn); num1++; pixnum=0; while(k==CDC_Transmit_HS((unsigned char *)(Scan_Data_Buff),2048)); HAL_NVIC_DisableIRQ(OTG_HS_IRQn); } } }

4、中断函数:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { unsigned char i,j,k; Scan_Data_Buff[pixnum]=(uint16_t)(Scan_data_Add_rel); loopnum++; pixnum++;

}

大致过程是外部中断270336次,其中每4096次就发送一次数据,数据个数是4096个。是代码有问题吗?对寄存器操作不全?现在问题还是USB发送打断了外部中断进入。导致中断次数不够。

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版