开源改变世界

我正在尝试添加用于切换 IO 引脚的自定义 M 代码,但我遇到了问题 #180

推推 grbl 2年前 (2023-02-08) 198次浏览
关闭
hanke-cnc 开启了这个问题 2022 年 8 月 27 日 · 13条评论
关闭

我正在尝试添加用于切换 IO 引脚的自定义 M 代码,但我遇到了问题#180

hanke-cnc 开启了这个问题 2022 年 8 月 27 日 · 13条评论

评论

我正在尝试添加用于切换 IO 引脚的自定义 M 代码,但我遇到了问题 #180

嗨,f401 上有很多引脚,看起来有点浪费,所以我要添加一些自定义 M 代码来切换 io 引脚,
我知道你有一个用于添加自定义 M 代码的示例程序,但它看起来对我来说有点复杂,
所以我直接在 grblhal 源代码中更改它,
我在 gcode.c 中的 status_code_t gc_execute_block(char *block) 在函数中
添加了我的简单代码

case 70:
//

         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);

休息;
案例 71:
//

          HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);

休息;

很好,他可以正确运行,但是HAL_GPIO_WritePin()一grblhal接收到这段代码就运行了,我不知道在哪里添加它让grblhal在实际执行m70代码后运行HAL_GPIO_WritePin()

我正在尝试添加用于切换 IO 引脚的自定义 M 代码,但我遇到了问题 #180
作者

我这样直接在源代码里修改程序对你的grblhal哲学来说似乎有点粗鲁

我正在尝试添加用于切换 IO 引脚的自定义 M 代码,但我遇到了问题 #180
贡献者

您最多可以在映射文件中添加 8 个输出和 7 个输入(对于 STM32F4xx 驱动程序),然后可以通过 M62-M65(输出)和 M66(输入)控制它们,它们也可供插件代码使用。例如这样

如果您真的需要自定义 M 代码,最好的方法是通过插件或电路板特定代码添加它们,因为这不会在更新时被覆盖。是不是这个例子你觉得很复杂?

我正在尝试添加用于切换 IO 引脚的自定义 M 代码,但我遇到了问题 #180
作者

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);

您最多可以在映射文件中添加 8 个输出和 7 个输入(对于 STM32F4xx 驱动程序),然后可以通过 M62-M65(输出)和 M66(输入)控制它们,它们也可供插件代码使用。例如这样

如果您真的需要自定义 M 代码,最好的方法是通过插件或电路板特定代码添加它们,因为这不会在更新时被覆盖。是不是这个例子你觉得很复杂?

好吧,我不是专业程序员,我下载了mcodes.c和mcodes.h,
并在gcode.h中的user_mcode_t中添加了
my_off =998,
my_on=999
在mcodes中的execute函数中添加了switch(gc_block->user_mcode)。 C {

     case 999:
     HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
         break;
     case 998:
     HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
     break;

编译下载后,输入m999,M999 < error:20
mocodes.c代码似乎没有正确启用,
我注意到你对mcodes_init()函数的评论:
// Set up HAL pointers for handling additional M-codes .
// 在驱动程序设置中调用此函数。
但是不知道在哪里调用mcodes_init()函数,怎么办?

我正在尝试添加用于切换 IO 引脚的自定义 M 代码,但我遇到了问题 #180
贡献者

您不能通过在映射文件中定义辅助输入/输出并使用 M62-M65 命令来使用标准方法吗?

如果您有电路板映射文件,添加电路板特定代码的正确方法是创建与电路板映射同名的 ac 文件,并将#define HAS_BOARD_INIT添加到映射文件。在 c 文件中检查板名称定义并将初始化函数命名为board_init()

必须在三个地方检查额外的 M 代码,首先告诉解析器它们可用,然后在验证和声明参数(如果有)时,最后在执行相关代码时。

如果 M 代码不是您的代码,则调用原始函数(通过保存的指针)很重要 – 这样其他插件代码也可以添加 M 代码。

我正在尝试添加用于切换 IO 引脚的自定义 M 代码,但我遇到了问题 #180
作者

您不能通过在映射文件中定义辅助输入/输出并使用 M62-M65 命令来使用标准方法吗?

如果您有电路板映射文件,添加电路板特定代码的正确方法是创建与电路板映射同名的 ac 文件,并将#define HAS_BOARD_INIT添加到映射文件。在 c 文件中检查板名称定义并将初始化函数命名为board_init()

必须在三个地方检查额外的 M 代码,首先告诉解析器它们可用,然后在验证和声明参数(如果有)时,最后在执行相关代码时。

如果 M 代码不是您的代码,则调用原始函数(通过保存的指针)很重要 – 这样其他插件代码也可以添加 M 代码。