mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-10 05:53:39 +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.
109 lines
1.6 KiB
Go
109 lines
1.6 KiB
Go
//go:build stm32f4disco
|
|
|
|
package machine
|
|
|
|
import (
|
|
"device/stm32"
|
|
"runtime/interrupt"
|
|
)
|
|
|
|
const xtalHz = 8_000_000
|
|
|
|
const (
|
|
LED1 = LED_GREEN
|
|
LED2 = LED_ORANGE
|
|
LED3 = LED_RED
|
|
LED4 = LED_BLUE
|
|
LED_GREEN = PD12
|
|
LED_ORANGE = PD13
|
|
LED_RED = PD14
|
|
LED_BLUE = PD15
|
|
LED = LED_BUILTIN
|
|
LED_BUILTIN = LED_GREEN
|
|
)
|
|
|
|
const (
|
|
BUTTON = PA0
|
|
)
|
|
|
|
// Analog Pins
|
|
const (
|
|
ADC0 = PA0
|
|
ADC1 = PA1
|
|
ADC2 = PA2
|
|
ADC3 = PA3
|
|
ADC4 = PA4
|
|
ADC5 = PA5
|
|
ADC6 = PA6
|
|
ADC7 = PA7
|
|
ADC8 = PB0
|
|
ADC9 = PB1
|
|
ADC10 = PC0
|
|
ADC11 = PC1
|
|
ADC12 = PC2
|
|
ADC13 = PC3
|
|
ADC14 = PC4
|
|
ADC15 = PC5
|
|
)
|
|
|
|
// UART pins
|
|
const (
|
|
UART_TX_PIN = PA2
|
|
UART_RX_PIN = PA3
|
|
)
|
|
|
|
var (
|
|
UART1 = &_UART1
|
|
_UART1 = UART{
|
|
Buffer: NewRingBuffer(),
|
|
Bus: stm32.USART2,
|
|
TxAltFuncSelector: AF7_USART1_2_3,
|
|
RxAltFuncSelector: AF7_USART1_2_3,
|
|
}
|
|
DefaultUART = UART1
|
|
)
|
|
|
|
// set up RX IRQ handler. Follow similar pattern for other UARTx instances
|
|
func init() {
|
|
UART1.Interrupt = interrupt.New(stm32.IRQ_USART2, _UART1.handleInterrupt)
|
|
}
|
|
|
|
// SPI pins
|
|
const (
|
|
SPI1_SCK_PIN = PA5
|
|
SPI1_SDI_PIN = PA6
|
|
SPI1_SDO_PIN = PA7
|
|
SPI0_SCK_PIN = SPI1_SCK_PIN
|
|
SPI0_SDI_PIN = SPI1_SDI_PIN
|
|
SPI0_SDO_PIN = SPI1_SDO_PIN
|
|
)
|
|
|
|
// MEMs accelerometer
|
|
const (
|
|
MEMS_ACCEL_CS = PE3
|
|
MEMS_ACCEL_INT1 = PE0
|
|
MEMS_ACCEL_INT2 = PE1
|
|
)
|
|
|
|
// Since the first interface is named SPI1, both SPI0 and SPI1 refer to SPI1.
|
|
// TODO: implement SPI2 and SPI3.
|
|
var (
|
|
SPI0 = &SPI{
|
|
Bus: stm32.SPI1,
|
|
AltFuncSelector: AF5_SPI1_SPI2,
|
|
}
|
|
SPI1 = SPI0
|
|
)
|
|
|
|
const (
|
|
I2C0_SCL_PIN = PB6
|
|
I2C0_SDA_PIN = PB9
|
|
)
|
|
|
|
var (
|
|
I2C0 = &I2C{
|
|
Bus: stm32.I2C1,
|
|
AltFuncSelector: AF4_I2C1_2_3,
|
|
}
|
|
)
|