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

楼主: zero99

[活动] (已公布)12.19 狂欢节问答

   关闭 [复制链接]

0

主题

48

回帖

0

蝴蝶豆

高级会员

最后登录
2020-1-5
发表于 2017-12-19 22:51:15 | 显示全部楼层
1.
(1)因为数据发送与接收处于不同优先等级导致资源冲突所致,造成发送中处理接收中断时无法获取互斥锁打开USB OUT端点,因而接收数据被Device端NAK。
(2)利用USB的EOPF中断,在开启EOPF中断后,在中断内发送数据,使发送与接收中断处于相同等级或者开启一个相同优先级的定时器来做发送数据。


2.
结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量。


3.
GNU ARM Eclipse Plug-ins(改名成GNU MCU Eclipse Plug-ins)
Ac6 System Workbench for STM32
CoIDE
(案例只有提到GNU ARM Eclipse Plug-ins一种而已, SW4STM32和CoIDE是回帖内提到的)


基于GCC/Eclipse环境开发,没有版权问题。免费且社区资源也蛮丰富的。
(最近试了一下GNU MCU Eclipse plugin,安装比以前简单多了使用也正常)


点评

第三题不对,其实可以根据文中的说明去材料的  发表于 2017-12-20 16:15
回复 支持 反对

使用道具 举报

0

主题

24

回帖

0

蝴蝶豆

中级会员

最后登录
2017-12-26
发表于 2017-12-19 23:05:16 | 显示全部楼层
问题1:案例中USB传输数据时,为什么会出现卡顿现象?以及如何解决?
       答:原因是发送与接收处于不同优先等级导致资源冲突所致;解决方法可以将发送也放到与USB接收中断相同的中断等级中去,例如可以利用USB的EOPF中断,在开启EOPF中断后,在此中断内发送数据,这样发送与接收中断就处于相同等级了,EOPF每1ms触发一次,速度完全可以;当然开启一个相同优先级的定时器来做发送数据也是可以,只不过定时器间隔得控制好。
问题2:案例中,常用的测量STM32L低功耗模式下的唤醒时间方法是什么?
        答:通常结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量。
问题3:案例中提到,基于Gcc和Eclipse的集成开发环境有哪两种?并简要说明其优势
         答:SW4STM32和TrueSTUDIO;
               完全免费且没有大小限制;可以利用它图形化的界面来配置源代码的路径以及Gcc编译选项,快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数等;支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过;OpenOCD内建对ST-Link的支持,可以使用图形化界面单步调试源代码。
               
回复 支持 反对

使用道具 举报

7

主题

476

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-12-7
发表于 2017-12-19 23:31:17 | 显示全部楼层
问题1:案例中USB传输数据时,为什么会出现卡顿现象?以及如何解决?
https://www.stmcu.org.cn/module/ ... =USB传输数据时

问题2:案例中,常用的测量STM32L低功耗模式下的唤醒时间方法是什么?
https://www.stmcu.org.cn/module/ ... 2%E6%97%B6%E9%97%B4

问题3:案例中提到,基于Gcc和Eclipse的集成开发环境有哪两种?并简要说明其优势
https://www.stmcu.org.cn/module/ ... p;highlight=Eclipse

评分

参与人数 1ST金币 -5 收起 理由
zero99 -5 只给链接,差评

查看全部评分

回复 支持 反对

使用道具 举报

0

主题

12

回帖

0

蝴蝶豆

中级会员

最后登录
2018-10-25
发表于 2017-12-19 23:35:28 | 显示全部楼层
问题1:案例中USB传输数据时,为什么会出现卡顿现象?以及如何解决?
Re:问题原因,是发送与接收处于不同优先等级导致资源冲突所致,接收处于中断内,发送在中断外,接收优先级更高。发送获取互斥锁后,遇到高优先级的接收中断,跳转到接收中断内执行,同时USB会自动关闭OUT端点,接收后获取互斥锁失败导致返回,接收函数在OUT端点没有再次打开就已经提前结束,导致接收循环无以为继。
解决方案,将发送也放到与USB接收中断相同的中断等级中去。或者开启一个相同优先级的定时器来做发送数据。

问题2:案例中,常用的测量STM32L低功耗模式下的唤醒时间方法是什么?
Re:通过外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)提供唤醒边沿信号,然后通过__SEV()指令翻转GPIO口输出代表第一条指令的脉冲,最后使用示波器测量唤醒边沿到第一条指令脉冲的时间间隔,即为低功耗模式下的唤醒时间。

问题3:案例中提到,基于Gcc和Eclipse的集成开发环境有哪两种?并简要说明其优势。
Re:集成开发环境有SW4STM32和TrueSTUDIO。免费且容易使用,接近IAR/KEIL的用户体验,能够进行STM32全系列开发但不受代码大小限制,同时具有跨平台的优势。
回复 支持 反对

使用道具 举报

1

主题

