landeng1986 发表于 2017-12-19 20:54:27

1.此问题是发送与接收处于不同优先等级导致资源冲突所致,那么我们可以将发送也放到与USB接收中断相
同的中断等级中去,例如可以利用USB的EOPF中断,在开启EOPF中断后,在此中断内发送数据,这样发送
与接收中断就处于相同等级了,EOPF每1ms触发一次,速度完全可以。当然开启一个相同优先级的定时器
来做发送数据也是可以,只不过定时器间隔得控制好。

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

3.基于Gcc和Eclipse的集成开发环境SW4STM32和TrueSTUDIO,免费,在用户友好程度,开发效率上已经接近需要授权费用的IAR/KEIL。

youngq 发表于 2017-12-19 21:07:27

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

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

问题3:基于Gcc和Eclipse的集成开发环境SW4STM32和TrueSTUDIO,在用户友好程度,开发效率上已经接近需要授权费用的IAR/KEIL。

超級稻草人 发表于 2017-12-19 21:14:00

问题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触发一次,速度完全可以。当然开启一个相同优先级的定时器来做发送数据也是可以,只不过定时器间隔得控制好。

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



问题2:案例中,常用的测量STM32L低功耗模式下的唤醒时间方法是什么?

使用不同时钟下LPUART 的方法


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

免费且容易使用,接近IAR/KEIL的用户体验,能够进行STM32全系列开发但不受代码大小限制,而且具有跨平台的优势。


射手战斗的红星 发表于 2017-12-19 21:35:09

问题1.互斥锁所致,问题是发送与接收处于不同优先等级导致资源冲突所致,那么我们可以将发送也放到与USB接收中断相同的中断等级中去,例如可以利用USB的EOPF中断,在开启EOPF中断后,在此中断内发送数据,这样发送与接收中断就处于相同等级了,EOPF每1ms触发一次,速度完全可以。
问题2 通常结合外部模式(外部中断模式External Interrupt Mode或外部事件模式External Event Mode)和__SEV()指令翻转GPIO口来测量低功耗模式下的唤醒时间测量。
问题3.SW4STM32和,Atollic TrueSTUDIO   SW4STM32使用基于Gcc的完整编译调试工具链, 完全免费且没有大小限制。你可以利用它图形化的界面来配置源代码的路径以及Gcc编译选项,快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数等。SW4STM32支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过。SW4STM32通过OpenOCD内建对ST-Link的支持,可以使用图形化界面单步调试源代码。Atollic TrueSTUDIO/STM32专业版是一个低价而功能丰富的开发环境,包括C++语言支持、基于PC的开发/调试工具、图形工具和合作功能。其中开发调试工具使设计人员在得到嵌入式硬件之前就可以着手开发应用,图形工具包括UML图形编辑器,而合作功能包括版本控制和漏洞/任务管理等。

youxia 发表于 2017-12-19 21:49:13

问题1:案例中USB传输数据时,为什么会出现卡顿现象?以及如何解决?
原因:并不是Host端没有向Device端发送Data Out数据,而是确实发送了,但被Device端NAK了。Data OUT对应的端点1是处于关闭状态。
解决方法:可以将发送也放到与USB接收中断相同的中断等级中去,例如可以利用USB的EOPF中断,在开启EOPF中断后,在此中断内发送数据,这样发送与接收中断就处于相同等级了,EOPF每1ms触发一次,速度完全可以。当然开启一个相同优先级的定时器来做发送数据也是可以,只不过定时器间隔得控制好。也可以使用最新本的CubeF4 V1.16.0。

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

问题3:案例中提到基于Gcc和Eclipse的集成开发环境有哪两种,?并简要说明其优势
SW4STM32和TrueSTUDIO。
优势:免费且容易使用,具有跨平台的优势,可以使用它图形化的界面来配置源代码的路径以及Gcc编译选项, 利用Eclipse图形化的界面快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数。支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过。内建对ST-Link的支持,可以使用图形化界面单步调试源代码。


yang_alex 发表于 2017-12-19 21:59:08

问题1:案例中USB传输数据时,为什么会出现卡顿现象?以及如何解决?
答:案例中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的完整编译调试工具链, 完全免费且没有大小限制。你可以利用它图形化的界面来配置源代码的路径以及Gcc编译选项,快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数等。SW4STM32支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过。SW4STM32通过OpenOCD内建对ST-Link的支持,可以使用图形化界面单步调试源代码。

SW4STM32支持下列平台:
 1. Windows
 2. Linux
 3. Mac OS

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

TrueSTUDIO支持下列平台:
 1. Windows
 2. Linux



weiwei4 发表于 2017-12-19 22:07:49

