开源改变世界

driver.c 中可能有拼写错误 #11

推推 grbl 3年前 (2023-02-08) 221次浏览
关闭
kfmut 打开了这个问题 2021 年 5 月 27 日 · 8条评论
关闭

driver.c 中可能有拼写错误#11

kfmut 打开了这个问题 2021 年 5 月 27 日 · 8条评论

评论

driver.c 中可能有拼写错误 #11

你好,

我试图了解 STM32 MCU 的引脚映射,并注意到在步进电机旋转方向的引脚分配函数中,使用 STEP_OUTMODE 代替 DIRECTION_OUTMODE(第 315 行)。应该这样吗?

STM32F4xx/Src/driver.c

第 311 至 325 行 b9426a4

//设置步进方向输出引脚
//注意:请参阅 stepperSetStepOutputs() 的注释
内联 静态 __attribute__ ((always_inline)) void stepperSetDirOutputs ( axes_signals_t dir_outbits)
{
#如果STEP_OUTMODE == GPIO_BITBAND
dir_outbits。掩码^= 设置。步进器dir_invert面具;
BITBAND_PERI(X_DIRECTION_PORT-> ODR,X_DIRECTION_PIN)= dir_outbits。; _
BITBAND_PERI(Y_DIRECTION_PORT-> ODR,Y_DIRECTION_PIN)= dir_outbits。
BITBAND_PERI(Z_DIRECTION_PORT-> ODR,Z_DIRECTION_PIN)= dir_outbits。; _
# elif DIRECTION_OUTMODE == GPIO_MAP
DIRECTION_PORT-> ODR = (DIRECTION_PORT-> ODR & ~DIRECTION_MASK) | dir_outmap[dir_outbits。];
#否则
DIRECTION_PORT-> ODR = (DIRECTION_PORT-> ODR & ~DIRECTION_MASK) | ( ( dir_outbits.mask ^ settings.steppers.dir_invert.mask ) << DIRECTION_OUTMODE ) ;
#结尾
}

 

此外,我很好奇从最终用户的角度来看,不同 INMODE 和 OUTMODE 选项之间的实际区别是什么:GPIO_SHIFTx、GPIO_MAP、GPIO_BITBAND?

据我了解,GPIO_SHIFTx 用于在同一端口上一个接一个地连接引脚,GPIO_MAP 用于同一端口上的引脚,GPIO_BITBAND 用于不同端口上的引脚。使用不同的选项是否有任何速度差异或其他有价值的差异?我离低级 MCU 编程真的太远了,所以我在这里缺乏任何专业知识。

driver.c 中可能有拼写错误 #11
贡献者

应该这样吗?

没有,前几天我重构代码的时候就修好了。请参阅 PR #9。我可能会在今天或明天提交更改后的代码。

我也很好奇从最终用户的角度来看,不同 INMODE 和 OUTMODE 选项之间的实际区别是什么

不是真的,但我不喜欢浪费处理器周期。至少应尽可能快地处理步进输出,因为添加的每个周期都会降低最大步进速率。

使用不同的选项是否有任何速度差异或其他有价值的差异?

没有显着差异,shift 是最快的,但只比 map 少几条指令。Bitband 最慢但灵活,因为可以将引脚分配给不同的端口。

driver.c 中可能有拼写错误 #11
作者

@terjeio真好,谢谢!现在是我以更周到的方式为我的 Blackpill 更改映射的时候了。

请参阅 PR #9。我可能会在今天或明天提交更改后的代码。

哇,stm32f4 的 6 轴,它几乎太多了 :-) 但也许像 fra589 的 mega2560 grbl 端口那样制作编号轴还不算晚https://github.com/fra589/grbl-Mega-5X/blob/ edge/grbl/config.h
所以它们可以相对容易地被克隆、重命名?自动平方也不是什么大问题,归位程序的简单更改:

#define HOMING_CYCLE_0 (1<<AXIS_3) // Z
#define HOMING_CYCLE_1 (1<<AXIS_1) // X
#define HOMING_CYCLE_2 ((1<<AXIS_2)|(1<<AXIS_4)) // Y