summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/stm32/boards/CERB40/mpconfigboard.h7
-rw-r--r--ports/stm32/boards/CERB40/pins.csv2
-rw-r--r--ports/stm32/boards/NUCLEO_F429ZI/mpconfigboard.h7
-rw-r--r--ports/stm32/boards/NUCLEO_F746ZG/mpconfigboard.h7
-rw-r--r--ports/stm32/boards/NUCLEO_F767ZI/mpconfigboard.h7
-rw-r--r--ports/stm32/boards/OLIMEX_E407/mpconfigboard.h7
-rw-r--r--ports/stm32/boards/PYBV10/mpconfigboard.h9
-rw-r--r--ports/stm32/boards/PYBV11/mpconfigboard.h9
-rw-r--r--ports/stm32/boards/PYBV3/mpconfigboard.h7
-rw-r--r--ports/stm32/boards/PYBV4/mpconfigboard.h9
-rw-r--r--ports/stm32/boards/STM32F429DISC/mpconfigboard.h7
-rw-r--r--ports/stm32/boards/STM32F439/mpconfigboard.h7
-rw-r--r--ports/stm32/boards/STM32F4DISC/mpconfigboard.h7
-rw-r--r--ports/stm32/boards/STM32F769DISC/mpconfigboard.h7
-rw-r--r--ports/stm32/boards/STM32F769DISC/pins.csv2
-rw-r--r--ports/stm32/boards/STM32F7DISC/mpconfigboard.h7
-rw-r--r--ports/stm32/boards/STM32F7DISC/pins.csv2
-rw-r--r--ports/stm32/boards/STM32L476DISC/mpconfigboard.h5
-rwxr-xr-xports/stm32/boards/make-pins.py2
-rw-r--r--ports/stm32/can.c35
-rw-r--r--ports/stm32/mpconfigboard_common.h12
-rw-r--r--ports/stm32/pin_defs_stm32.h4
-rw-r--r--ports/stm32/stm32_it.c6
23 files changed, 126 insertions, 48 deletions
diff --git a/ports/stm32/boards/CERB40/mpconfigboard.h b/ports/stm32/boards/CERB40/mpconfigboard.h
index fdc7c0120..7c166922b 100644
--- a/ports/stm32/boards/CERB40/mpconfigboard.h
+++ b/ports/stm32/boards/CERB40/mpconfigboard.h
@@ -5,7 +5,6 @@
#define MICROPY_HW_ENABLE_RNG (1)
#define MICROPY_HW_ENABLE_RTC (1)
#define MICROPY_HW_ENABLE_DAC (1)
-#define MICROPY_HW_ENABLE_CAN (1)
#define MICROPY_HW_ENABLE_USB (1)
// HSE is 12MHz
@@ -50,6 +49,12 @@
#define MICROPY_HW_SPI3_MISO (pin_B4)
#define MICROPY_HW_SPI3_MOSI (pin_B5)
+// CAN busses
+#define MICROPY_HW_CAN1_TX (pin_B9)
+#define MICROPY_HW_CAN1_RX (pin_B8)
+#define MICROPY_HW_CAN2_TX (pin_B13)
+#define MICROPY_HW_CAN2_RX (pin_B12)
+
// The Cerb40 has No LEDs
// The Cerb40 has No SDCard
diff --git a/ports/stm32/boards/CERB40/pins.csv b/ports/stm32/boards/CERB40/pins.csv
index 411031e8f..da759f212 100644
--- a/ports/stm32/boards/CERB40/pins.csv
+++ b/ports/stm32/boards/CERB40/pins.csv
@@ -44,3 +44,5 @@ UART3_TX,PD8
UART3_RX,PD9
UART3_RTS,PD12
UART3_CTS,PD11
+CAN2_TX,PB13
+CAN2_RX,PB12
diff --git a/ports/stm32/boards/NUCLEO_F429ZI/mpconfigboard.h b/ports/stm32/boards/NUCLEO_F429ZI/mpconfigboard.h
index ae7f82225..17883a192 100644
--- a/ports/stm32/boards/NUCLEO_F429ZI/mpconfigboard.h
+++ b/ports/stm32/boards/NUCLEO_F429ZI/mpconfigboard.h
@@ -5,7 +5,6 @@
#define MICROPY_HW_HAS_FLASH (1)
#define MICROPY_HW_ENABLE_RNG (1)
#define MICROPY_HW_ENABLE_RTC (1)
-#define MICROPY_HW_ENABLE_CAN (1)
#define MICROPY_HW_ENABLE_USB (1)
// HSE is 8MHz
@@ -59,6 +58,12 @@
#define MICROPY_HW_SPI5_MISO (pin_F8)
#define MICROPY_HW_SPI5_MOSI (pin_F9)
+// CAN busses
+#define MICROPY_HW_CAN1_TX (pin_B9)
+#define MICROPY_HW_CAN1_RX (pin_B8)
+#define MICROPY_HW_CAN2_TX (pin_B13)
+#define MICROPY_HW_CAN2_RX (pin_B12)
+
// USRSW is pulled low. Pressing the button makes the input go high.
#define MICROPY_HW_USRSW_PIN (pin_C13)
#define MICROPY_HW_USRSW_PULL (GPIO_NOPULL)
diff --git a/ports/stm32/boards/NUCLEO_F746ZG/mpconfigboard.h b/ports/stm32/boards/NUCLEO_F746ZG/mpconfigboard.h
index 42beb4d9b..a9fbea576 100644
--- a/ports/stm32/boards/NUCLEO_F746ZG/mpconfigboard.h
+++ b/ports/stm32/boards/NUCLEO_F746ZG/mpconfigboard.h
@@ -11,7 +11,6 @@
#define MICROPY_HW_ENABLE_RNG (1)
#define MICROPY_HW_ENABLE_RTC (1)
#define MICROPY_HW_ENABLE_DAC (1)
-#define MICROPY_HW_ENABLE_CAN (1)
#define MICROPY_HW_ENABLE_USB (1)
// HSE is 8MHz
@@ -53,6 +52,12 @@
#define MICROPY_HW_SPI3_MISO (pin_B4)
#define MICROPY_HW_SPI3_MOSI (pin_B5)
+// CAN busses
+#define MICROPY_HW_CAN1_TX (pin_B9)
+#define MICROPY_HW_CAN1_RX (pin_B8)
+#define MICROPY_HW_CAN2_TX (pin_B13)
+#define MICROPY_HW_CAN2_RX (pin_B12)
+
// USRSW is pulled low. Pressing the button makes the input go high.
#define MICROPY_HW_USRSW_PIN (pin_C13)
#define MICROPY_HW_USRSW_PULL (GPIO_NOPULL)
diff --git a/ports/stm32/boards/NUCLEO_F767ZI/mpconfigboard.h b/ports/stm32/boards/NUCLEO_F767ZI/mpconfigboard.h
index 4f9d41f1b..7de4c3363 100644
--- a/ports/stm32/boards/NUCLEO_F767ZI/mpconfigboard.h
+++ b/ports/stm32/boards/NUCLEO_F767ZI/mpconfigboard.h
@@ -11,7 +11,6 @@
#define MICROPY_HW_ENABLE_RNG (1)
#define MICROPY_HW_ENABLE_RTC (1)
#define MICROPY_HW_ENABLE_DAC (1)
-#define MICROPY_HW_ENABLE_CAN (1)
#define MICROPY_HW_ENABLE_USB (1)
// HSE is 25MHz
@@ -53,6 +52,12 @@
#define MICROPY_HW_SPI3_MISO (pin_B4)
#define MICROPY_HW_SPI3_MOSI (pin_B5)
+// CAN busses
+#define MICROPY_HW_CAN1_TX (pin_B9)
+#define MICROPY_HW_CAN1_RX (pin_B8)
+#define MICROPY_HW_CAN2_TX (pin_B13)
+#define MICROPY_HW_CAN2_RX (pin_B12)
+
// USRSW is pulled low. Pressing the button makes the input go high.
#define MICROPY_HW_USRSW_PIN (pin_C13)
#define MICROPY_HW_USRSW_PULL (GPIO_NOPULL)
diff --git a/ports/stm32/boards/OLIMEX_E407/mpconfigboard.h b/ports/stm32/boards/OLIMEX_E407/mpconfigboard.h
index 1bdb25a9e..a56f6f79d 100644
--- a/ports/stm32/boards/OLIMEX_E407/mpconfigboard.h
+++ b/ports/stm32/boards/OLIMEX_E407/mpconfigboard.h
@@ -7,7 +7,6 @@
#define MICROPY_HW_ENABLE_RNG (1)
#define MICROPY_HW_ENABLE_RTC (1)
#define MICROPY_HW_ENABLE_DAC (1)
-#define MICROPY_HW_ENABLE_CAN (1)
#define MICROPY_HW_ENABLE_USB (1)
// HSE is 12MHz
@@ -53,6 +52,12 @@
#define MICROPY_HW_SPI2_MISO (pin_B14)
#define MICROPY_HW_SPI2_MOSI (pin_B15)
+// CAN busses
+#define MICROPY_HW_CAN1_TX (pin_B9)
+#define MICROPY_HW_CAN1_RX (pin_B8)
+#define MICROPY_HW_CAN2_TX (pin_B13)
+#define MICROPY_HW_CAN2_RX (pin_B12)
+
// USRSW is pulled low. Pressing the button makes the input go high.
#define MICROPY_HW_USRSW_PIN (pin_A0)
#define MICROPY_HW_USRSW_PULL (GPIO_NOPULL)
diff --git a/ports/stm32/boards/PYBV10/mpconfigboard.h b/ports/stm32/boards/PYBV10/mpconfigboard.h
index 5d158e6b1..3439f5a0f 100644
--- a/ports/stm32/boards/PYBV10/mpconfigboard.h
+++ b/ports/stm32/boards/PYBV10/mpconfigboard.h
@@ -10,7 +10,6 @@
#define MICROPY_HW_ENABLE_RTC (1)
#define MICROPY_HW_ENABLE_SERVO (1)
#define MICROPY_HW_ENABLE_DAC (1)
-#define MICROPY_HW_ENABLE_CAN (1)
#define MICROPY_HW_ENABLE_USB (1)
// HSE is 8MHz
@@ -66,8 +65,12 @@
#define MICROPY_HW_SPI2_MOSI (pin_B15) // Y8
// CAN busses
-#define MICROPY_HW_CAN1_NAME "YA" // CAN1 on RX,TX = Y3,Y4 = PB8,PB9
-#define MICROPY_HW_CAN2_NAME "YB" // CAN2 on RX,TX = Y5,Y6 = PB12,PB13
+#define MICROPY_HW_CAN1_NAME "YA"
+#define MICROPY_HW_CAN1_TX (pin_B9) // Y4
+#define MICROPY_HW_CAN1_RX (pin_B8) // Y3
+#define MICROPY_HW_CAN2_NAME "YB"
+#define MICROPY_HW_CAN2_TX (pin_B13) // Y6
+#define MICROPY_HW_CAN2_RX (pin_B12) // Y5
// USRSW has no pullup or pulldown, and pressing the switch makes the input go low
#define MICROPY_HW_USRSW_PIN (pin_B3)
diff --git a/ports/stm32/boards/PYBV11/mpconfigboard.h b/ports/stm32/boards/PYBV11/mpconfigboard.h
index 71ff52848..2c75d0e64 100644
--- a/ports/stm32/boards/PYBV11/mpconfigboard.h
+++ b/ports/stm32/boards/PYBV11/mpconfigboard.h
@@ -10,7 +10,6 @@
#define MICROPY_HW_ENABLE_RTC (1)
#define MICROPY_HW_ENABLE_SERVO (1)
#define MICROPY_HW_ENABLE_DAC (1)
-#define MICROPY_HW_ENABLE_CAN (1)
#define MICROPY_HW_ENABLE_USB (1)
// HSE is 12MHz
@@ -66,8 +65,12 @@
#define MICROPY_HW_SPI2_MOSI (pin_B15) // Y8
// CAN busses
-#define MICROPY_HW_CAN1_NAME "YA" // CAN1 on RX,TX = Y3,Y4 = PB8,PB9
-#define MICROPY_HW_CAN2_NAME "YB" // CAN2 on RX,TX = Y5,Y6 = PB12,PB13
+#define MICROPY_HW_CAN1_NAME "YA"
+#define MICROPY_HW_CAN1_TX (pin_B9) // Y4
+#define MICROPY_HW_CAN1_RX (pin_B8) // Y3
+#define MICROPY_HW_CAN2_NAME "YB"
+#define MICROPY_HW_CAN2_TX (pin_B13) // Y6
+#define MICROPY_HW_CAN2_RX (pin_B12) // Y5
// USRSW has no pullup or pulldown, and pressing the switch makes the input go low
#define MICROPY_HW_USRSW_PIN (pin_B3)
diff --git a/ports/stm32/boards/PYBV3/mpconfigboard.h b/ports/stm32/boards/PYBV3/mpconfigboard.h
index d2e7dbe20..3e457c5e2 100644
--- a/ports/stm32/boards/PYBV3/mpconfigboard.h
+++ b/ports/stm32/boards/PYBV3/mpconfigboard.h
@@ -9,7 +9,6 @@
#define MICROPY_HW_ENABLE_RTC (1)
#define MICROPY_HW_ENABLE_SERVO (1)
#define MICROPY_HW_ENABLE_DAC (1)
-#define MICROPY_HW_ENABLE_CAN (1)
#define MICROPY_HW_ENABLE_USB (1)
// HSE is 8MHz
@@ -57,6 +56,12 @@
#define MICROPY_HW_SPI2_MISO (pin_B14) // Y7
#define MICROPY_HW_SPI2_MOSI (pin_B15) // Y8
+// CAN busses
+#define MICROPY_HW_CAN1_TX (pin_B9) // Y4
+#define MICROPY_HW_CAN1_RX (pin_B8) // Y3
+#define MICROPY_HW_CAN2_TX (pin_B13) // Y6
+#define MICROPY_HW_CAN2_RX (pin_B12) // Y5
+
// USRSW has no pullup or pulldown, and pressing the switch makes the input go low
#define MICROPY_HW_USRSW_PIN (pin_A13)
#define MICROPY_HW_USRSW_PULL (GPIO_PULLUP)
diff --git a/ports/stm32/boards/PYBV4/mpconfigboard.h b/ports/stm32/boards/PYBV4/mpconfigboard.h
index c6d9ad9ac..8c05644f6 100644
--- a/ports/stm32/boards/PYBV4/mpconfigboard.h
+++ b/ports/stm32/boards/PYBV4/mpconfigboard.h
@@ -10,7 +10,6 @@
#define MICROPY_HW_ENABLE_RTC (1)
#define MICROPY_HW_ENABLE_SERVO (1)
#define MICROPY_HW_ENABLE_DAC (1)
-#define MICROPY_HW_ENABLE_CAN (1)
#define MICROPY_HW_ENABLE_USB (1)
// HSE is 8MHz
@@ -63,8 +62,12 @@
#define MICROPY_HW_SPI2_MOSI (pin_B15) // Y8
// CAN busses
-#define MICROPY_HW_CAN1_NAME "YA" // CAN1 on RX,TX = Y3,Y4 = PB8,PB9
-#define MICROPY_HW_CAN2_NAME "YB" // CAN2 on RX,TX = Y5,Y6 = PB12,PB13
+#define MICROPY_HW_CAN1_NAME "YA"
+#define MICROPY_HW_CAN1_TX (pin_B9) // Y4
+#define MICROPY_HW_CAN1_RX (pin_B8) // Y3
+#define MICROPY_HW_CAN2_NAME "YB"
+#define MICROPY_HW_CAN2_TX (pin_B13) // Y6
+#define MICROPY_HW_CAN2_RX (pin_B12) // Y5
// USRSW has no pullup or pulldown, and pressing the switch makes the input go low
#define MICROPY_HW_USRSW_PIN (pin_B3)
diff --git a/ports/stm32/boards/STM32F429DISC/mpconfigboard.h b/ports/stm32/boards/STM32F429DISC/mpconfigboard.h
index 01713f7f8..be25d2e77 100644
--- a/ports/stm32/boards/STM32F429DISC/mpconfigboard.h
+++ b/ports/stm32/boards/STM32F429DISC/mpconfigboard.h
@@ -5,7 +5,6 @@
#define MICROPY_HW_HAS_FLASH (1)
#define MICROPY_HW_ENABLE_RNG (1)
#define MICROPY_HW_ENABLE_RTC (1)
-#define MICROPY_HW_ENABLE_CAN (1)
#define MICROPY_HW_ENABLE_USB (1)
// HSE is 8MHz
@@ -50,6 +49,12 @@
//#define MICROPY_HW_SPI6_MISO (pin_G12)
//#define MICROPY_HW_SPI6_MOSI (pin_G14)
+// CAN busses
+#define MICROPY_HW_CAN1_TX (pin_B9)
+#define MICROPY_HW_CAN1_RX (pin_B8)
+#define MICROPY_HW_CAN2_TX (pin_B13)
+#define MICROPY_HW_CAN2_RX (pin_B12)
+
// USRSW is pulled low. Pressing the button makes the input go high.
#define MICROPY_HW_USRSW_PIN (pin_A0)
#define MICROPY_HW_USRSW_PULL (GPIO_NOPULL)
diff --git a/ports/stm32/boards/STM32F439/mpconfigboard.h b/ports/stm32/boards/STM32F439/mpconfigboard.h
index 66bfcf2ec..4ac5b3213 100644
--- a/ports/stm32/boards/STM32F439/mpconfigboard.h
+++ b/ports/stm32/boards/STM32F439/mpconfigboard.h
@@ -6,7 +6,6 @@
#define MICROPY_HW_ENABLE_RNG (1)
#define MICROPY_HW_ENABLE_RTC (1)
#define MICROPY_HW_ENABLE_DAC (1)
-#define MICROPY_HW_ENABLE_CAN (1)
#define MICROPY_HW_ENABLE_USB (1)
// SD card detect switch
@@ -75,6 +74,12 @@
//#define MICROPY_HW_SPI6_MISO (pin_G12)
//#define MICROPY_HW_SPI6_MOSI (pin_G14)
+// CAN busses
+#define MICROPY_HW_CAN1_TX (pin_B9)
+#define MICROPY_HW_CAN1_RX (pin_B8)
+#define MICROPY_HW_CAN2_TX (pin_B13)
+#define MICROPY_HW_CAN2_RX (pin_B12)
+
// USRSW is pulled low. Pressing the button makes the input go high.
#define MICROPY_HW_USRSW_PIN (pin_A0)
#define MICROPY_HW_USRSW_PULL (GPIO_NOPULL)
diff --git a/ports/stm32/boards/STM32F4DISC/mpconfigboard.h b/ports/stm32/boards/STM32F4DISC/mpconfigboard.h
index 66ef830bf..3e4c8261c 100644
--- a/ports/stm32/boards/STM32F4DISC/mpconfigboard.h
+++ b/ports/stm32/boards/STM32F4DISC/mpconfigboard.h
@@ -6,7 +6,6 @@
#define MICROPY_HW_ENABLE_RNG (1)
#define MICROPY_HW_ENABLE_RTC (1)
#define MICROPY_HW_ENABLE_DAC (1)
-#define MICROPY_HW_ENABLE_CAN (1)
#define MICROPY_HW_ENABLE_USB (1)
// HSE is 8MHz
@@ -60,6 +59,12 @@
#define MICROPY_HW_SPI2_MISO (pin_B14)
#define MICROPY_HW_SPI2_MOSI (pin_B15)
+// CAN busses
+#define MICROPY_HW_CAN1_TX (pin_B9)
+#define MICROPY_HW_CAN1_RX (pin_B8)
+#define MICROPY_HW_CAN2_TX (pin_B13)
+#define MICROPY_HW_CAN2_RX (pin_B12)
+
// USRSW is pulled low. Pressing the button makes the input go high.
#define MICROPY_HW_USRSW_PIN (pin_A0)
#define MICROPY_HW_USRSW_PULL (GPIO_NOPULL)
diff --git a/ports/stm32/boards/STM32F769DISC/mpconfigboard.h b/ports/stm32/boards/STM32F769DISC/mpconfigboard.h
index 95201501b..8b29e5773 100644
--- a/ports/stm32/boards/STM32F769DISC/mpconfigboard.h
+++ b/ports/stm32/boards/STM32F769DISC/mpconfigboard.h
@@ -10,7 +10,6 @@
#define MICROPY_HW_HAS_SDCARD (1)
#define MICROPY_HW_ENABLE_RNG (1)
#define MICROPY_HW_ENABLE_RTC (1)
-#define MICROPY_HW_ENABLE_CAN (1)
#define MICROPY_HW_ENABLE_USB (1)
// HSE is 25MHz
@@ -44,6 +43,12 @@
#define MICROPY_HW_SPI2_MISO (pin_B14)
#define MICROPY_HW_SPI2_MOSI (pin_B15)
+// CAN busses
+#define MICROPY_HW_CAN1_TX (pin_B9)
+#define MICROPY_HW_CAN1_RX (pin_B8)
+#define MICROPY_HW_CAN2_TX (pin_B13)
+#define MICROPY_HW_CAN2_RX (pin_B12)
+
// USRSW is pulled low. Pressing the button makes the input go high.
#define MICROPY_HW_USRSW_PIN (pin_A0)
#define MICROPY_HW_USRSW_PULL (GPIO_NOPULL)
diff --git a/ports/stm32/boards/STM32F769DISC/pins.csv b/ports/stm32/boards/STM32F769DISC/pins.csv
index dcc2df208..e68ed9536 100644
--- a/ports/stm32/boards/STM32F769DISC/pins.csv
+++ b/ports/stm32/boards/STM32F769DISC/pins.csv
@@ -55,3 +55,5 @@ UART1_TX,PA9
UART1_RX,PA10
UART5_TX,PC12
UART5_RX,PD2
+CAN2_TX,PB13
+CAN2_RX,PB12
diff --git a/ports/stm32/boards/STM32F7DISC/mpconfigboard.h b/ports/stm32/boards/STM32F7DISC/mpconfigboard.h
index 9fce1deeb..7b506a305 100644
--- a/ports/stm32/boards/STM32F7DISC/mpconfigboard.h
+++ b/ports/stm32/boards/STM32F7DISC/mpconfigboard.h
@@ -6,7 +6,6 @@
#define MICROPY_HW_HAS_SDCARD (1)
#define MICROPY_HW_ENABLE_RNG (1)
#define MICROPY_HW_ENABLE_RTC (1)
-#define MICROPY_HW_ENABLE_CAN (1)
#define MICROPY_HW_ENABLE_USB (1)
#define MICROPY_BOARD_EARLY_INIT STM32F7DISC_board_early_init
@@ -50,6 +49,12 @@ void STM32F7DISC_board_early_init(void);
#define MICROPY_HW_SPI2_MISO (pin_B14)
#define MICROPY_HW_SPI2_MOSI (pin_B15)
+// CAN busses
+#define MICROPY_HW_CAN1_TX (pin_B9)
+#define MICROPY_HW_CAN1_RX (pin_B8)
+#define MICROPY_HW_CAN2_TX (pin_B13)
+#define MICROPY_HW_CAN2_RX (pin_B12)
+
// USRSW is pulled low. Pressing the button makes the input go high.
#define MICROPY_HW_USRSW_PIN (pin_I11)
#define MICROPY_HW_USRSW_PULL (GPIO_NOPULL)
diff --git a/ports/stm32/boards/STM32F7DISC/pins.csv b/ports/stm32/boards/STM32F7DISC/pins.csv
index 1aa8a9b3a..8b49003f7 100644
--- a/ports/stm32/boards/STM32F7DISC/pins.csv
+++ b/ports/stm32/boards/STM32F7DISC/pins.csv
@@ -51,3 +51,5 @@ USB_DM,PA11
USB_DP,PA12
VCP_TX,PA9
VCP_RX,PB7
+CAN_TX,PB13
+CAN_RX,PB12
diff --git a/ports/stm32/boards/STM32L476DISC/mpconfigboard.h b/ports/stm32/boards/STM32L476DISC/mpconfigboard.h
index 3d8b74e4a..a35dee118 100644
--- a/ports/stm32/boards/STM32L476DISC/mpconfigboard.h
+++ b/ports/stm32/boards/STM32L476DISC/mpconfigboard.h
@@ -9,7 +9,6 @@ void STM32L476DISC_board_early_init(void);
#define MICROPY_HW_HAS_FLASH (1)
#define MICROPY_HW_ENABLE_RNG (1)
#define MICROPY_HW_ENABLE_RTC (1)
-#define MICROPY_HW_ENABLE_CAN (1)
#define MICROPY_HW_ENABLE_USB (1)
// use external SPI flash for storage
@@ -58,6 +57,10 @@ extern struct _spi_bdev_t spi_bdev;
#define MICROPY_HW_SPI2_MISO (pin_D3)
#define MICROPY_HW_SPI2_MOSI (pin_D4)
+// CAN busses
+#define MICROPY_HW_CAN1_TX (pin_B9)
+#define MICROPY_HW_CAN1_RX (pin_B8)
+
// Joystick is pulled low. Pressing the button makes the input go high.
#define MICROPY_HW_USRSW_PIN (pin_A0)
#define MICROPY_HW_USRSW_PULL (GPIO_NOPULL)
diff --git a/ports/stm32/boards/make-pins.py b/ports/stm32/boards/make-pins.py
index c9f6516f1..70f154fde 100755
--- a/ports/stm32/boards/make-pins.py
+++ b/ports/stm32/boards/make-pins.py
@@ -16,6 +16,7 @@ SUPPORTED_FN = {
'UART' : ['RX', 'TX', 'CTS', 'RTS'],
'SPI' : ['NSS', 'SCK', 'MISO', 'MOSI'],
'SDMMC' : ['CK', 'CMD', 'D0', 'D1', 'D2', 'D3'],
+ 'CAN' : ['TX', 'RX'],
}
CONDITIONAL_VAR = {
@@ -25,6 +26,7 @@ CONDITIONAL_VAR = {
'UART' : 'MICROPY_HW_UART{num}_TX',
'USART' : 'MICROPY_HW_UART{num}_TX',
'SDMMC' : 'MICROPY_HW_SDMMC{num}_CK',
+ 'CAN' : 'MICROPY_HW_CAN{num}_TX',
}
def parse_port_pin(name_str):
diff --git a/ports/stm32/can.c b/ports/stm32/can.c
index bc4f1092c..ae8e8e27e 100644
--- a/ports/stm32/can.c
+++ b/ports/stm32/can.c
@@ -104,31 +104,26 @@ STATIC uint8_t can2_start_bank = 14;
// assumes Init parameters have been set up correctly
STATIC bool can_init(pyb_can_obj_t *can_obj) {
CAN_TypeDef *CANx = NULL;
-
- uint32_t GPIO_Pin = 0;
- uint8_t GPIO_AF_CANx = 0;
- GPIO_TypeDef* GPIO_Port = NULL;
uint32_t sce_irq = 0;
+ const pin_obj_t *pins[2];
switch (can_obj->can_id) {
- // CAN1 is on RX,TX = Y3,Y4 = PB9,PB9
+ #if defined(MICROPY_HW_CAN1_TX)
case PYB_CAN_1:
CANx = CAN1;
- GPIO_AF_CANx = GPIO_AF9_CAN1;
- GPIO_Port = GPIOB;
- GPIO_Pin = GPIO_PIN_8 | GPIO_PIN_9;
sce_irq = CAN1_SCE_IRQn;
+ pins[0] = MICROPY_HW_CAN1_TX;
+ pins[1] = MICROPY_HW_CAN1_RX;
__CAN1_CLK_ENABLE();
break;
+ #endif
- #if defined(CAN2)
- // CAN2 is on RX,TX = Y5,Y6 = PB12,PB13
+ #if defined(MICROPY_HW_CAN2_TX)
case PYB_CAN_2:
CANx = CAN2;
- GPIO_AF_CANx = GPIO_AF9_CAN2;
- GPIO_Port = GPIOB;
- GPIO_Pin = GPIO_PIN_12 | GPIO_PIN_13;
sce_irq = CAN2_SCE_IRQn;
+ pins[0] = MICROPY_HW_CAN2_TX;
+ pins[1] = MICROPY_HW_CAN2_RX;
__CAN1_CLK_ENABLE(); // CAN2 is a "slave" and needs CAN1 enabled as well
__CAN2_CLK_ENABLE();
break;
@@ -139,13 +134,13 @@ STATIC bool can_init(pyb_can_obj_t *can_obj) {
}
// init GPIO
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.Pin = GPIO_Pin;
- GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStructure.Pull = GPIO_PULLUP;
- GPIO_InitStructure.Alternate = GPIO_AF_CANx;
- HAL_GPIO_Init(GPIO_Port, &GPIO_InitStructure);
+ uint32_t mode = MP_HAL_PIN_MODE_ALT;
+ uint32_t pull = MP_HAL_PIN_PULL_UP;
+ for (int i = 0; i < 2; i++) {
+ if (!mp_hal_pin_config_alt(pins[i], mode, pull, AF_FN_CAN, can_obj->can_id)) {
+ return false;
+ }
+ }
// init CANx
can_obj->can.Instance = CANx;
diff --git a/ports/stm32/mpconfigboard_common.h b/ports/stm32/mpconfigboard_common.h
index d4b812331..5f3ac164d 100644
--- a/ports/stm32/mpconfigboard_common.h
+++ b/ports/stm32/mpconfigboard_common.h
@@ -57,11 +57,6 @@
#define MICROPY_HW_ENABLE_DAC (0)
#endif
-// Whether to enable the CAN peripheral, exposed as pyb.CAN
-#ifndef MICROPY_HW_ENABLE_CAN
-#define MICROPY_HW_ENABLE_CAN (0)
-#endif
-
// Whether to enable USB support
#ifndef MICROPY_HW_ENABLE_USB
#define MICROPY_HW_ENABLE_USB (0)
@@ -156,6 +151,13 @@
#define MICROPY_HW_ENABLE_HW_I2C (0)
#endif
+// Enable CAN if there are any peripherals defined
+#if defined(MICROPY_HW_CAN1_TX) || defined(MICROPY_HW_CAN2_TX)
+#define MICROPY_HW_ENABLE_CAN (1)
+#else
+#define MICROPY_HW_ENABLE_CAN (0)
+#endif
+
// Pin definition header file
#define MICROPY_PIN_DEFS_PORT_H "pin_defs_stm32.h"
diff --git a/ports/stm32/pin_defs_stm32.h b/ports/stm32/pin_defs_stm32.h
index feaf56ae9..5c5c6be69 100644
--- a/ports/stm32/pin_defs_stm32.h
+++ b/ports/stm32/pin_defs_stm32.h
@@ -49,6 +49,7 @@ enum {
AF_FN_SPI,
AF_FN_I2S,
AF_FN_SDMMC,
+ AF_FN_CAN,
};
enum {
@@ -93,6 +94,9 @@ enum {
AF_PIN_TYPE_SDMMC_D1,
AF_PIN_TYPE_SDMMC_D2,
AF_PIN_TYPE_SDMMC_D3,
+
+ AF_PIN_TYPE_CAN_TX = 0,
+ AF_PIN_TYPE_CAN_RX,
};
// The HAL uses a slightly different naming than we chose, so we provide
diff --git a/ports/stm32/stm32_it.c b/ports/stm32/stm32_it.c
index 987ace69a..03321a1a9 100644
--- a/ports/stm32/stm32_it.c
+++ b/ports/stm32/stm32_it.c
@@ -736,7 +736,7 @@ void UART8_IRQHandler(void) {
}
#endif
-#if MICROPY_HW_ENABLE_CAN
+#if defined(MICROPY_HW_CAN1_TX)
void CAN1_RX0_IRQHandler(void) {
IRQ_ENTER(CAN1_RX0_IRQn);
can_rx_irq_handler(PYB_CAN_1, CAN_FIFO0);
@@ -754,7 +754,9 @@ void CAN1_SCE_IRQHandler(void) {
can_sce_irq_handler(PYB_CAN_1);
IRQ_EXIT(CAN1_SCE_IRQn);
}
+#endif
+#if defined(MICROPY_HW_CAN2_TX)
void CAN2_RX0_IRQHandler(void) {
IRQ_ENTER(CAN2_RX0_IRQn);
can_rx_irq_handler(PYB_CAN_2, CAN_FIFO0);
@@ -772,7 +774,7 @@ void CAN2_SCE_IRQHandler(void) {
can_sce_irq_handler(PYB_CAN_2);
IRQ_EXIT(CAN2_SCE_IRQn);
}
-#endif // MICROPY_HW_ENABLE_CAN
+#endif
#if defined(MICROPY_HW_I2C1_SCL)
void I2C1_EV_IRQHandler(void) {