问题1:案例中USB传输数据时,为什么会出现卡顿现象?以及如何解决?
由于程序中的互斥锁导致,在接收函数中获取互斥锁失败导致返回,接收函数在OUT端点没有再次打开就已经提前结束,导致接收循环无以为继。解决方案:
由于此问题是发送与接收处于不同优先等级导致资源冲突所致,那么我们可以将发送也放到与USB接收中断相同的中断等级中去,例如可以利用USB的EOPF中断,在开启EOPF中断后,在此中断内发送数据,这样发送与接收中断就处于相同等级了,EOPF每1ms触发一次,速度完全可以。当然开启一个相同优先级的定时器来做发送数据也是可以,只不过定时器间隔得控制好。


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


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


SW4STM32使用基于Gcc的完整编译调试工具链, 完全免费且没有大小限制。你可以利用它图形化的界面来配置源代码的路径以及Gcc编译选项,快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数等。SW4STM32支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过。SW4STM32通过OpenOCD内建对ST-Link的支持,可以使用图形化界面单步调试源代码。


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

lebment 发表于 2017-12-19 22:16:30

问题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端点没有再次打开就已经提前结束,导致接收循环无以为继。

问题2:案例中,常用的测量STM32L低功耗模式下的唤醒时间方法是什么?
唤醒时间的测量,可以读取时间段= [唤醒引脚上波形的上升沿用于唤醒低功耗模式,引脚边沿的变化即可理解为唤醒后开始执行第一条语句的时间],也就是两个跳动边沿的时间间隔。


问题3:案例中提到,基于Gcc和Eclipse的集成开发环境有哪两种?并简要说明其优势
SW4STM32 ,TrueSTUDIO;
完全免费且没有大小限制.


sujinfu 发表于 2017-12-19 22:25:28

问题1:卡顿现象:
1 在 mian 函数中发送数据 CDC_Transmit_FS()
2 USBD_CDC_TransmitPacket()
3USBD_LL_Transmit()
4HAL_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
结合外部模式(外部中断模式 External Interrupt Mode 或外部事件模式 External Event
Mode)和__SEV()指令翻转 GPIO 口来测量低功耗模式下的唤醒时间测量
问题3
基于Gcc和Eclipse的集成开发环境有SW4STM32 和
TrueSTUDIO两种
SW4STM32 基于 Eclipse 图形界面的完整集成开发环境。SW4STM32 使用基于
Gcc 的完整编译调试工具链, 完全免费且没有大小限制。可以利用它图形化的界面来配置源代码的
路径以及 Gcc 编译选项,快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数等。
SW4STM32 支持导入 STM32CubeMX 生成的工程文件,无须改动,直接编译通过。SW4STM32 通过
OpenOCD 内建对 ST-Link 的支持,可以使用图形化界面单步调试源代码。

手捧流年风和月 发表于 2017-12-19 22:32:06

问题1:案例中USB传输数据时,为什么会出现卡顿现象?以及如何解决?
答:接收处理数据时,底层是通过接收中断回调上来的,但发送时,我们往往将发送放到main等用户函数中。这两个是不一样的,一个在中断内,一个在中断外,优先级别是不一样的,优先级不一样就有可能导致资源冲突,造成传输卡顿。
解决方案:由于此问题是发送与接收处于不同优先等级导致资源冲突所致,那么我们可以将发送也放到与USB接收中断相同的中断等级中去,例如可以利用USB的EOPF中断,在开启EOPF中断后,在此中断内发送数据,这样发送与接收中断就处于相同等级了,EOPF每1ms触发一次,速度完全可以。当然开启一个相同优先级的定时器来做发送数据也是可以,只不过定时器间隔得控制好。

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

问题3:案例中提到,基于Gcc和Eclipse的集成开发环境有哪两种?并简要说明其优势
答:SW4STM32和TrueSTUDIO。
优势:基于Eclipse图形界面的完整集成开发环境,使用基于Gcc的完整编译调试工具链,免费且没有大小限制。使用图形化的界面来配置源代码的路径以及Gcc编译选项,利用Eclipse图形化的界面快速方便在源代码中跳转浏览,编写代码时进行自动补全以及查看参数。SW4STM32支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过。SW4STM32通过OpenOCD内建对ST-Link的支持,支持导入STM32CubeMX生成的工程文件,无须改动,直接编译通过。TrueSTUDIO内建对ST-Link的支持,可以使用图形化界面单步调试源代码。
SW4STM32支持下列平台:1. Windows    2. Linux    3. Mac OS
TrueSTUDIO支持下列平台:1. Windows    2. Linux
页: 1 2 3 4 5 [6] 7 8
查看完整版本: (已公布)12.19 狂欢节问答