在线时间348 小时
UID219090
ST金币0
蝴蝶豆45
注册时间2008-4-2
论坛元老
- 最后登录
- 2020-6-18
|
发表于 2017-12-20 09:39:13
|
显示全部楼层
a0a.1 32b0c
问题1、
__HAL_LOCK(hpcd); 此时成功获取互斥锁,恰好此时有一个接收中断,由于USB中断具有优先级,跳转到接收中断内执行;同时,USB核会自动关闭OUT端点;然后在接收的时候已经关闭,导致接收循环一直失败...
知道了问题原因所在,接下来解决问题就相对来说比较容易的了。由于此问题是发送与接收处于不同优先等级导致资源冲突所致,那么我们可以将发送也放到与USB接收中断相同的中断等级中去,例如可以利用USB的EOPF中断,在开启EOPF中断后,在此中断内发送数据,这样发送与接收中断就处于相同等级了,EOPF每1ms触发一次,速度完全可以。当然开启一个相同优先级的定时器来做发送数据也是可以,只不过定时器间隔得控制好。
解决办法
此外,其实此问题是出现在Cube库的低版本中,例如CubeF4 V1.5.0和CubeF2 V1.3.0中都存在,但是在最新本的CubeF4 V1.16.0,CubeF2 V1.6.0版本中此问题得到了解决;此问题虽然后来发现是版本太旧所致,但从多个客户反馈此问题来看,此问题依然不失为一个很好的参考和教训。
问题2
唤醒时间的测量,可以读取时间段= [唤醒引脚上波形的上升沿用于唤醒低功耗模式,引脚边沿的变化即可理解为唤醒后开始执行第一条语句的时间],也就是两个跳动边沿的时间间隔。
问题3
这个问题问的不够明确,我姑且就答 CooCox CoIDE 和 STM32 Ac6 System Workbench
优势:这些工具没有代码行数限制,支持所有STM32所需的配置文件和固件,以及直观的硬件设备,例如用于设计验证和应用开发的STM32Nucleo评估板或探索套件
|
|