评论
您是否修改了原始的serial.c或者您是否有针对 USART3 的板特定版本?链接到代码? |
此时我刚刚修改了 serial.c 以尝试让东西正常工作。我确实需要添加一些从 stmcube 生成的额外初始化代码来让 USART3 发送字节。我的测试树在这里: |
这里有一个错误: https://github.com/grblHAL/Plugins_spindle/blob/ebb158fa23d5619c43960c6338b005af65d5dc97/modbus.c#L489-L507 正确的代码是:
您可以通过将 MODBUS_SERIAL_PORT 定义为端口实例编号来强制选择正确的端口,如果未定义,将使用第一个空闲可用端口。添加 我没有测试 USART3/STM32F446 的硬件,但使用 F756 驱动程序进行了测试,使用映射到 PC6/7 的 USART6 用于 Modbus 和 USB CDC 用于主通道。 |
没问题,将测试并返回报告。 |
好的,所以上面没有解决我的问题,最后它与 Modbus 无关。发生的事情是我在 my_machine.h 中设置了 SPINDLE_RPM_CONTROLLED。我一直在 IMX 驱动程序中这样做,所以只是复制到 STM32 驱动程序,但由于某种原因,定义似乎没有完全传播——我注意到 SPINDLE_PWM_DIRECT 在 stepper.c 的几个点上没有被正确评估. 我认为这破坏了函数指针,因此当系统尝试写入输出时出错。 我确实尝试将 SPINDLE_RPM_CONTROLLED 放入 platformio.ini,但这也不起作用,所以我将确保在 config.h 中设置它。当我在 config.h 中设置它时,硬故障就解决了。 非常感谢您在这方面的帮助。 |
我仍在尝试深入研究这一点,但想看看是否有其他人看到了这一点。当我使用 STM32F446 启用 modbus 时,我遇到了一个硬故障。这是一块定制板,RS485 是 USART3(PORTC,引脚 5 和 10)。我已经确认我可以成功地将这个端口和引脚与主系统 uart 和 MPG 插件一起使用。通常,开发板使用 USB_CDC 进行发送方通信。
但是,当我启用 modbus 插件时,一旦系统尝试向主流输出任何内容,我就会遇到一个硬故障。调试它在我看来确实没有分配给输出流的指针,但这可能是一个转移注意力的问题。任何见解或建议将不胜感激。