diff --git a/stmhal/boards/HYDRABUS/mpconfigboard.h b/stmhal/boards/HYDRABUS/mpconfigboard.h
index 18d1df19db4c3df63dd811f32ff97258139047ed..9a3f054520d675c166cf71dc7be6a5fa3776e122 100644
--- a/stmhal/boards/HYDRABUS/mpconfigboard.h
+++ b/stmhal/boards/HYDRABUS/mpconfigboard.h
@@ -16,6 +16,7 @@
 #define MICROPY_HW_ENABLE_I2C1      (1)
 #define MICROPY_HW_ENABLE_SPI1      (1)
 #define MICROPY_HW_ENABLE_SPI3      (1)
+#define MICROPY_HW_ENABLE_CAN       (0)
 
 // USRSW/UBTN (Needs Jumper UBTN) is pulled low. Pressing the button makes the input go high.
 #define MICROPY_HW_USRSW_PIN        (pin_A0)
diff --git a/stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h b/stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h
index c32e0d29e5922aaec1e7d5e3029ce60a80da8f92..6de5a72c055f602164814c77394a6d27f93052d8 100644
--- a/stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h
+++ b/stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h
@@ -20,6 +20,7 @@
 #define MICROPY_HW_ENABLE_I2C1      (0)
 #define MICROPY_HW_ENABLE_SPI1      (0)
 #define MICROPY_HW_ENABLE_SPI3      (0)
+#define MICROPY_HW_ENABLE_CAN       (0)
 
 // USRSW is pulled low. Pressing the button makes the input go high.
 #define MICROPY_HW_USRSW_PIN        (pin_B11)
diff --git a/stmhal/boards/PYBV10/mpconfigboard.h b/stmhal/boards/PYBV10/mpconfigboard.h
index 977fabe4021a60aa3546a0081ddd5c17ddc74a48..d4645e84fb47aa560e2c68713e960885c34dc63b 100644
--- a/stmhal/boards/PYBV10/mpconfigboard.h
+++ b/stmhal/boards/PYBV10/mpconfigboard.h
@@ -17,6 +17,7 @@
 #define MICROPY_HW_ENABLE_I2C1      (1)
 #define MICROPY_HW_ENABLE_SPI1      (1)
 #define MICROPY_HW_ENABLE_SPI3      (0)
+#define MICROPY_HW_ENABLE_CAN       (1)
 
 // 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/stmhal/boards/PYBV3/mpconfigboard.h b/stmhal/boards/PYBV3/mpconfigboard.h
index 048812748d69a4f8be109e79ddc1f1499ef314e9..fdb45f4652f94cafd6ebf0d17ece7e3ad9865ddb 100644
--- a/stmhal/boards/PYBV3/mpconfigboard.h
+++ b/stmhal/boards/PYBV3/mpconfigboard.h
@@ -16,6 +16,7 @@
 #define MICROPY_HW_ENABLE_I2C1      (1)
 #define MICROPY_HW_ENABLE_SPI1      (1)
 #define MICROPY_HW_ENABLE_SPI3      (0)
+#define MICROPY_HW_ENABLE_CAN       (1)
 
 // USRSW has no pullup or pulldown, and pressing the switch makes the input go low
 #define MICROPY_HW_USRSW_PIN        (pin_A13)
diff --git a/stmhal/boards/PYBV4/mpconfigboard.h b/stmhal/boards/PYBV4/mpconfigboard.h
index 5bb7f03b2fd10e4f2d74bc869ccfeb6046f7e273..4355d6531f90ea45786b24c1475abd2ef5f5918c 100644
--- a/stmhal/boards/PYBV4/mpconfigboard.h
+++ b/stmhal/boards/PYBV4/mpconfigboard.h
@@ -16,6 +16,7 @@
 #define MICROPY_HW_ENABLE_I2C1      (1)
 #define MICROPY_HW_ENABLE_SPI1      (1)
 #define MICROPY_HW_ENABLE_SPI3      (0)
+#define MICROPY_HW_ENABLE_CAN       (1)
 
 // 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/stmhal/boards/STM32F4DISC/mpconfigboard.h b/stmhal/boards/STM32F4DISC/mpconfigboard.h
index 2e276947752fa910d794efc445ed2fa9c408bef9..9db330bff3ac96c49ce89451306f627de16f5943 100644
--- a/stmhal/boards/STM32F4DISC/mpconfigboard.h
+++ b/stmhal/boards/STM32F4DISC/mpconfigboard.h
@@ -16,6 +16,7 @@
 #define MICROPY_HW_ENABLE_I2C1      (1)
 #define MICROPY_HW_ENABLE_SPI1      (1)
 #define MICROPY_HW_ENABLE_SPI3      (0)
+#define MICROPY_HW_ENABLE_CAN       (1)
 
 // USRSW is pulled low. Pressing the button makes the input go high.
 #define MICROPY_HW_USRSW_PIN        (pin_A0)
diff --git a/stmhal/can.c b/stmhal/can.c
index 82324a63869631b74dcfed7adf55d0d464d06eb1..920a4ad0b4ee08ac906da59f06e99622f3f06ecf 100644
--- a/stmhal/can.c
+++ b/stmhal/can.c
@@ -42,6 +42,8 @@
 #include "can.h"
 #include "pybioctl.h"
 
+#if MICROPY_HW_ENABLE_CAN
+
 /// \moduleref pyb
 /// \class CAN - controller area network communication bus
 ///
@@ -451,3 +453,5 @@ const mp_obj_type_t pyb_can_type = {
     .stream_p = &can_stream_p,
     .locals_dict = (mp_obj_t)&pyb_can_locals_dict,
 };
+
+#endif // MICROPY_HW_ENABLE_CAN
diff --git a/stmhal/modpyb.c b/stmhal/modpyb.c
index ddfe2c30a8f94f380c5ed9997726ea6de19aea90..8252b057a03db37fe7f1ce431ede173a1a80d99e 100644
--- a/stmhal/modpyb.c
+++ b/stmhal/modpyb.c
@@ -523,7 +523,9 @@ STATIC const mp_map_elem_t pyb_module_globals_table[] = {
     { MP_OBJ_NEW_QSTR(MP_QSTR_I2C), (mp_obj_t)&pyb_i2c_type },
     { MP_OBJ_NEW_QSTR(MP_QSTR_SPI), (mp_obj_t)&pyb_spi_type },
     { MP_OBJ_NEW_QSTR(MP_QSTR_UART), (mp_obj_t)&pyb_uart_type },
+#if MICROPY_HW_ENABLE_CAN
     { MP_OBJ_NEW_QSTR(MP_QSTR_CAN), (mp_obj_t)&pyb_can_type },
+#endif
 
     { MP_OBJ_NEW_QSTR(MP_QSTR_ADC), (mp_obj_t)&pyb_adc_type },
     { MP_OBJ_NEW_QSTR(MP_QSTR_ADCAll), (mp_obj_t)&pyb_adc_all_type },