更新\n对于任何感兴趣的人,这里有关于如何构建裸机 USB 堆栈、如何处理此类项目以及每个步骤需要了解的内容的分步说明和解释:STM32USB@GitHub
\nTLDR: \n我有一个STM32G441并且想要实现一个 USB 驱动程序,而不使用任何 HAL 库,只使用 CMSIS - 为了学习经验,为了空间,因为我想做的事情无论如何都需要更改 hal。
但我无法让这个东西接收任何东西。我在尝试获取设备地址时遇到了困难,该地址从未交给代码。hal 中间件工作得很好,所以这不是硬件问题。
\n我正在启用 USB 时钟(正如我所假设的那样,因为它可以使用我的逻辑分析仪发送 ACK 信号),按照数据表中的定义为 USB 外设通电,启用所有必要的中断并通过初始化BTable 和端点 0。现在我希望收到一个从未出现过的 CTR 中断。
\n\n\xce\xbcC 在 25MHz HSE 时钟上运行。USB 外设在 ~48MHz 的 PLL Q 时钟上运行,RCC 设置通过 CubeMX 时钟配置器进行验证。AHB 以半速运行,因为如果我尝试全速运行它,我会遇到总线错误硬故障,但这是另一个问题。系统时钟设置为 143.75MHz。
\nRCC->CR |= RCC_CR_HSEON | RCC_CR_HSION;\n\n// Configure PLL (R=143.75, Q=47.92)\nRCC->CR &= ~RCC_CR_PLLON;\nwhile (RCC->CR & RCC_CR_PLLRDY) {\n}\nRCC->PLLCFGR |= RCC_PLLCFGR_PLLSRC_HSE | RCC_PLLCFGR_PLLM_0 | (23 << RCC_PLLCFGR_PLLN_Pos) …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试让 Global LowLevel 键盘挂钩在 .net 5 中使用 wpf 工作,但一段时间后我总是遇到一个问题,ExecutionEngineException并且我的应用程序崩溃了。根据文档,这种异常根本不应该再发生,但对我来说它确实发生了。它也不是特定于我的项目的,因为最小的 WPF .net 5 项目也会在一些按键混搭后崩溃。
有谁知道如何解决或解决这个问题?
主窗口的示例代码:
public partial class MainWindow : Window {
private const int WH_KEYBOARD_LL = 13;
private const int WM_KEYDOWN = 0x0100;
private const int WM_SYSKEYDOWN = 0x0104;
private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod,
uint dwThreadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private …Run Code Online (Sandbox Code Playgroud)