评论
请注意,不应使用 .ioc 文件重新生成库代码,因为我已修改生成的代码以使其与 grblHAL 一起使用。 STM32F103RCTX_FLASH.ld 链接器脚本必须用于 BTT_SKR_MINI_E3_V20 板的链接,STM32F103C8TX_FLASH.ld 用于所有其他板, |
谢谢! 使用更新的
示例输出:
|
太好了,我想应该添加一个新的链接描述文件,以便可以使用引导加载程序对芯片进行编程?请参阅问题#3。 MEMORY 和可能的 .isr_vector 设置必须为此更改吗?以下是来自F4xx 驱动程序的代码,可以作为更改内容的有用提示:
由于我没有我可以测试的电路板,而且由于链接器脚本是我不习惯使用的东西,所以我无法判断正确的设置应该是什么。 |
抱歉延迟,我花了一些时间试图弄清楚为什么我无法启动在我的原始 SKR Mini E3 V2.0 板上生成的文件 PlatformIO。没有出现 USB 设备,USART1 上没有输出,尽管在 我不确定这些板开箱即用的是哪种引导加载程序。我对这些板进行闪存的唯一经验是 FWIW, 我花了几天时间才意识到我必须向链接器脚本中的闪存 ORIGIN 添加一个 28KB (0x7000) 偏移量 我不确定这些板开箱即用的是哪种引导加载程序,是标准的还是其他的,但这是我通过研究https://github.com/bigtreetech/BIGTREETECH发现的- SKR-迷你-E3。 有了它,我就可以通过 USART1 在 USB 串口关闭的情况下获得 grblHAL 提示。 接下来,我无法 此外,似乎这些 ST-Link v2 克隆没有附带 至于通过引导加载程序对芯片进行编程,我还没有真正研究过,但我会注意到Klipper 的 STM32 引导加载程序注释说:
(通过BTT SKR MINI E3 V2.0SCHpdf.PDF)。 据我了解应用笔记 AN2586,这意味着它将从主闪存启动(并且可以选择通过 SWD 对芯片进行编程,假设它与适当的 ST-Link 设备一起工作)。 话虽如此,我提出了以下更改:
diff --git a/STM32F103RCTX_FLASH.ld b/STM32F103RCTX_FLASH.ld
index cbc801e..e56563e 100644
--- a/STM32F103RCTX_FLASH.ld
+++ b/STM32F103RCTX_FLASH.ld
@@ -33,11 +33,14 @@ _estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */
_Min_Heap_Size = 0x2000; /* required amount of heap */
_Min_Stack_Size = 0x400; /* required amount of stack */
+/* Dummy symbol we can override using -Wl,--defsym on the command line */
+LD_VECT_TAB_OFFSET = DEFINED(LD_VECT_TAB_OFFSET)? LD_VECT_TAB_OFFSET : 0;
+
/* Memories definition */
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 48K
- FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 256K
+ FLASH (rx) : ORIGIN = 0x8000000 + LD_VECT_TAB_OFFSET, LENGTH = 256K - LD_VECT_TAB_OFFSET - 2*2K
}
和
diff --git a/Src/system_stm32f1xx.c b/Src/system_stm32f1xx.c
index af3759a..d59da48 100644
--- a/Src/system_stm32f1xx.c
+++ b/Src/system_stm32f1xx.c
@@ -110,8 +110,10 @@
/*!< Uncomment the following line if you need to relocate your vector Table in
Internal SRAM. */
/* #define VECT_TAB_SRAM */
+#if !defined (VECT_TAB_OFFSET)
#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field.
This value must be a multiple of 0x200. */
+#endif
通过允许编译时定义 另一种选择是定义一个特定的板 你怎么认为? 接下来,为了让 USB 串行在这个板上工作,我只是对Src/main.c做了以下更改: diff --git a/Src/main.c b/Src/main.c
index 1786291..9435b5f 100644
--- a/Src/main.c
+++ b/Src/main.c
@@ -36,6 +36,14 @@ int main(void)
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
+ GPIO_InitTypeDef GPIO_Init = {
+ .Mode = GPIO_MODE_OUTPUT_PP,
+ .Pin = GPIO_PIN_14,
+ .Speed = GPIO_SPEED_FREQ_LOW,
+ };
+ HAL_GPIO_Init(GPIOA, &GPIO_Init);
+ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_14, GPIO_PIN_RESET);
+
grbl_enter();
}
显然这是一个问题,但是在 grblHAL 中用某个特定值初始化输出引脚的正确方法是什么?能否以某种方式将它们添加到Src/driver.c中? 最后,为了支持使用 PlatformIO 为 SKR Mini E3 V2.0 构建 grblHAL,我进行了以下更改。请注意,我默认禁用 USB 串行(不是真正的用户友好),以便能够同时构建 3.3V 串行版本和 USB 串行版本。
diff --git a/Inc/my_machine.h b/Inc/my_machine.h
index 4cd93d6..875e629 100644
--- a/Inc/my_machine.h
+++ b/Inc/my_machine.h
@@ -29,7 +29,7 @@
// Configuration
// Uncomment to enable.
-#define USB_SERIAL_CDC 1 // Serial communication via native USB. Comment out for UART communication.
+//#define USB_SERIAL_CDC 1 // Serial communication via native USB. Comment out for UART communication.
//#define SDCARD_ENABLE 1 // Run gcode programs from SD card, requires sdcard plugin.
//#define KEYPAD_ENABLE 1 // I2C keypad for jogging etc., requires keypad plugin.
//#define ODOMETER_ENABLE 1 // Odometer plugin.
完成这些更改后,您可以:
这将产生以下文件: % ls -1 .pio/build/BTT*/firmware.*
.pio/build/BTT_SKR_MINI_E3_V20/firmware.bin
.pio/build/BTT_SKR_MINI_E3_V20/firmware.elf
.pio/build/BTT_SKR_MINI_E3_V20_USB/firmware.bin
.pio/build/BTT_SKR_MINI_E3_V20_USB/firmware.elf
我很乐意贡献一个 PR 来支持这个 repo 中的 PlatformIO 假设你有兴趣并且可以解决上面提到的怪癖。一旦我订购的 Nucleo 板出现,我也许可以对 STM32F4xx 存储库进行同样的尝试。 |
|
我想试用#2中正在开发的 BTT SKR E3 Mini v2.0 板的代码。我知道 Eclipse 是 grblHAL 的首选 IDE,但我更愿意使用对我来说投资较少的东西,例如标准 Linux/macOS 和 Python 包管理器。
由于您在另一个线程中提到了 PlatformIO,我已经探索了这条路线并且它看起来很有吸引力,因为:
platform run
(build process) 自动下载合适的平台工具链和SDK框架(PlatformIO 期望目录和库中的源代码
src/
,例如grbl
或motors
,在它们自己的目录中lib/
,但可以使用 、 和 来解决include_dir
这个src_dir
问题build_flags
。lib_extra_dirs
)到目前为止,我想出了以下
platformio.ini
文件:在项目目录的根目录中安装此文件,安装PlatformIO 核心 (CLI),您可以开始构建项目:
ARM GCC 工具链在
trinamic/
. 我在包含标头路径的反斜杠中发布了一个修复程序,实际上是 UB。由于似乎缺少 USB 相关
.{c,h}
文件,编译失败。我之前没有使用过 STM32CubeMX,所以我希望我能在 GitHub 组织中为预期版本(假设v1.7.0
基于)找到类似命名的文件。GRBL Driver STM32F103C8.ioc
不幸的是,我并没有 100% 成功地使用这种方法。我注意到您之前已经在 GitHub 组织的其他项目中提交了“添加丢失的 USB 文件”,所以也许这在这个 repo 中也是必要的?我注意到
.mxproject
似乎列出了这些似乎丢失的文件中的一些(或全部?):(我怀疑它
usb_device.c
也不见了,我只是在编译时没有走那么远)您是否有机会帮助找到这些文件?
谢谢!