1 #define MICROPY_HW_BOARD_NAME       "PYBv1.1"
2 #define MICROPY_HW_MCU_NAME         "STM32F405RG"
3 
4 #define MICROPY_HW_HAS_SWITCH       (1)
5 #define MICROPY_HW_HAS_FLASH        (1)
6 #define MICROPY_HW_HAS_MMA7660      (1)
7 #define MICROPY_HW_HAS_LCD          (1)
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 #define MICROPY_HW_ENABLE_I2S       (1)
15 
16 // HSE is 12MHz
17 #define MICROPY_HW_CLK_PLLM (12)
18 #define MICROPY_HW_CLK_PLLN (336)
19 #define MICROPY_HW_CLK_PLLP (RCC_PLLP_DIV2)
20 #define MICROPY_HW_CLK_PLLQ (7)
21 #define MICROPY_HW_CLK_LAST_FREQ (1)
22 
23 // The pyboard has a 32kHz crystal for the RTC
24 #define MICROPY_HW_RTC_USE_LSE      (1)
25 #define MICROPY_HW_RTC_USE_US       (0)
26 #define MICROPY_HW_RTC_USE_CALOUT   (1)
27 
28 // UART config
29 #define MICROPY_HW_UART1_NAME   "XB"
30 #define MICROPY_HW_UART1_TX     (pin_B6)
31 #define MICROPY_HW_UART1_RX     (pin_B7)
32 #define MICROPY_HW_UART2_TX     (pin_A2)
33 #define MICROPY_HW_UART2_RX     (pin_A3)
34 #define MICROPY_HW_UART2_RTS    (pin_A1)
35 #define MICROPY_HW_UART2_CTS    (pin_A0)
36 #define MICROPY_HW_UART3_NAME   "YB"
37 #define MICROPY_HW_UART3_TX     (pin_B10)
38 #define MICROPY_HW_UART3_RX     (pin_B11)
39 #define MICROPY_HW_UART3_RTS    (pin_B14)
40 #define MICROPY_HW_UART3_CTS    (pin_B13)
41 #define MICROPY_HW_UART4_NAME   "XA"
42 #define MICROPY_HW_UART4_TX     (pin_A0)
43 #define MICROPY_HW_UART4_RX     (pin_A1)
44 #define MICROPY_HW_UART6_NAME   "YA"
45 #define MICROPY_HW_UART6_TX     (pin_C6)
46 #define MICROPY_HW_UART6_RX     (pin_C7)
47 
48 // I2C buses
49 #define MICROPY_HW_I2C1_NAME "X"
50 #define MICROPY_HW_I2C1_SCL (pin_B6)
51 #define MICROPY_HW_I2C1_SDA (pin_B7)
52 #define MICROPY_HW_I2C2_NAME "Y"
53 #define MICROPY_HW_I2C2_SCL (pin_B10)
54 #define MICROPY_HW_I2C2_SDA (pin_B11)
55 
56 // SPI buses
57 #define MICROPY_HW_SPI1_NAME "X"
58 #define MICROPY_HW_SPI1_NSS  (pin_A4) // X5
59 #define MICROPY_HW_SPI1_SCK  (pin_A5) // X6
60 #define MICROPY_HW_SPI1_MISO (pin_A6) // X7
61 #define MICROPY_HW_SPI1_MOSI (pin_A7) // X8
62 #define MICROPY_HW_SPI2_NAME "Y"
63 #define MICROPY_HW_SPI2_NSS  (pin_B12) // Y5
64 #define MICROPY_HW_SPI2_SCK  (pin_B13) // Y6
65 #define MICROPY_HW_SPI2_MISO (pin_B14) // Y7
66 #define MICROPY_HW_SPI2_MOSI (pin_B15) // Y8
67 
68 // I2S buses
69 #define MICROPY_HW_I2S2      (1)
70 
71 // CAN buses
72 #define MICROPY_HW_CAN1_NAME "YA"
73 #define MICROPY_HW_CAN1_TX   (pin_B9) // Y4
74 #define MICROPY_HW_CAN1_RX   (pin_B8) // Y3
75 #define MICROPY_HW_CAN2_NAME "YB"
76 #define MICROPY_HW_CAN2_TX   (pin_B13) // Y6
77 #define MICROPY_HW_CAN2_RX   (pin_B12) // Y5
78 
79 // USRSW has no pullup or pulldown, and pressing the switch makes the input go low
80 #define MICROPY_HW_USRSW_PIN        (pin_B3)
81 #define MICROPY_HW_USRSW_PULL       (GPIO_PULLUP)
82 #define MICROPY_HW_USRSW_EXTI_MODE  (GPIO_MODE_IT_FALLING)
83 #define MICROPY_HW_USRSW_PRESSED    (0)
84 
85 // The pyboard has 4 LEDs
86 #define MICROPY_HW_LED1             (pin_A13) // red
87 #define MICROPY_HW_LED2             (pin_A14) // green
88 #define MICROPY_HW_LED3             (pin_A15) // yellow
89 #define MICROPY_HW_LED4             (pin_B4)  // blue
90 #define MICROPY_HW_LED3_PWM         { TIM2, 2, TIM_CHANNEL_1, GPIO_AF1_TIM2 }
91 #define MICROPY_HW_LED4_PWM         { TIM3, 3, TIM_CHANNEL_1, GPIO_AF2_TIM3 }
92 #define MICROPY_HW_LED_ON(pin)      (mp_hal_pin_high(pin))
93 #define MICROPY_HW_LED_OFF(pin)     (mp_hal_pin_low(pin))
94 
95 // SD card detect switch
96 #define MICROPY_HW_SDCARD_DETECT_PIN        (pin_A8)
97 #define MICROPY_HW_SDCARD_DETECT_PULL       (GPIO_PULLUP)
98 #define MICROPY_HW_SDCARD_DETECT_PRESENT    (GPIO_PIN_RESET)
99 
100 // USB config
101 #define MICROPY_HW_USB_FS              (1)
102 #define MICROPY_HW_USB_VBUS_DETECT_PIN (pin_A9)
103 #define MICROPY_HW_USB_OTG_ID_PIN      (pin_A10)
104 
105 // MMA accelerometer config
106 #define MICROPY_HW_MMA_AVDD_PIN     (pin_B5)
107 
108 // Bootloader configuration (only needed if Mboot is used)
109 #define MBOOT_I2C_PERIPH_ID 1
110 #define MBOOT_I2C_SCL (pin_B8)
111 #define MBOOT_I2C_SDA (pin_B9)
112 #define MBOOT_I2C_ALTFUNC (4)
113