打印
[STM32F1]

未启用缓存,USB CDC 打开失败?

[复制链接]
178|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
唐纳德d|  楼主 | 2025-5-27 22:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我已经用 STM32cubeIDE 创建了一个usb CDC 项目。
如果未启用缓存,通过固件访问位于 ox20005604 的特定变量,会导致从 PC 打开串行端口返回错误(代码 87)。
很奇怪的现象

使用特权

评论回复
沙发
公羊子丹| | 2025-5-28 07:27 | 只看该作者
你说的地址 0x20005604 看着像是 RAM 的尾部,是不是跟 USB 缓冲区有冲突了?

使用特权

评论回复
板凳
周半梅| | 2025-5-28 07:28 | 只看该作者
有没有试过把那个变量放到 __attribute__((section(".noinit"))) 或者干脆挪个地址试试?

使用特权

评论回复
地板
帛灿灿| | 2025-5-28 07:29 | 只看该作者
错误代码 87 好像是 Windows 那边报的,意思是参数错误,可能是 USB 堆栈没准备好?

使用特权

评论回复
5
童雨竹| | 2025-5-28 07:29 | 只看该作者
你是不是用了 DMA 模式?STM32 的 USB 有时候读写非 32 字节对齐的变量会出事。

使用特权

评论回复
6
万图| | 2025-5-28 07:31 | 只看该作者
不启用 CPU cache(虽然 F1 本来也没 cache)应该无关吧,会不会是访问时序的问题?

使用特权

评论回复
7
Wordsworth| | 2025-5-28 07:31 | 只看该作者
我以前遇到过类似的,最终发现是 USB 缓冲区和其他变量共享了内存,换个地址就好了。

使用特权

评论回复
8
Bblythe| | 2025-5-28 07:32 | 只看该作者
建议把 USB 缓冲区和普通变量物理上隔远一点,有时连 .ld 链接脚本都得手动调。

使用特权

评论回复
9
Pulitzer| | 2025-5-28 07:33 | 只看该作者
变量是 volatile 吗?USB 中断和主循环同时访问不加同步可能也出问题。

使用特权

评论回复
10
Uriah| | 2025-5-28 07:34 | 只看该作者
有可能是 PC 端没握手成功,可以试试用串口工具打开 CDC,看下握手有没有问题。

使用特权

评论回复
11
Clyde011| | 2025-5-28 07:35 | 只看该作者
有没有用 USB_CDC_Transmit_FS 的返回值判断状态?可能 USB 处于 busy 状态导致卡住。

使用特权

评论回复
12
flycamelaaa| | 2025-5-28 15:45 | 只看该作者
建议启用缓存并使用volatile关键字。

使用特权

评论回复
13
powerantone| | 2025-5-28 15:46 | 只看该作者
STM32的内存通常位于SRAM区域,未启用缓存时,直接通过指针访问可能因硬件优化导致数据不一致或总线错误。错误代码87可能对应工具链的编译或链接错误,但实际可能是硬件访问异常触发。

使用特权

评论回复
14
stormwind123| | 2025-5-28 15:48 | 只看该作者
检查内存对齐,变量地址对齐到4字节。

使用特权

评论回复
15
jcky001| | 2025-5-28 15:51 | 只看该作者
将变量访问移至主循环或任务调度中,中断内仅设置标志位,避免直接操作。

使用特权

评论回复
16
elephant00| | 2025-5-28 15:53 | 只看该作者
降低优化级别。

使用特权

评论回复
17
stormwind123| | 2025-5-28 16:20 | 只看该作者
建议启用D-Cache。

使用特权

评论回复
18
probedog| | 2025-5-28 17:00 | 只看该作者
若变量需实时更新,在定义时添加volatile,防止编译器优化导致访问延迟。

使用特权

评论回复
19
cr315| | 2025-5-28 17:20 | 只看该作者
检查USB缓冲区,CDC_Receive_FS和CDC_Transmit_FS函数中有无未因变量访问导致缓冲区溢出或死锁。

使用特权

评论回复
20
classroom| | 2025-5-28 18:00 | 只看该作者
在STM32CubeMX中调整USB中断优先级,要高于其他非关键中断。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

15

帖子

0

粉丝