开源改变世界

当 USART_NUM = 1 #22

推推 grbl 3年前 (2023-02-10) 194次浏览
关闭
klchin66 打开了这个问题 2019 年 8 月 5 日 · 3条评论
关闭

当 USART_NUM = 1#22

klchin66 打开了这个问题 2019 年 8 月 5 日 · 3条评论

评论

当 USART_NUM = 1 #22

你好,

我曾尝试使用带有 stm32f407zgt 和 stm32f407igt 的 Atollic 来编写您的代码
(两者都是中国),我得到了 2 个不同的结果。我只是在不
连接任何硬件的情况下测试代码——步进器、开关等。

a) 407ZGT 它工作——幸运的是它。

b) 407IGT 它工作但它停止了点击从 Candle2.0 解锁
– 当板开始时,在蜡烛上它得到错误:未知或错误:9
– 当蜡烛发送 $X 并收到 OK
– 跟随蜡烛发送主轴速度S10000 但未收到 OK
并在此处停止。

what could be the problem? 

顺便说一句,我建议当 USART_NUM = 1 时,stm32f4xx_it.c 下的代码,
添加这个检查,它可以在没有任何更改的情况下工作……就像
运行它时一样,想知道为什么蜡烛不显示实时状态和位置。

a)
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {
/* 从接收数据寄存器读取一个字节 */
unsigned char c = (USART_ReceiveData(USART1) & 0xFF);

	//  Write character to buffer
if ( 1 == USART_NUM )         //  Added this checking
  ProcessReceive( c );
else
  FifoUsart_Insert(USART1_NUM, USART_DIR_RX, c);
}

b)
void ProcessReceive(char c)
{


}
else {
// 将字符写入缓冲区
if ( 1 == USART_NUM ) // 添加了这个
FifoUsart_Insert(USART1_NUM, USART_DIR_RX, c); // 添加了这个检查
else
FifoUsart_Insert(USART2_NUM, USART_DIR_RX, c);
}
}
}

TQ。

当 USART_NUM = 1 #22

您好,
错误 9 表示您在 grbl 未处于空闲状态时发送了 gcode。您的第二块板可能会在解锁后执行重置(由于 hard_fault)。

USART_NUM 旨在轻松打开/关闭 usart 接口并在仅使用 1 个接口时节省 RAM。

当 USART_NUM = 1 #22
作者

感谢您的回答。

仍在努力寻找原因,当它在第一个 ‘s’ 字符上收到 S10000 时遇到了问题。
使用调试器时,USART1 不再接收中断。我认为它在 while 循环中的某个地方
,因为它没有在
Protocol_MainLoop 下的 while(Getc(&c) == 0) 循环处停止。

USART_NUM 确实明白。提到的原因,因为如果使用 1 个端口 (USART1)
并且没有更改 USART.c 就不会调用 ProcessReceive。

是这样吗?您至少实现了 2 个端口,主要是 1 个用于 Protocol_MainLoop。
和 1 用于命令 – 实时 ProcessReceive 或更新位置/状态/覆盖。

TQVM。

当 USART_NUM = 1 #22
作者

我找到了原因,它是由 SysTick_Handler CONTROL_FEED_HOLD_BIT 触发的。
因为不知道这个文件 – system.c 中使用了 PORTA PIN 1。

TQVM。