Contact me: hankecnc@gmail.com

F446RET6 USB虚拟串口测试失败 #18

推推 grbl 3年前 (2023-02-08) 335次浏览
关闭
hankecnc 开启了这个issue 2021 年 6 月 14 日 · 18条评论
关闭

F446RET6 USB虚拟串口测试失败#18

hankecnc 开启了这个issue 2021 年 6 月 14 日 · 18条评论

评论

F446RET6 USB虚拟串口测试失败 #18

您好,我是来自中国的业余数控爱好者。之前在这个页面学习并制作了基于https://github.com/robomechs/6-AXIS-USBCNC-GRBL的grbl版本的电路板。我的淘宝店有卖(一家网店,网址https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.18a21debZt82Qh&ft=t&id=639866857811因为如果不启用#define USB_SERIAL_CDC 1,USB连接电脑时会没有反应,所以我很确定是程序问题。我不想通过ch340串口连接电脑。一方面增加了不可靠性,另一方面也会发生熔焊。带来一点麻烦,

F446RET6 USB虚拟串口测试失败 #18
作者

我不会单片机编程,所以无法解决这个问题

F446RET6 USB虚拟串口测试失败 #18
贡献者

哪个F466开发板?它有主振荡器的晶体吗?频率是多少?
您是否NUCLEO_F446从编译中删除了符号?

我之所以问,是因为提供给 USB 外围设备的时钟频率很关键,而且在为 F446 构建时我没有验证 USB 的时钟设置,因为我没有可以检查的板。

F446RET6 USB虚拟串口测试失败 #18
作者

启用USB后,插上电脑有反应,但识别出未知设备,很可能是程序的问题。

F446RET6 USB虚拟串口测试失败 #18
作者

我用的是淘宝买的F446RET6电路板。我用万用表测试了他的USB。和F103C8T6一样,也是PA11和12。
F446RET6 USB虚拟串口测试失败 #18

F446RET6 USB虚拟串口测试失败 #18
作者

他用的是8M晶振,用GRBLhal串口pb2,pb3通讯,效果很好

F446RET6 USB虚拟串口测试失败 #18
作者

关于你的源码,我发誓我没有做太多改动,我是这个页面的grblhal核心程序https://github.com/grblHAL/core用https://github.com/grblHAL/
下载STM32F4xx到你的电脑,将core-master解压后的所有文件放到STM32F4xx-master grbl文件夹下,点击?图标,在 my_machine 中选择 Release F446 Nucle064。h #define BOARD_MORPHO_CNC, and #define USB_SERIAL_CDC 1
然后编译,会出现错误提示,我把那个#if defined(IS_NUCLEO_BOB)&& USB_SERIAL_CDC…#endif删掉,
重新编译没有错误,把程序下载到单片机,
除此之外,其他都没有改变

F446RET6 USB虚拟串口测试失败 #18
F446RET6 USB虚拟串口测试失败 #18
F446RET6 USB虚拟串口测试失败 #18
F446RET6 USB虚拟串口测试失败 #18
F446RET6 USB虚拟串口测试失败 #18

F446RET6 USB虚拟串口测试失败 #18
作者

STM32F4xx-masterusbusbusb.zip
这是我修改的文件,用b2和b3串口可以正常工作

F446RET6 USB虚拟串口测试失败 #18
作者

我已经安装了st的USB虚拟串口驱动,https://github.com/robomechs/6-AXIS-USBCNC-GRBL这个页面的USB虚拟串口可以正常工作

F446RET6 USB虚拟串口测试失败 #18
贡献者

现在SystemClock_Config() 用这段代码替换 main.c 中的代码:

void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};

  /** Configure the main internal regulator output voltage
  */
  __HAL_RCC_PWR_CLK_ENABLE();
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 7;
  RCC_OscInitStruct.PLL.PLLN = 294;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  RCC_OscInitStruct.PLL.PLLR = 7;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** Initializes the CPU, AHB and APB buses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  {
    Error_Handler();
  }
  PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_CLK48;
  PeriphClkInitStruct.Clk48ClockSelection = RCC_CLK48CLKSOURCE_PLLQ;
  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
}

然后删除 NUCLEO_F446 编译符号并添加符号 HSE_VALUE 设置为 8000000 –请参阅此处了解如何执行此操作。

这应该有望为 USB 操作正确设置时钟树。