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

楼主: zero99

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

   关闭 [复制链接]

9

主题

549

回帖

68

蝴蝶豆

金牌会员

最后登录
2020-12-8
发表于 2017-12-19 13:28:33 | 显示全部楼层
问题1:案例中USB传输数据时,为什么会出现卡顿现象?以及如何解决?
         发送与接收处于不同优先等级导致资源冲突所致:1> 在mian函数中发送数据CDC_Transmit_FS()
2> USBD_CDC_TransmitPacket()
3> USBD_LL_Transmit()
4> HAL_PCD_EP_Transmit()
5> __HAL_LOCK(hpcd); 此时成功获取互斥锁
6> 恰好此时有一个接收中断,由于USB中断具有优先级,跳转到接收中断内执行;同时,USB核会自动关闭OUT端点;
7> HAL_PCD_DataOutStageCallback()
8> USBD_CDC_DataOut()
9> CDC_Receive_FS()
10> USBD_CDC_ReceivePacket()
11> USBD_LL_PrepareReceive()
12> HAL_PCD_EP_Receive()
13> __HAL_LOCK(hpcd); 此时获取互斥锁失败导致返回,接收函数在OUT端点没有再次打开就已经提前结束,导致接收循环无以为继。

   解决方法:将发送也放到与USB接收中断相同的中断等级中去,例如可以利用USB的EOPF中断,在开启EOPF中断后,在此中断内发送数据,这样发送与接收中断就处于相同等级了,EOPF每1ms触发一次,速度完全可以。当然开启一个相同优先级的定时器来做发送数据也是可以,只不过定时器间隔得控制好。

问题2:案例中,常用的测量STM32L低功耗模式下的唤醒时间方法是什么?
    唤醒时间的测量,可以读取时间段= [唤醒引脚上波形的上升沿用于唤醒低功耗模式,引脚边沿的变化即可理解为唤醒后开始执行第一条语句的时间],也就是两个跳动边沿的时间间隔。
    方法:结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量

问题3:案例中提到,基于Gcc和Eclipse的集成开发环境有哪两种?并简要说明其优势
    SW4STM32和TrueSTUDIO两种开发环境。
  SW4STM32开发环境优势:SW4STM32是AC6公司推出的基于Eclipse图形界面的完整集成开发环境。SW4STM32使用基于Gcc的完整编译调试工具链, 完全免费且没有大小限制。你可以利用它图形化的界面来配置源代码的路径以及Gcc编译选项,快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数等。SW4STM32支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过。SW4STM32通过OpenOCD内建对ST-Link的支持,可以使用图形化界面单步调试源代码。
  TrueSTUDIO开发环境优势:TrueSTUDIO提供两个版本,TrueSTUDIO Lite完全免费,没有大小限制;TrueSTUDIO Pro需要授权,但是你可以获得更多高级功能,包括代码分析和调试。无论是在免费没有大小限制的版本中或者是需要授权的版本中,你可以使用它图形化的界面来配置源代码的路径以及Gcc编译选项, 利用Eclipse图形化的界面快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数。TrueSTUDIO内建对ST-Link的支持,可以使用图形化界面单步调试源代码
回复 支持 反对

使用道具 举报

1

主题

6

回帖

0

蝴蝶豆

初级会员

最后登录
2017-12-20
发表于 2017-12-19 13:31:07 | 显示全部楼层
TrueSTUDIO是Atollic公司推出的基于Eclipse图形界面的完整集成开发环境。如同SW4STM32, 它使用基于Gcc的完整编译调试工具链。TrueSTUDIO提供两个版本,TrueSTUDIO Lite完全免费,没有大小限制;TrueSTUDIO Pro需要授权,但是你可以获得更多高级功能,包括代码分析和调试。无论是在免费没有大小限制的版本中或者是需要授权的版本中,你可以使用它图形化的界面来配置源代码的路径以及
回复 支持 反对

使用道具 举报

0

主题

