你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
(已公布)12.19 狂欢节问答
[复制链接]
zero99
提问时间:2017-12-19 09:17 /
阅读主题, 点击返回1楼
赞
0
收藏
1
评论
85
分享
发布时间:2017-12-19 09:17
请先
登录
后回复
85个回答
hello_bug
回答时间:2017-12-19 13:28:33
a0a.1 32b0c
问题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的支持,可以使用图形化界面单步调试源代码
赞
0
评论
回复
支持
反对
hoook
回答时间:2017-12-19 13:31:07
a0a.1 32b0c
TrueSTUDIO是Atollic公司推出的基于Eclipse图形界面的完整集成开发环境。如同SW4STM32, 它使用基于Gcc的完整编译调试工具链。TrueSTUDIO提供两个版本,TrueSTUDIO Lite完全免费,没有大小限制;TrueSTUDIO Pro需要授权,但是你可以获得更多高级功能,包括代码分析和调试。无论是在免费没有大小限制的版本中或者是需要授权的版本中,你可以使用它图形化的界面来配置源代码的路径以及
赞
0
评论
回复
支持
反对
lukaisi
回答时间:2017-12-19 13:31:25
a0a.1 32b0c
但是你可以获得更多高级功能,包括代码分析和调试。无论是在免费没有大小限制的版本中或者是需要授权的版本中,你可以使用它图形化的界面来配置源代码的路径以及
赞
0
评论
回复
支持
反对
szc5b123
回答时间:2017-12-19 14:14:12
a0a.1 32b0c
1.卡顿原因是发送与接收处于不同优先等级导致资源冲突,可以通过将发送也放到与USB接收中断相同的中断等级中去,例如可以利用USB的EOPF中断,在开启EOPF中断后,在此中断内发送数据,这样发送与接收中断就处于相同等级了。
2.结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量。
3.SW4STM32和TrueSTUDIO
在用户友好程度,开发效率上已经接近需要授权费用的IAR/KEIL。对于需要使用Gcc开发STM32的专业开发人员,学习研究STM32的个人/学生用户,完全可以考虑使用SW4STM32和TrueSTUDIO,且具有跨平台的优势
赞
0
评论
回复
支持
反对
anobodykey
回答时间:2017-12-19 14:17:59
a0a.1 32b0c
问题1:出现卡顿现象的原因是发送与接收处于不同优先等级导致资源冲突所致,解决办法是将发送也放到与USB接收中断相同的中断等级中,或更新到最新的Cube库
问题2:通常结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量。
由于外部事件模式不需要额外处理中断时间的特点,所以利用它,我们能够得到更精确的唤醒时间的测量,更适合用于唤醒后执行下一条命令的低功耗模式
问题3:
SW4STM32和TrueSTUDIO
SW4STM32优势:
完全免费且没有大小限制,
可以利用它图形化的界面来配置源代码的路径以及Gcc编译选项,快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数等。
支持导入
STM32CubeMX
生成的工程文件,无须改动,直接编译通过。SW4STM32通过OpenOCD内建对ST-Link的支持,支持Windows、Linux和Mac平台开发
TrueSTUDIO优势:
TrueSTUDIO提供两个版本,TrueSTUDIO Lite完全免费,没有大小限制;TrueSTUDIO Pro需要授权,但是你可以获得更多高级功能,包括代码分析和调试。
可以使用它图形化的界面来配置源代码的路径以及Gcc编译选项, 利用Eclipse图形化的界面快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数。
支持Windows和Linux平台开发,支持导入
支持导入
STM32CubeMX
生成的工程文件。
赞
0
评论
回复
支持
反对
wudianjun2001
回答时间:2017-12-19 14:34:37
a0a.1 32b0c
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。
赞
0
评论
回复
支持
反对
xinchao
回答时间:2017-12-19 14:41:59
a0a.1 32b0c
问题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
评论
回复
支持
反对
Zeyo_Pendragon
回答时间:2017-12-19 15:08:13
a0a.1 32b0c
1、此问题是发送与接收处于不同优先等级导致资源冲突所致,那么我们可以将发送也放到与USB接收中断相同的中断等级中去,例如可以利用USB的EOPF中断,在开启EOPF中断后,在此中断内发送数据,这样发送与接收中断就处于相同等级了,EOPF每1ms触发一次,速度完全可以。当然开启一个相同优先级的定时器来做发送数据也是可以,只不过定时器间隔得控制好。
2、通常结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量。
3、SW4STM32和TrueSTUDIO 优势:完全免费且没有大小限制。你可以利用它图形化的界面来配置源代码的路径以及Gcc编译选项,快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数等。支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过。内建对ST-Link的支持,可以使用图形化界面单步调试源代码
赞
0
评论
回复
支持
反对
涛哥2035
回答时间:2017-12-19 16:21:19
a0a.1 32b0c
问题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
点评
zero99
第三题没有回答全..
发表于 2017-12-20 16:08
赞
0
评论
回复
支持
反对
埃斯提爱慕
回答时间:2017-12-19 16:24:36
a0a.1 32b0c
提示:
作者被禁止或删除 内容自动屏蔽
赞
0
评论
回复
支持
反对
大碗刚
回答时间:2017-12-19 17:11:31
a0a.1 32b0c
1.原因:发送与接收处于不同优先等级导致资源冲突所致;解决方法:可以将发送也放到与USB接收中断相同的中断等级中去,例如可以利用USB的EOPF中断,在开启EOPF中断后,在此中断内发送数据,这样发送与接收中断就处于相同等级了,EOPF每1ms触发一次,速度完全可以。当然开启一个相同优先级的定时器来做发送数据也是可以,只不过定时器间隔得控制好。此外,其实此问题是出现在Cube库的低版本中,例如CubeF4 V1.5.0和CubeF2 V1.3.0中都存在,但是在最新本的CubeF4 V1.16.0,CubeF2 V1.6.0版本中此问题得到了解决。
2.通常结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量。由于外部事件模式不需要额外处理中断时间的特点,所以利用它,我们能够得到更精确的唤醒时间的测量,更适合用于唤醒后执行下一条命令的低功耗模式。
3.基于Gcc和Eclipse的集成开发环境SW4STM32和TrueSTUDI。SW4STM32是AC6公司推出的基于Eclipse图形界面的完整集成开发环境。SW4STM32使用基于Gcc的完整编译调试工具链, 完全免费且没有大小限制。你可以利用它图形化的界面来配置源代码的路径以及Gcc编译选项,快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数等。SW4STM32支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过。SW4STM32通过OpenOCD内建对ST-Link的支持,可以使用图形化界面单步调试源代码。TrueSTUDIO是Atollic公司推出的基于Eclipse图形界面的完整集成开发环境。如同SW4STM32, 它使用基于Gcc的完整编译调试工具链。TrueSTUDIO提供两个版本,TrueSTUDIO Lite完全免费,没有大小限制;TrueSTUDIO Pro需要授权,但是你可以获得更多高级功能,包括代码分析和调试。无论是在免费没有大小限制的版本中或者是需要授权的版本中,你可以使用它图形化的界面来配置源代码的路径以及Gcc编译选项, 利用Eclipse图形化的界面快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数。SW4STM32支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过。TrueSTUDIO内建对ST-Link的支持,可以使用图形化界面单步调试源代码。基于Gcc和Eclipse的集成开发环境SW4STM32和TrueSTUDIO,在用户友好程度,开发效率上已经接近需要授权费用的IAR/KEIL。
赞
0
评论
回复
支持
反对
creep
回答时间:2017-12-19 17:22:30
a0a.1 32b0c
问题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
评论
回复
支持
反对
五哥1
回答时间:2017-12-19 18:35:28
a0a.1 32b0c
1、在接收到USB数据包的个数后(PKTCNT),USB核将内部自动将这个OUT端点的NAK为置1,以阻止接收更多数据包;当出现问题时,程序果然被锁死在这个while(1)了,这也证明了正是这个互斥锁所致。由于此问题是发送与接收处于不同优先等级导致资源冲突所致,那么我们可以将发送也放到与USB接收中断相同的中断等级中去,例如可以利用USB的EOPF中断,在开启EOPF中断后,在此中断内发送数据,这样发送与接收中断就处于相同等级了,EOPF每1ms触发一次,速度完全可以。当然开启一个相同优先级的定时器来做发送数据也是可以,只不过定时器间隔得控制好。此问题虽然后来发现是版本太旧所致。但是在最新本的CubeF4 V1.16.0,CubeF2 V1.6.0版本中此问题得到了解决。
2、PWR_STANDBY 和PWR_STOP这项目工程,通过这两个低功耗模式做一个说明测量唤醒时间的方法。
通过上述的两个示例可以看出,通常结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量。
由于外部事件模式不需要额外处理中断时间的特点,所以利用它,我们能够得到更精确的唤醒时间的测量,更适合用于唤醒后执行下一条命令的低功耗模式。
3、基于Gcc和Eclipse的集成开发环境SW4STM32和TrueSTUDIO,
SW4STM32是AC6公司推出的基于Eclipse图形界面的完整集成开发环境。SW4STM32使用基于Gcc的完整编译调试工具链, 完全免费且没有大小限制。你可以利用它图形化的界面来配置源代码的路径以及Gcc编译选项,快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数等。SW4STM32支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过。SW4STM32通过OpenOCD内建对ST-Link的支持,可以使用图形化界面单步调试源代码。
TrueSTUDIO是Atollic公司推出的基于Eclipse图形界面的完整集成开发环境。如同SW4STM32, 它使用基于Gcc的完整编译调试工具链。TrueSTUDIO提供两个版本,TrueSTUDIO Lite完全免费,没有大小限制;TrueSTUDIO Pro需要授权,但是你可以获得更多高级功能,包括代码分析和调试。无论是在免费没有大小限制的版本中或者是需要授权的版本中,你可以使用它图形化的界面来配置源代码的路径以及Gcc编译选项, 利用Eclipse图形化的界面快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数。SW4STM32支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过。TrueSTUDIO内建对ST-Link的支持,可以使用图形化界面单步调试源代码。
基于Gcc和Eclipse的集成开发环境SW4STM32和TrueSTUDIO,在用户友好程度,开发效率上已经接近需要授权费用的IAR/KEIL。对于需要使用Gcc开发STM32的专业开发人员,学习研究STM32的个人/学生用户,完全可以考虑使用SW4STM32和TrueSTUDIO。
赞
0
评论
回复
支持
反对
豳草
回答时间:2017-12-19 18:47:19
a0a.1 32b0c
1.问题是发送与接收处于不同优先等级导致资源冲突所致,解决方法:可以将发送也放到与USB接收中断相同的中断等级中去
2.结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量
3.基于Gcc和Eclipse的集成开发环境SW4STM32和TrueSTUDIO,特点:在用户友好程度,开发效率上已经接近需要授权费用的IAR/KEIL,SW4STM32完全免费且没有大小限制。TrueSTUDIO提供两个版本,TrueSTUDIO Lite完全免费,没有大小限制;TrueSTUDIO Pro需要授权,但是可以获得更多高级功能,包括代码分析和调试。
赞
0
评论
回复
支持
反对
kimoye
回答时间:2017-12-19 18:59:13
a0a.1 32b0c
1:此问题是发送与接收处于不同优先等级导致资源冲突所致,那么我们可以将发送也放到与USB接收中断相同的中断等级中去,例如可以利用USB的EOPF中断,在开启EOPF中断后,在此中断内发送数据,这样发送与接收中断就处于相同等级了,EOPF每1ms触发一次,速度完全可以。当然开启一个相同优先级的定时器来做发送数据也是可以,只不过定时器间隔得控制好。
2:通常结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量
3:基于Gcc和Eclipse的集成开发环境有SW4STM32和TrueSTUDIO。两者都基于Eclipse的图形界面,都可以单步调试,自动补全,代码追踪等,下面是各自的优势。
SW4STM32支持三种系统可以说是全平台了,支持导入STM32CubeMX生成的工程文件,而且完全免费,但是其单步调试需要通过OpenOCD的配合的
而TrueSTUDIO有可选有高级的代码分析,而且其单步调试是直接内建对ST-Link的,更加方便。
赞
0
评论
回复
支持
反对
1
2
3
4
5
/ 5 页
下一页
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
发送与接收处于不同优先等级导致资源冲突所致: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的支持,可以使用图形化界面单步调试源代码
2.结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量。
3.SW4STM32和TrueSTUDIO
在用户友好程度,开发效率上已经接近需要授权费用的IAR/KEIL。对于需要使用Gcc开发STM32的专业开发人员,学习研究STM32的个人/学生用户,完全可以考虑使用SW4STM32和TrueSTUDIO,且具有跨平台的优势
问题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生成的工程文件。
原因:互斥锁所致
解决方案:
知道了问题原因所在,接下来解决问题就相对来说比较容易的了。由于此问题是发送与接收处于不同优先等级导致资源冲突所致,那么我们可以将发送也放到与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。
由于此问题是发送与接收处于不同优先等级导致资源冲突所致,那么我们可以将发送也放到与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 的支持,可以使用图形化界面单步调试源代码。
2、通常结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量。
3、SW4STM32和TrueSTUDIO 优势:完全免费且没有大小限制。你可以利用它图形化的界面来配置源代码的路径以及Gcc编译选项,快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数等。支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过。内建对ST-Link的支持,可以使用图形化界面单步调试源代码
USB传输数据时发送与接收处于不同优先等级,接收函数获取互斥锁失败,接收函数在 OUT 端点没有再次打开就已经提前结束,导致接收循环无以为继。
解决方案:将发送也放到与 USB 接收中断相同的中断等级中去,例如可以利用 USB 的 EOPF 中断,在开启 EOPF 中断后,在此中断内发送数据,这样发送与接收中断就处于相同等级了,EOPF 每 1ms 触发一次,速度完全可以。当然开启一个相同优先级的定时器来做发送数据也是可以,只不过定时器间隔得控制好。
问题2:案例中,常用的测量STM32L低功耗模式下的唤醒时间方法是什么?
结合外部模式(外部中断模式 External Interrupt Mode 或外部事件模式 External EventMode)和__SEV()指令翻转 GPIO 口来测量低功耗模式下的唤醒时间测量。
问题3:案例中提到,基于Gcc和Eclipse的集成开发环境有哪两种?并简要说明其优势
1、SW4STM32
2、TrueSTUDIO
点评
2.通常结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量。由于外部事件模式不需要额外处理中断时间的特点,所以利用它,我们能够得到更精确的唤醒时间的测量,更适合用于唤醒后执行下一条命令的低功耗模式。
3.基于Gcc和Eclipse的集成开发环境SW4STM32和TrueSTUDI。SW4STM32是AC6公司推出的基于Eclipse图形界面的完整集成开发环境。SW4STM32使用基于Gcc的完整编译调试工具链, 完全免费且没有大小限制。你可以利用它图形化的界面来配置源代码的路径以及Gcc编译选项,快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数等。SW4STM32支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过。SW4STM32通过OpenOCD内建对ST-Link的支持,可以使用图形化界面单步调试源代码。TrueSTUDIO是Atollic公司推出的基于Eclipse图形界面的完整集成开发环境。如同SW4STM32, 它使用基于Gcc的完整编译调试工具链。TrueSTUDIO提供两个版本,TrueSTUDIO Lite完全免费,没有大小限制;TrueSTUDIO Pro需要授权,但是你可以获得更多高级功能,包括代码分析和调试。无论是在免费没有大小限制的版本中或者是需要授权的版本中,你可以使用它图形化的界面来配置源代码的路径以及Gcc编译选项, 利用Eclipse图形化的界面快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数。SW4STM32支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过。TrueSTUDIO内建对ST-Link的支持,可以使用图形化界面单步调试源代码。基于Gcc和Eclipse的集成开发环境SW4STM32和TrueSTUDIO,在用户友好程度,开发效率上已经接近需要授权费用的IAR/KEIL。
由于此问题是发送与接收处于不同优先等级导致资源冲突所致,那么我们可以将发送也放到与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 的支持,可以使用图形化界面单步调试源代码。
2、PWR_STANDBY 和PWR_STOP这项目工程,通过这两个低功耗模式做一个说明测量唤醒时间的方法。
通过上述的两个示例可以看出,通常结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量。
由于外部事件模式不需要额外处理中断时间的特点,所以利用它,我们能够得到更精确的唤醒时间的测量,更适合用于唤醒后执行下一条命令的低功耗模式。
3、基于Gcc和Eclipse的集成开发环境SW4STM32和TrueSTUDIO,
SW4STM32是AC6公司推出的基于Eclipse图形界面的完整集成开发环境。SW4STM32使用基于Gcc的完整编译调试工具链, 完全免费且没有大小限制。你可以利用它图形化的界面来配置源代码的路径以及Gcc编译选项,快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数等。SW4STM32支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过。SW4STM32通过OpenOCD内建对ST-Link的支持,可以使用图形化界面单步调试源代码。
TrueSTUDIO是Atollic公司推出的基于Eclipse图形界面的完整集成开发环境。如同SW4STM32, 它使用基于Gcc的完整编译调试工具链。TrueSTUDIO提供两个版本,TrueSTUDIO Lite完全免费,没有大小限制;TrueSTUDIO Pro需要授权,但是你可以获得更多高级功能,包括代码分析和调试。无论是在免费没有大小限制的版本中或者是需要授权的版本中,你可以使用它图形化的界面来配置源代码的路径以及Gcc编译选项, 利用Eclipse图形化的界面快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数。SW4STM32支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过。TrueSTUDIO内建对ST-Link的支持,可以使用图形化界面单步调试源代码。
基于Gcc和Eclipse的集成开发环境SW4STM32和TrueSTUDIO,在用户友好程度,开发效率上已经接近需要授权费用的IAR/KEIL。对于需要使用Gcc开发STM32的专业开发人员,学习研究STM32的个人/学生用户,完全可以考虑使用SW4STM32和TrueSTUDIO。
2.结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量
3.基于Gcc和Eclipse的集成开发环境SW4STM32和TrueSTUDIO,特点:在用户友好程度,开发效率上已经接近需要授权费用的IAR/KEIL,SW4STM32完全免费且没有大小限制。TrueSTUDIO提供两个版本,TrueSTUDIO Lite完全免费,没有大小限制;TrueSTUDIO Pro需要授权,但是可以获得更多高级功能,包括代码分析和调试。
2:通常结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量
3:基于Gcc和Eclipse的集成开发环境有SW4STM32和TrueSTUDIO。两者都基于Eclipse的图形界面,都可以单步调试,自动补全,代码追踪等,下面是各自的优势。
SW4STM32支持三种系统可以说是全平台了,支持导入STM32CubeMX生成的工程文件,而且完全免费,但是其单步调试需要通过OpenOCD的配合的
而TrueSTUDIO有可选有高级的代码分析,而且其单步调试是直接内建对ST-Link的,更加方便。