targets,runtime,machine: add support for the stm32f469-disco board
The LEDs and button work; I haven't tested the SPI and I2C configuration.
Этот коммит содержится в:
родитель
302e72e84f
коммит
bd7ab8ddd5
9 изменённых файлов: 162 добавлений и 11 удалений
2
Makefile
2
Makefile
|
@ -453,6 +453,8 @@ ifneq ($(STM32), 0)
|
||||||
@$(MD5SUM) test.hex
|
@$(MD5SUM) test.hex
|
||||||
$(TINYGO) build -size short -o test.hex -target=stm32f4disco-1 examples/pwm
|
$(TINYGO) build -size short -o test.hex -target=stm32f4disco-1 examples/pwm
|
||||||
@$(MD5SUM) test.hex
|
@$(MD5SUM) test.hex
|
||||||
|
$(TINYGO) build -size short -o test.hex -target=stm32f469disco examples/blinky1
|
||||||
|
@$(MD5SUM) test.hex
|
||||||
$(TINYGO) build -size short -o test.hex -target=lorae5 examples/blinky1
|
$(TINYGO) build -size short -o test.hex -target=lorae5 examples/blinky1
|
||||||
@$(MD5SUM) test.hex
|
@$(MD5SUM) test.hex
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -43,7 +43,7 @@ See the [getting started instructions](https://tinygo.org/getting-started/) for
|
||||||
|
|
||||||
You can compile TinyGo programs for microcontrollers, WebAssembly and Linux.
|
You can compile TinyGo programs for microcontrollers, WebAssembly and Linux.
|
||||||
|
|
||||||
The following 75 microcontroller boards are currently supported:
|
The following 76 microcontroller boards are currently supported:
|
||||||
|
|
||||||
* [Adafruit Circuit Playground Bluefruit](https://www.adafruit.com/product/4333)
|
* [Adafruit Circuit Playground Bluefruit](https://www.adafruit.com/product/4333)
|
||||||
* [Adafruit Circuit Playground Express](https://www.adafruit.com/product/3333)
|
* [Adafruit Circuit Playground Express](https://www.adafruit.com/product/3333)
|
||||||
|
@ -118,6 +118,7 @@ The following 75 microcontroller boards are currently supported:
|
||||||
* [ST Micro "Nucleo" WL55JC](https://www.st.com/en/evaluation-tools/nucleo-wl55jc.html)
|
* [ST Micro "Nucleo" WL55JC](https://www.st.com/en/evaluation-tools/nucleo-wl55jc.html)
|
||||||
* [ST Micro STM32F103XX "Bluepill"](https://stm32-base.org/boards/STM32F103C8T6-Blue-Pill)
|
* [ST Micro STM32F103XX "Bluepill"](https://stm32-base.org/boards/STM32F103C8T6-Blue-Pill)
|
||||||
* [ST Micro STM32F407 "Discovery"](https://www.st.com/en/evaluation-tools/stm32f4discovery.html)
|
* [ST Micro STM32F407 "Discovery"](https://www.st.com/en/evaluation-tools/stm32f4discovery.html)
|
||||||
|
* [ST Micro STM32F469 "Discovery"](https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-mpu-eval-tools/stm32-mcu-mpu-eval-tools/stm32-discovery-kits/32f469idiscovery.html)
|
||||||
* [X9 Pro smartwatch](https://github.com/curtpw/nRF5x-device-reverse-engineering/tree/master/X9-nrf52832-activity-tracker/)
|
* [X9 Pro smartwatch](https://github.com/curtpw/nRF5x-device-reverse-engineering/tree/master/X9-nrf52832-activity-tracker/)
|
||||||
* [The Things Industries Generic Node Sensor Edition](https://www.genericnode.com/docs/sensor-edition/)
|
* [The Things Industries Generic Node Sensor Edition](https://www.genericnode.com/docs/sensor-edition/)
|
||||||
|
|
||||||
|
|
79
src/machine/board_stm32f469disco.go
Обычный файл
79
src/machine/board_stm32f469disco.go
Обычный файл
|
@ -0,0 +1,79 @@
|
||||||
|
// +build stm32f469disco
|
||||||
|
|
||||||
|
package machine
|
||||||
|
|
||||||
|
import (
|
||||||
|
"device/stm32"
|
||||||
|
"runtime/interrupt"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
LED = LED_BUILTIN
|
||||||
|
LED1 = LED_GREEN
|
||||||
|
LED2 = LED_ORANGE
|
||||||
|
LED3 = LED_RED
|
||||||
|
LED4 = LED_BLUE
|
||||||
|
LED_BUILTIN = LED_GREEN
|
||||||
|
LED_GREEN = PG6
|
||||||
|
LED_ORANGE = PD4
|
||||||
|
LED_RED = PD5
|
||||||
|
LED_BLUE = PK3
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
BUTTON = PA0
|
||||||
|
)
|
||||||
|
|
||||||
|
// UART pins
|
||||||
|
const (
|
||||||
|
UART_TX_PIN = PB10
|
||||||
|
UART_RX_PIN = PB11
|
||||||
|
)
|
||||||
|
|
||||||
|
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 = 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
|
||||||
|
)
|
||||||
|
|
||||||
|
// 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,
|
||||||
|
}
|
||||||
|
)
|
|
@ -616,16 +616,6 @@ func initRNG() {
|
||||||
stm32.RNG.CR.SetBits(stm32.RNG_CR_RNGEN)
|
stm32.RNG.CR.SetBits(stm32.RNG_CR_RNGEN)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CPUFrequency() uint32 {
|
|
||||||
return 168000000
|
|
||||||
}
|
|
||||||
|
|
||||||
// Internal use: configured speed of the APB1 and APB2 timers, this should be kept
|
|
||||||
// in sync with any changes to runtime package which configures the oscillators
|
|
||||||
// and clock frequencies
|
|
||||||
const APB1_TIM_FREQ = 42000000 * 2
|
|
||||||
const APB2_TIM_FREQ = 84000000 * 2
|
|
||||||
|
|
||||||
// Alternative peripheral pin functions
|
// Alternative peripheral pin functions
|
||||||
const (
|
const (
|
||||||
AF0_SYSTEM = 0
|
AF0_SYSTEM = 0
|
||||||
|
|
15
src/machine/machine_stm32f40x.go
Обычный файл
15
src/machine/machine_stm32f40x.go
Обычный файл
|
@ -0,0 +1,15 @@
|
||||||
|
//go:build stm32f4 && (stm32f405 || stm32f407)
|
||||||
|
// +build stm32f4
|
||||||
|
// +build stm32f405 stm32f407
|
||||||
|
|
||||||
|
package machine
|
||||||
|
|
||||||
|
func CPUFrequency() uint32 {
|
||||||
|
return 168000000
|
||||||
|
}
|
||||||
|
|
||||||
|
// Internal use: configured speed of the APB1 and APB2 timers, this should be kept
|
||||||
|
// in sync with any changes to runtime package which configures the oscillators
|
||||||
|
// and clock frequencies
|
||||||
|
const APB1_TIM_FREQ = 42000000 * 2
|
||||||
|
const APB2_TIM_FREQ = 84000000 * 2
|
14
src/machine/machine_stm32f469.go
Обычный файл
14
src/machine/machine_stm32f469.go
Обычный файл
|
@ -0,0 +1,14 @@
|
||||||
|
//go:build stm32f4 && stm32f469
|
||||||
|
// +build stm32f4,stm32f469
|
||||||
|
|
||||||
|
package machine
|
||||||
|
|
||||||
|
func CPUFrequency() uint32 {
|
||||||
|
return 180000000
|
||||||
|
}
|
||||||
|
|
||||||
|
// Internal use: configured speed of the APB1 and APB2 timers, this should be kept
|
||||||
|
// in sync with any changes to runtime package which configures the oscillators
|
||||||
|
// and clock frequencies
|
||||||
|
const APB1_TIM_FREQ = 45000000 * 2
|
||||||
|
const APB2_TIM_FREQ = 90000000 * 2
|
28
src/runtime/runtime_stm32f469.go
Обычный файл
28
src/runtime/runtime_stm32f469.go
Обычный файл
|
@ -0,0 +1,28 @@
|
||||||
|
//go:build stm32f4 && stm32f469
|
||||||
|
// +build stm32f4,stm32f469
|
||||||
|
|
||||||
|
package runtime
|
||||||
|
|
||||||
|
import "device/stm32"
|
||||||
|
|
||||||
|
/*
|
||||||
|
clock settings
|
||||||
|
+-------------+--------+
|
||||||
|
| HSE | 8mhz |
|
||||||
|
| SYSCLK | 180mhz |
|
||||||
|
| HCLK | 180mhz |
|
||||||
|
| APB2(PCLK2) | 90mhz |
|
||||||
|
| APB1(PCLK1) | 45mhz |
|
||||||
|
+-------------+--------+
|
||||||
|
*/
|
||||||
|
const (
|
||||||
|
HSE_STARTUP_TIMEOUT = 0x0500
|
||||||
|
// PLL Options - See RM0386 Reference Manual pg. 148
|
||||||
|
PLL_M = 8 // PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
|
||||||
|
PLL_N = 360
|
||||||
|
PLL_P = 2 // SYSCLK = PLL_VCO / PLL_P
|
||||||
|
PLL_Q = 7 // USB OTS FS, SDIO and RNG Clock = PLL_VCO / PLL_Q
|
||||||
|
PLL_R = 6 // DSI
|
||||||
|
PLL_CFGR = PLL_M | (PLL_N << stm32.RCC_PLLCFGR_PLLN_Pos) | (((PLL_P >> 1) - 1) << stm32.RCC_PLLCFGR_PLLP_Pos) |
|
||||||
|
(1 << stm32.RCC_PLLCFGR_PLLSRC_Pos) | (PLL_Q << stm32.RCC_PLLCFGR_PLLQ_Pos) | (PLL_R << stm32.RCC_PLLCFGR_PLLR_Pos)
|
||||||
|
)
|
10
targets/stm32f469.ld
Обычный файл
10
targets/stm32f469.ld
Обычный файл
|
@ -0,0 +1,10 @@
|
||||||
|
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
FLASH_TEXT (rw) : ORIGIN = 0x08000000, LENGTH = 2M
|
||||||
|
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 320K
|
||||||
|
}
|
||||||
|
|
||||||
|
_stack_size = 4K;
|
||||||
|
|
||||||
|
INCLUDE "targets/arm.ld"
|
12
targets/stm32f469disco.json
Обычный файл
12
targets/stm32f469disco.json
Обычный файл
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"inherits": ["cortex-m4"],
|
||||||
|
"build-tags": ["stm32f469disco", "stm32f469", "stm32f4", "stm32"],
|
||||||
|
"serial": "uart",
|
||||||
|
"linkerscript": "targets/stm32f469.ld",
|
||||||
|
"extra-files": [
|
||||||
|
"src/device/stm32/stm32f469.s"
|
||||||
|
],
|
||||||
|
"flash-method": "openocd",
|
||||||
|
"openocd-interface": "stlink",
|
||||||
|
"openocd-target": "stm32f4x"
|
||||||
|
}
|
Загрузка…
Создание таблицы
Сослаться в новой задаче