1 #define MICROPY_HW_BOARD_NAME       "Adafruit Feather STM32F405"
2 #define MICROPY_HW_MCU_NAME         "STM32F405RG"
3 
4 #define MICROPY_HW_HAS_SWITCH       (0)
5 #define MICROPY_HW_HAS_FLASH        (1)
6 #define MICROPY_HW_HAS_MMA7660      (0)
7 #define MICROPY_HW_HAS_LCD          (0)
8 #define MICROPY_HW_ENABLE_RNG       (1)
9 #define MICROPY_HW_ENABLE_RTC       (1)
10 #define MICROPY_HW_ENABLE_SERVO     (1)
11 #define MICROPY_HW_ENABLE_DAC       (1)
12 #define MICROPY_HW_ENABLE_USB       (1)
13 #define MICROPY_HW_ENABLE_SDCARD    (1)
14 
15 // HSE is 12MHz
16 #define MICROPY_HW_CLK_PLLM (12)
17 #define MICROPY_HW_CLK_PLLN (336)
18 #define MICROPY_HW_CLK_PLLP (RCC_PLLP_DIV2)
19 #define MICROPY_HW_CLK_PLLQ (7)
20 #define MICROPY_HW_CLK_LAST_FREQ (1)
21 
22 // The Feather has a 32kHz crystal for the RTC
23 #define MICROPY_HW_RTC_USE_LSE      (1)
24 #define MICROPY_HW_RTC_USE_US       (0)
25 #define MICROPY_HW_RTC_USE_CALOUT   (1)
26 
27 // UART config
28 #define MICROPY_HW_UART3_NAME   "UART3"    // on RX / TX
29 #define MICROPY_HW_UART3_TX     (pin_B10)  // TX
30 #define MICROPY_HW_UART3_RX     (pin_B11)  // RX
31 #define MICROPY_HW_UART3_RTS    (pin_B14)  // MISO
32 #define MICROPY_HW_UART3_CTS    (pin_B13)  // SCK
33 
34 #define MICROPY_HW_UART2_NAME   "UART2"   // on SDA/SCL
35 #define MICROPY_HW_UART2_TX     (pin_B6)  // SCL
36 #define MICROPY_HW_UART2_RX     (pin_B7)  // SDA
37 
38 #define MICROPY_HW_UART6_NAME   "UART6"   // on D5/D6
39 #define MICROPY_HW_UART6_TX     (pin_C6)  // D6
40 #define MICROPY_HW_UART6_RX     (pin_C7)  // D5
41 
42 // I2C buses
43 #define MICROPY_HW_I2C1_NAME "I2C1"
44 #define MICROPY_HW_I2C1_SCL (pin_B6)  // SCL
45 #define MICROPY_HW_I2C1_SDA (pin_B7)  // SDA
46 #define MICROPY_HW_I2C2_NAME "I2C2"
47 #define MICROPY_HW_I2C2_SCL (pin_B10)  // TX
48 #define MICROPY_HW_I2C2_SDA (pin_B11)  // RX
49 
50 // SPI buses
51 #define MICROPY_HW_SPI1_NAME "SPIFLASH"
52 #define MICROPY_HW_SPI1_NSS  (pin_A15) // FLASH CS
53 #define MICROPY_HW_SPI1_SCK  (pin_B3) // FLASH CLK
54 #define MICROPY_HW_SPI1_MISO (pin_B4) // FLASH MISO
55 #define MICROPY_HW_SPI1_MOSI (pin_B5) // FLASH MOSI
56 #define MICROPY_HW_SPI2_NAME "SPI1"
57 #define MICROPY_HW_SPI2_NSS  (pin_B12) // SD DETECT
58 #define MICROPY_HW_SPI2_SCK  (pin_B13) // SCK
59 #define MICROPY_HW_SPI2_MISO (pin_B14) // MISO
60 #define MICROPY_HW_SPI2_MOSI (pin_B15) // MOSI
61 
62 // CAN buses
63 #define MICROPY_HW_CAN1_NAME "CAN1"
64 #define MICROPY_HW_CAN1_TX   (pin_B9) // D10
65 #define MICROPY_HW_CAN1_RX   (pin_B8) // D9
66 
67 // The Feather has 1 LED
68 #define MICROPY_HW_LED1             (pin_C1) // red
69 #define MICROPY_HW_LED_ON(pin)      (mp_hal_pin_high(pin))
70 #define MICROPY_HW_LED_OFF(pin)     (mp_hal_pin_low(pin))
71 
72 // SD card detect switch
73 #define MICROPY_HW_SDCARD_DETECT_PIN        (pin_B12)
74 #define MICROPY_HW_SDCARD_DETECT_PULL       (GPIO_PULLUP)
75 #define MICROPY_HW_SDCARD_DETECT_PRESENT    (GPIO_PIN_RESET)
76 
77 // USB config
78 #define MICROPY_HW_USB_FS              (1)
79 #define MICROPY_HW_USB_VBUS_DETECT_PIN (pin_A9)
80 #define MICROPY_HW_USB_OTG_ID_PIN      (pin_A10)
81 
82 // Bootloader configuration (only needed if Mboot is used)
83 #define MBOOT_I2C_PERIPH_ID 1
84 #define MBOOT_I2C_SCL (pin_B8)
85 #define MBOOT_I2C_SDA (pin_B9)
86 #define MBOOT_I2C_ALTFUNC (4)
87