4

回帖

0

蝴蝶豆

新手上路

最后登录
2018-1-5
发表于 2017-12-19 13:31:25 | 显示全部楼层
但是你可以获得更多高级功能,包括代码分析和调试。无论是在免费没有大小限制的版本中或者是需要授权的版本中,你可以使用它图形化的界面来配置源代码的路径以及
回复 支持 反对

使用道具 举报

2

主题

51

回帖

3

蝴蝶豆

高级会员

最后登录
2019-11-19
发表于 2017-12-19 14:14:12 | 显示全部楼层
1.卡顿原因是发送与接收处于不同优先等级导致资源冲突,可以通过将发送也放到与USB接收中断相同的中断等级中去,例如可以利用USB的EOPF中断,在开启EOPF中断后,在此中断内发送数据,这样发送与接收中断就处于相同等级了。
2.结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量。
3.SW4STM32和TrueSTUDIO
   在用户友好程度,开发效率上已经接近需要授权费用的IAR/KEIL。对于需要使用Gcc开发STM32的专业开发人员,学习研究STM32的个人/学生用户,完全可以考虑使用SW4STM32和TrueSTUDIO,且具有跨平台的优势
回复 支持 反对

使用道具 举报

20

主题

1110

回帖

125

蝴蝶豆

论坛元老

最后登录
2019-5-4
发表于 2017-12-19 14:17:59 | 显示全部楼层
问题1:出现卡顿现象的原因是发送与接收处于不同优先等级导致资源冲突所致,解决办法是将发送也放到与USB接收中断相同的中断等级中,或更新到最新的Cube库

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

问题3:SW4STM32和TrueSTUDIOSW4STM32优势:完全免费且没有大小限制,可以利用它图形化的界面来配置源代码的路径以及Gcc编译选项,快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数等。支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过。SW4STM32通过OpenOCD内建对ST-Link的支持,支持Windows、Linux和Mac平台开发
TrueSTUDIO优势:TrueSTUDIO提供两个版本,TrueSTUDIO Lite完全免费,没有大小限制;TrueSTUDIO Pro需要授权,但是你可以获得更多高级功能,包括代码分析和调试。可以使用它图形化的界面来配置源代码的路径以及Gcc编译选项, 利用Eclipse图形化的界面快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数。支持Windows和Linux平台开发,支持导入支持导入STM32CubeMX生成的工程文件。
回复 支持 反对

使用道具 举报

16

主题

1710

回帖

241

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2017-12-19 14:34:37 | 显示全部楼层
1,https://www.stmcu.org.cn/module/forum/thread-613504-1-1.html
原因:互斥锁所致
解决方案:
知道了问题原因所在,接下来解决问题就相对来说比较容易的了。由于此问题是发送与接收处于不同优先等级导致资源冲突所致,那么我们可以将发送也放到与USB接收中断相同的中断等级中去,例如可以利用USB的EOPF中断,在开启EOPF中断后,在此中断内发送数据,这样发送与接收中断就处于相同等级了,EOPF每1ms触发一次,速度完全可以。当然开启一个相同优先级的定时器来做发送数据也是可以,只不过定时器间隔得控制好。

此外,其实此问题是出现在Cube库的低版本中,例如CubeF4 V1.5.0和CubeF2 V1.3.0中都存在,但是在最新本的CubeF4 V1.16.0,CubeF2 V1.6.0版本中此问题得到了解决;此问题虽然后来发现是版本太旧所致,但从多个客户反馈此问题来看,此问题依然不失为一个很好的参考和教训。

2,https://www.stmcu.org.cn/module/forum/thread-612528-1-1.html
通常结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量。

3,https://www.stmcu.org.cn/module/forum/thread-613837-1-1.html
SW4STM32和TrueSTUDIO
基于Gcc和Eclipse的集成开发环境SW4STM32和TrueSTUDIO,在用户友好程度,开发效率上已经接近需要授权费用的IAR/KEIL。对于需要使用Gcc开发STM32的专业开发人员,学习研究STM32的个人/学生用户,完全可以考虑使用SW4STM32和TrueSTUDIO。
回复 支持 反对

