mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-15 08:23:41 +00:00
5f02d6b659
Define the board's external crystal (HSE) frequency `xtalHz` in the respective `board_*.go` files. Per-topology PLL tables (F1, F4, F7) will compute the register dividers from it. Moving this parameter to the board definition level cleanly isolates board hardware characteristics from general MCU chip configurations, eliminating the need for custom target build tags. Targets using HSE-clocked STM32 chips must define `xtalHz` or fail to build.
145 lines
2.4 KiB
Go
145 lines
2.4 KiB
Go
//go:build mksnanov3
|
|
|
|
// The MKS Robin Nano V3.X board.
|
|
// Documented at https://github.com/makerbase-mks/MKS-Robin-Nano-V3.X.
|
|
|
|
package machine
|
|
|
|
import (
|
|
"device/stm32"
|
|
"runtime/interrupt"
|
|
)
|
|
|
|
const xtalHz = 8_000_000
|
|
|
|
// LED is also wired to the SD card card detect (CD) pin.
|
|
const LED = PD12
|
|
|
|
// UART pins
|
|
const (
|
|
UART_TX_PIN = PB10
|
|
UART_RX_PIN = PB11
|
|
)
|
|
|
|
// EXP1 and EXP2 expansion ports for connecting
|
|
// the MKS TS35 V2.0 expansion board.
|
|
const (
|
|
BEEPER = EXP1_1
|
|
|
|
// LCD pins.
|
|
LCD_DC = EXP1_8
|
|
LCD_CS = EXP1_7
|
|
LCD_RS = EXP1_4
|
|
LCD_BACKLIGHT = EXP1_3
|
|
|
|
// Touch pins. Note that some pins are shared with the
|
|
// LCD SPI1 interface.
|
|
TOUCH_CLK = EXP2_2
|
|
TOUCH_CS = EXP1_5
|
|
TOUCH_DIN = EXP2_6
|
|
TOUCH_DOUT = EXP2_1
|
|
TOUCH_IRQ = EXP1_6
|
|
|
|
BUTTON = BUTTON_JOG
|
|
BUTTON_JOG = EXP1_2
|
|
BUTTON_JOG_CCW = EXP2_3
|
|
BUTTON_JOG_CW = EXP2_5
|
|
|
|
EXP1_1 = PC5
|
|
EXP1_2 = PE13
|
|
EXP1_3 = PD13
|
|
EXP1_4 = PC6
|
|
EXP1_5 = PE14
|
|
EXP1_6 = PE15
|
|
EXP1_7 = PD11
|
|
EXP1_8 = PD10
|
|
|
|
EXP2_1 = PA6
|
|
EXP2_2 = PA5
|
|
EXP2_3 = PE8
|
|
EXP2_4 = PE10
|
|
EXP2_5 = PE11
|
|
EXP2_6 = PA7
|
|
EXP2_7 = PE12
|
|
)
|
|
|
|
var (
|
|
UART3 = &_UART3
|
|
_UART3 = UART{
|
|
Buffer: NewRingBuffer(),
|
|
Bus: stm32.USART3,
|
|
TxAltFuncSelector: AF7_USART1_2_3,
|
|
RxAltFuncSelector: AF7_USART1_2_3,
|
|
}
|
|
DefaultUART = UART3
|
|
)
|
|
|
|
// set up RX IRQ handler. Follow similar pattern for other UARTx instances
|
|
func init() {
|
|
UART3.Interrupt = interrupt.New(stm32.IRQ_USART3, _UART3.handleInterrupt)
|
|
}
|
|
|
|
// SPI pins
|
|
const (
|
|
SPI1_SCK_PIN = EXP2_2
|
|
SPI1_SDI_PIN = EXP2_1
|
|
SPI1_SDO_PIN = EXP2_6
|
|
SPI0_SCK_PIN = SPI1_SCK_PIN
|
|
SPI0_SDI_PIN = SPI1_SDI_PIN
|
|
SPI0_SDO_PIN = SPI1_SDO_PIN
|
|
)
|
|
|
|
// Since the first interface is named SPI1, both SPI0 and SPI1 refer to SPI1.
|
|
var (
|
|
SPI0 = &SPI{
|
|
Bus: stm32.SPI1,
|
|
AltFuncSelector: AF5_SPI1_SPI2,
|
|
}
|
|
SPI1 = SPI0
|
|
)
|
|
|
|
const (
|
|
I2C0_SCL_PIN = PB6
|
|
I2C0_SDA_PIN = PB7
|
|
)
|
|
|
|
var (
|
|
I2C0 = &I2C{
|
|
Bus: stm32.I2C1,
|
|
AltFuncSelector: AF4_I2C1_2_3,
|
|
}
|
|
)
|
|
|
|
// Motor control pins.
|
|
const (
|
|
X_ENABLE = PE4
|
|
X_STEP = PE3
|
|
X_DIR = PE2
|
|
X_DIAG = PA15
|
|
X_UART = PD5
|
|
|
|
Y_ENABLE = PE1
|
|
Y_STEP = PE0
|
|
Y_DIR = PB9
|
|
Y_DIAG = PD2
|
|
Y_UART = PD7
|
|
|
|
Z_ENABLE = PB8
|
|
Z_STEP = PB5
|
|
Z_DIR = PB4
|
|
Z_DIAG = PC8
|
|
Z_UART = PD4
|
|
|
|
E0_ENABLE = PB3
|
|
E0_STEP = PD6
|
|
E0_DIR = PD3
|
|
E0_DIAG = PC4
|
|
E0_UART = PD9
|
|
|
|
E1_ENABLE = PA3
|
|
E1_STEP = PD15
|
|
E1_DIR = PA1
|
|
E1_DIAG = PE7
|
|
E1_UART = PD8
|
|
)
|