306

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-9-3
发表于 2017-12-19 23:41:34 | 显示全部楼层
问题1:案例中USB传输数据时,为什么会出现卡顿现象?以及如何解决?
答:出现卡顿现象的原因是发送与接收处于不同优先等级导致资源冲突所致,那么我们可以将发送也放到与USB接收中断相同的中断等级中去,例如可以利用USB的EOPF中断,在开启EOPF中断后,在此中断内发送数据,这样发送与接收中断就处于相同等级了,EOPF每1ms触发一次,速度完全可以。当然开启一个相同优先级的定时器来做发送数据也是可以,只不过定时器间隔得控制好。


问题2:案例中,常用的测量STM32L低功耗模式下的唤醒时间方法是什么?
答:常用的测量STM32L低功耗模式下的唤醒时间方法是结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量。由于外部事件模式不需要额外处理中断时间的特点,所以利用它,我们能够得到更精确的唤醒时间的测量,更适合用于唤醒后执行下一条命令的低功耗模式。


问题3:案例中提到,基于Gcc和Eclipse的集成开发环境有哪两种?并简要说明其优势

答:案例中提到,基于Gcc和Eclipse的集成开发环境有SW4STM32和TrueSTUDIO。在用户友好程度,开发效率上已经接近需要授权费用的IAR/KEIL。

SW4STM32是AC6公司推出的基于Eclipse图形界面的完整集成开发环境。SW4STM32使用基于Gcc的完整编译调试工具链, 完全免费且没有大小限制。SW4STM32支持下列平台: 1. Windows 2. Linux 3. Mac OS

TrueSTUDIO是Atollic公司推出的基于Eclipse图形界面的完整集成开发环境。如同SW4STM32, 它使用基于Gcc的完整编译调试工具链。TrueSTUDIO提供两个版本,TrueSTUDIO Lite完全免费,没有大小限制;TrueSTUDIO Pro需要授权,但是你可以获得更多高级功能,包括代码分析和调试。TrueSTUDIO支持下列平台: 1. Windows 2. Linux

SW4STM32和TrueSTUDIO无论是在免费没有大小限制的版本中或者是需要授权的版本中,都可以使用它图形化的界面来配置源代码的路径以及Gcc编译选项, 利用Eclipse图形化的界面快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数。TrueSTUDIO支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过。TrueSTUDIO内建对ST-Link的支持,可以使用图形化界面单步调试源代码。

回复 支持 反对

使用道具 举报

2

主题

63

回帖

0

蝴蝶豆

高级会员

最后登录
2018-1-29
发表于 2017-12-19 23:46:34 | 显示全部楼层
1.原因:发送与接收端处于不同优先等级导致资源冲突所致;解决方案:1。将发送也放到与USB接收中断相同的中断等级中去;2.使用最新本的CubeF4 V1.16.0,CubeF2 V1.6.0版本库;
2.使用外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口结合来测量低功耗模式下的唤醒时间测量。
3.Eclipse IDE for C/C++ Developers和Eclipse OpenCDT;优势:免费

点评

第三题不对哦,感谢参与~  发表于 2017-12-20 16:16
回复 支持 反对

使用道具 举报

1

主题

21

回帖

0

蝴蝶豆

初级会员

最后登录
2019-9-25
发表于 2017-12-19 23:59:43 | 显示全部楼层
1-由于发送与接收处于不同优先等级导致资源冲突所致;可以将发送也放到与USB接收中断相同的中断等级中去,例如可以利用USB的EOPF中断,在开启EOPF中断后,在此中断内发送数据,这样发送与接收中断就处于相同等级了,EOPF每1ms触发一次。
2-结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间。
3-Eclipse IDE for C/C++ Developers、GNU ARM Eclipse Plug-ins

点评

第三题不对,感谢参与~  发表于 2017-12-20 16:17
回复 支持 反对

使用道具 举报

4

主题

50

回帖

2

蝴蝶豆

高级会员

最后登录
2020-8-17
发表于 2017-12-20 00:01:20 | 显示全部楼层
1、由于发送与接收处于不同优先等级导致资源冲突所致;可以将发送也放到与USB接收中断相同的中断等级中去。
2、结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间。
3、Eclipse IDE for C/C++ Developers和GNU ARM Eclipse Plug-ins

点评

第三题不对,感谢参与~  发表于 2017-12-20 16:17
回复 支持 反对

使用道具 举报

39

主题

934

回帖

45

蝴蝶豆

论坛元老

最后登录
2020-6-18
发表于 2017-12-20 09:39:13 | 显示全部楼层
问题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评估板或探索套件

点评

也可能是我提问方式的问题..  发表于 2017-12-20 16:17
第三题不对,感谢参与~  发表于 2017-12-20 16:17
回复 支持 反对

使用道具 举报

15

主题

215

回帖

3

蝴蝶豆

金牌会员

最后登录
2020-11-30
发表于 2017-12-20 09:42:17 | 显示全部楼层
1.接收处于不同优先等级导致资源冲突所致死锁,
2.通常结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量。
3 Keil和IAR这类收费,但是大多数用这个开发,参考代码丰富,Eclipse和GCC这免费;

点评

第三题不对  发表于 2017-12-20 16:17
回复 支持 反对

使用道具 举报

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