使用道具 举报

1

主题

35

回帖

0

蝴蝶豆

中级会员

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

问题2:案例中,常用的测量STM32L低功耗模式下的唤醒时间方法是什么?
结合外部模式(外部中断模式External Interrupt Mode 或外部事件模式External Event Mode)和__SEV()指令翻转GPIO 口来测量低功耗模式下的唤醒时间测量。

问题3:案例中提到,基于Gcc和Eclipse的集成开发环境有哪两种?并简要说明其优势
SW4STM32和TrueSTUDIO。
SW4STM32完全免费且没有大小限制。可以利用它图形化的界面来配置源代码的路径以及Gcc编译选项,快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数等。SW4STM32支持导入STM32CubeMX 生成的工程文件,无须改动,直接编译通过。SW4STM32 通过OpenOCD 内建对ST-Link的支持,可以使用图形化界面单步调试源代码。
TrueSTUDIO 提供两个版本,TrueSTUDIO Lite 完全免费,没有大小限制;TrueSTUDIO Pro 需要授权,但是你可以获得更多高级功能,包括代码分析和调试。无论是在免费没有大小限制的版本中或者是需要授权的版本中,你可以使用它图形化的界面来配置源代码的路径以及Gcc 编译选项,利用Eclipse 图形化的界面快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数。SW4STM32 支持导入STM32CubeMX 生成的工程文件,无须改动,直接编译通过。TrueSTUDIO 内建对ST-Link 的支持,可以使用图形化界面单步调试源代码。
回复 支持 反对

使用道具 举报

0

主题

31

回帖

0

蝴蝶豆

高级会员

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

使用道具 举报

5

主题

180

回帖

8

蝴蝶豆

金牌会员

最后登录
2020-10-13
发表于 2017-12-19 16:21:19 | 显示全部楼层
问题1:案例中USB传输数据时,为什么会出现卡顿现象?以及如何解决?
USB传输数据时发送与接收处于不同优先等级,接收函数获取互斥锁失败,接收函数在 OUT 端点没有再次打开就已经提前结束,导致接收循环无以为继。
解决方案:将发送也放到与 USB 接收中断相同的中断等级中去,例如可以利用 USB 的 EOPF 中断,在开启 EOPF 中断后,在此中断内发送数据,这样发送与接收中断就处于相同等级了,EOPF 每 1ms 触发一次,速度完全可以。当然开启一个相同优先级的定时器来做发送数据也是可以,只不过定时器间隔得控制好。
问题2:案例中,常用的测量STM32L低功耗模式下的唤醒时间方法是什么?
结合外部模式(外部中断模式 External Interrupt Mode 或外部事件模式 External EventMode)和__SEV()指令翻转 GPIO 口来测量低功耗模式下的唤醒时间测量。
问题3:案例中提到,基于Gcc和Eclipse的集成开发环境有哪两种?并简要说明其优势
1、SW4STM32
2、TrueSTUDIO

点评

第三题没有回答全..  发表于 2017-12-20 16:08
回复 支持 反对

使用道具 举报

41

主题

2476

回帖

282

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2017-12-19 16:24:36 | 显示全部楼层
问题1:案例中USB传输数据时,为什么会出现卡顿现象?以及如何解决?
           此问题是发送与接收处于不同优先等级导致资源冲突所致
问题2:案例中,常用的测量STM32L低功耗模式下的唤醒时间方法是什么?
          通常结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量
问题3:案例中提到,基于Gcc和Eclipse的集成开发环境有哪两种?并简要说明其优势
          SW4STM32和TrueSTUDIO,免费且容易使用,接近IAR/KEIL的用户体验,能够进行STM32全系列开发,不受代码大小限制,而且具有跨平台的优势。

回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版