Implemented PIN MAP in flash for all other variants

This commit is contained in:
Roger Clark 2015-09-01 19:58:39 +10:00
parent 53ffab068b
commit 6b6ab7dab5
9 changed files with 504 additions and 504 deletions

View File

@ -25,9 +25,9 @@
*****************************************************************************/
/**
* @file wirish/boards/maple_mini/board.cpp
* @author Marti Bolivar <mbolivar@leaflabs.com>
* @brief Maple Mini board file.
* &file wirish/boards/maple_mini/board.cpp
* &author Marti Bolivar <mbolivar&leaflabs.com>
* &brief Maple Mini board file.
*/
#include <board/board.h>
@ -55,43 +55,43 @@ void boardInit(void) {
extern const stm32_pin_info PIN_MAP[BOARD_NR_GPIO_PINS] = {
{GPIOA, TIMER2, ADC1, 0, 1, 0}, /* PA0 */
{GPIOA, TIMER2, ADC1, 1, 2, 1}, /* PA1 */
{GPIOA, TIMER2, ADC1, 2, 3, 2}, /* PA2 */
{GPIOA, TIMER2, ADC1, 3, 4, 3}, /* PA3 */
{GPIOA, NULL, ADC1, 4, 0, 4}, /* PA4 */
{GPIOA, NULL, ADC1, 5, 0, 5}, /* PA5 */
{GPIOA, TIMER3, ADC1, 6, 1, 6}, /* PA6 */
{GPIOA, TIMER3, ADC1, 7, 2, 7}, /* PA7 */
{GPIOA, TIMER1, NULL, 8, 1, ADCx}, /* PA8 */
{GPIOA, TIMER1, NULL, 9, 2, ADCx}, /* PA9 */
{GPIOA, TIMER1, NULL, 10, 3, ADCx}, /* PA10 */
{GPIOA, TIMER1, NULL, 11, 4, ADCx}, /* PA11 */
{GPIOA, NULL, NULL, 12, 0, ADCx}, /* PA12 */
{GPIOA, NULL, NULL, 13, 0, ADCx}, /* PA13 */
{GPIOA, NULL, NULL, 14, 0, ADCx}, /* PA14 */
{GPIOA, NULL, NULL, 15, 0, ADCx}, /* PA15 */
{&gpioa, &timer2, &adc1, 0, 1, 0}, /* PA0 */
{&gpioa, &timer2, &adc1, 1, 2, 1}, /* PA1 */
{&gpioa, &timer2, &adc1, 2, 3, 2}, /* PA2 */
{&gpioa, &timer2, &adc1, 3, 4, 3}, /* PA3 */
{&gpioa, NULL, &adc1, 4, 0, 4}, /* PA4 */
{&gpioa, NULL, &adc1, 5, 0, 5}, /* PA5 */
{&gpioa, &timer3, &adc1, 6, 1, 6}, /* PA6 */
{&gpioa, &timer3, &adc1, 7, 2, 7}, /* PA7 */
{&gpioa, &timer1, NULL, 8, 1, ADCx}, /* PA8 */
{&gpioa, &timer1, NULL, 9, 2, ADCx}, /* PA9 */
{&gpioa, &timer1, NULL, 10, 3, ADCx}, /* PA10 */
{&gpioa, &timer1, NULL, 11, 4, ADCx}, /* PA11 */
{&gpioa, NULL, NULL, 12, 0, ADCx}, /* PA12 */
{&gpioa, NULL, NULL, 13, 0, ADCx}, /* PA13 */
{&gpioa, NULL, NULL, 14, 0, ADCx}, /* PA14 */
{&gpioa, NULL, NULL, 15, 0, ADCx}, /* PA15 */
{GPIOB, TIMER3, ADC1, 0, 3, 8}, /* PB0 */
{GPIOB, TIMER3, ADC1, 1, 4, 9}, /* PB1 */
{GPIOB, NULL, NULL, 2, 0, ADCx}, /* PB2 */
{GPIOB, NULL, NULL, 3, 0, ADCx}, /* PB3 */
{GPIOB, NULL, NULL, 4, 0, ADCx}, /* PB4 */
{GPIOB, NULL, NULL, 5, 0, ADCx}, /* PB5 */
{GPIOB, TIMER4, NULL, 6, 1, ADCx}, /* PB6 */
{GPIOB, TIMER4, NULL, 7, 2, ADCx}, /* PB7 */
{GPIOB, TIMER4, NULL, 8, 3, ADCx}, /* PB8 */
{GPIOB, TIMER4, NULL, 9, 4, ADCx}, /* PB9 */
{GPIOB, NULL, NULL, 10, 0, ADCx}, /* PB10 */
{GPIOB, NULL, NULL, 11, 0, ADCx}, /* PB11 */
{GPIOB, NULL, NULL, 12, 0, ADCx}, /* PB12 */
{GPIOB, NULL, NULL, 13, 0, ADCx}, /* PB13 */
{GPIOB, NULL, NULL, 14, 0, ADCx}, /* PB14 */
{GPIOB, NULL, NULL, 15, 0, ADCx}, /* PB15 */
{&gpiob, &timer3, &adc1, 0, 3, 8}, /* PB0 */
{&gpiob, &timer3, &adc1, 1, 4, 9}, /* PB1 */
{&gpiob, NULL, NULL, 2, 0, ADCx}, /* PB2 */
{&gpiob, NULL, NULL, 3, 0, ADCx}, /* PB3 */
{&gpiob, NULL, NULL, 4, 0, ADCx}, /* PB4 */
{&gpiob, NULL, NULL, 5, 0, ADCx}, /* PB5 */
{&gpiob, &timer4, NULL, 6, 1, ADCx}, /* PB6 */
{&gpiob, &timer4, NULL, 7, 2, ADCx}, /* PB7 */
{&gpiob, &timer4, NULL, 8, 3, ADCx}, /* PB8 */
{&gpiob, &timer4, NULL, 9, 4, ADCx}, /* PB9 */
{&gpiob, NULL, NULL, 10, 0, ADCx}, /* PB10 */
{&gpiob, NULL, NULL, 11, 0, ADCx}, /* PB11 */
{&gpiob, NULL, NULL, 12, 0, ADCx}, /* PB12 */
{&gpiob, NULL, NULL, 13, 0, ADCx}, /* PB13 */
{&gpiob, NULL, NULL, 14, 0, ADCx}, /* PB14 */
{&gpiob, NULL, NULL, 15, 0, ADCx}, /* PB15 */
{GPIOC, NULL, NULL, 13, 0, ADCx}, /* PC13 */
{GPIOC, NULL, NULL, 14, 0, ADCx}, /* PC14 */
{GPIOC, NULL, NULL, 15, 0, ADCx}, /* PC15 */
{&gpioc, NULL, NULL, 13, 0, ADCx}, /* PC13 */
{&gpioc, NULL, NULL, 14, 0, ADCx}, /* PC14 */
{&gpioc, NULL, NULL, 15, 0, ADCx}, /* PC15 */

View File

@ -63,7 +63,7 @@ void boardInit(void) {
// PMAP_ROW() lets us specify a row (really a struct stm32_pin_info)
// in the pin map. Its arguments are:
//
// - GPIO device for the pin (GPIOA, etc.)
// - GPIO device for the pin (&gpioa, etc.)
// - GPIO bit for the pin (0 through 15)
// - Timer device, or NULL if none
// - Timer channel (1 to 4, for PWM), or 0 if none
@ -81,61 +81,61 @@ extern const stm32_pin_info PIN_MAP[BOARD_NR_GPIO_PINS] = {
uint8 pinMode; mode specific by pinMode call (Roger Clark added to optimize compatibility with Arduino API
*/
{GPIOA, TIMER2, ADC1, 0, 1, 0}, /* PA0 */
{GPIOA, TIMER2, ADC1, 1, 2, 1}, /* PA1 */
{GPIOA, TIMER2, ADC1, 2, 3, 2}, /* PA2 */
{GPIOA, TIMER2, ADC1, 3, 4, 3}, /* PA3 */
{GPIOA, NULL, ADC1, 4, 0, 4}, /* PA4 */
{GPIOA, NULL, ADC1, 5, 0, 5}, /* PA5 */
{GPIOA, TIMER3, ADC1, 6, 1, 6}, /* PA6 */
{GPIOA, TIMER3, ADC1, 7, 2, 7}, /* PA7 */
{GPIOA, TIMER1, NULL, 8, 1, ADCx}, /* PA8 */
{GPIOA, TIMER1, NULL, 9, 2, ADCx}, /* PA9 */
{GPIOA, TIMER1, NULL, 10, 3, ADCx}, /* PA10 */
{GPIOA, NULL, NULL, 11, 0, ADCx}, /* PA11 */
{GPIOA, NULL, NULL, 12, 0, ADCx}, /* PA12 */
{GPIOA, NULL, NULL, 13, 0, ADCx}, /* PA13 */
{GPIOA, NULL, NULL, 14, 0, ADCx}, /* PA14 */
{GPIOA, NULL, NULL, 15, 0, ADCx}, /* PA15 */
{&gpioa, &timer2, &adc1, 0, 1, 0}, /* PA0 */
{&gpioa, &timer2, &adc1, 1, 2, 1}, /* PA1 */
{&gpioa, &timer2, &adc1, 2, 3, 2}, /* PA2 */
{&gpioa, &timer2, &adc1, 3, 4, 3}, /* PA3 */
{&gpioa, NULL, &adc1, 4, 0, 4}, /* PA4 */
{&gpioa, NULL, &adc1, 5, 0, 5}, /* PA5 */
{&gpioa, &timer3, &adc1, 6, 1, 6}, /* PA6 */
{&gpioa, &timer3, &adc1, 7, 2, 7}, /* PA7 */
{&gpioa, &timer1, NULL, 8, 1, ADCx}, /* PA8 */
{&gpioa, &timer1, NULL, 9, 2, ADCx}, /* PA9 */
{&gpioa, &timer1, NULL, 10, 3, ADCx}, /* PA10 */
{&gpioa, NULL, NULL, 11, 0, ADCx}, /* PA11 */
{&gpioa, NULL, NULL, 12, 0, ADCx}, /* PA12 */
{&gpioa, NULL, NULL, 13, 0, ADCx}, /* PA13 */
{&gpioa, NULL, NULL, 14, 0, ADCx}, /* PA14 */
{&gpioa, NULL, NULL, 15, 0, ADCx}, /* PA15 */
{GPIOB, TIMER3, ADC1, 0, 3, 8}, /* PB0 */
{GPIOB, TIMER3, ADC1, 1, 4, 9}, /* PB1 */
{GPIOB, NULL, NULL, 2, 0, ADCx}, /* PB2 */
{GPIOB, NULL, NULL, 3, 0, ADCx}, /* PB3 */
{GPIOB, NULL, NULL, 4, 0, ADCx}, /* PB4 */
{GPIOB, NULL, NULL, 5, 0, ADCx}, /* PB5 */
{GPIOB, TIMER4, NULL, 6, 1, ADCx}, /* PB6 */
{GPIOB, TIMER4, NULL, 7, 2, ADCx}, /* PB7 */
{GPIOB, TIMER4, NULL, 8, 3, ADCx}, /* PB8 */
{GPIOB, NULL, NULL, 9, 0, ADCx}, /* PB9 */
{GPIOB, NULL, NULL, 10, 0, ADCx}, /* PB10 */
{GPIOB, NULL, NULL, 11, 0, ADCx}, /* PB11 */
{GPIOB, NULL, NULL, 12, 0, ADCx}, /* PB12 */
{GPIOB, NULL, NULL, 13, 0, ADCx}, /* PB13 */
{GPIOB, NULL, NULL, 14, 0, ADCx}, /* PB14 */
{GPIOB, NULL, NULL, 15, 0, ADCx}, /* PB15 */
{&gpiob, &timer3, &adc1, 0, 3, 8}, /* PB0 */
{&gpiob, &timer3, &adc1, 1, 4, 9}, /* PB1 */
{&gpiob, NULL, NULL, 2, 0, ADCx}, /* PB2 */
{&gpiob, NULL, NULL, 3, 0, ADCx}, /* PB3 */
{&gpiob, NULL, NULL, 4, 0, ADCx}, /* PB4 */
{&gpiob, NULL, NULL, 5, 0, ADCx}, /* PB5 */
{&gpiob, &timer4, NULL, 6, 1, ADCx}, /* PB6 */
{&gpiob, &timer4, NULL, 7, 2, ADCx}, /* PB7 */
{&gpiob, &timer4, NULL, 8, 3, ADCx}, /* PB8 */
{&gpiob, NULL, NULL, 9, 0, ADCx}, /* PB9 */
{&gpiob, NULL, NULL, 10, 0, ADCx}, /* PB10 */
{&gpiob, NULL, NULL, 11, 0, ADCx}, /* PB11 */
{&gpiob, NULL, NULL, 12, 0, ADCx}, /* PB12 */
{&gpiob, NULL, NULL, 13, 0, ADCx}, /* PB13 */
{&gpiob, NULL, NULL, 14, 0, ADCx}, /* PB14 */
{&gpiob, NULL, NULL, 15, 0, ADCx}, /* PB15 */
{GPIOC, NULL, ADC1, 0, 0, 10}, /* PC0 */
{GPIOC, NULL, ADC1, 1, 0, 11}, /* PC1 */
{GPIOC, NULL, ADC1, 2, 0, 12}, /* PC2 */
{GPIOC, NULL, ADC1, 3, 0, 13}, /* PC3 */
{GPIOC, NULL, ADC1, 4, 0, 14}, /* PC4 */
{GPIOC, NULL, ADC1, 5, 0, 15}, /* PC5 */
{GPIOC, TIMER8, NULL, 6, 1, ADCx}, /* PC6 */
{GPIOC, TIMER8, NULL, 7, 2, ADCx}, /* PC7 */
{GPIOC, TIMER8, NULL, 8, 3, ADCx}, /* PC8 */
{GPIOC, TIMER8, NULL, 9, 4, ADCx}, /* PC9 */
{GPIOC, NULL, NULL, 10, 0, ADCx}, /* PC10 UART4_TX/SDIO_D2 */
{GPIOC, NULL, NULL, 11, 0, ADCx}, /* PC11 UART4_RX/SDIO_D3 */
{GPIOC, NULL, NULL, 12, 0, ADCx}, /* PC12 UART5_TX/SDIO_CK */
{GPIOC, NULL, NULL, 13, 0, ADCx}, /* PC13 TAMPER-RTC */
{GPIOC, NULL, NULL, 14, 0, ADCx}, /* PC14 OSC32_IN */
{GPIOC, NULL, NULL, 15, 0, ADCx}, /* PC15 OSC32_OUT */
{&gpioc, NULL, &adc1, 0, 0, 10}, /* PC0 */
{&gpioc, NULL, &adc1, 1, 0, 11}, /* PC1 */
{&gpioc, NULL, &adc1, 2, 0, 12}, /* PC2 */
{&gpioc, NULL, &adc1, 3, 0, 13}, /* PC3 */
{&gpioc, NULL, &adc1, 4, 0, 14}, /* PC4 */
{&gpioc, NULL, &adc1, 5, 0, 15}, /* PC5 */
{&gpioc, &timer8, NULL, 6, 1, ADCx}, /* PC6 */
{&gpioc, &timer8, NULL, 7, 2, ADCx}, /* PC7 */
{&gpioc, &timer8, NULL, 8, 3, ADCx}, /* PC8 */
{&gpioc, &timer8, NULL, 9, 4, ADCx}, /* PC9 */
{&gpioc, NULL, NULL, 10, 0, ADCx}, /* PC10 UART4_TX/SDIO_D2 */
{&gpioc, NULL, NULL, 11, 0, ADCx}, /* PC11 UART4_RX/SDIO_D3 */
{&gpioc, NULL, NULL, 12, 0, ADCx}, /* PC12 UART5_TX/SDIO_CK */
{&gpioc, NULL, NULL, 13, 0, ADCx}, /* PC13 TAMPER-RTC */
{&gpioc, NULL, NULL, 14, 0, ADCx}, /* PC14 OSC32_IN */
{&gpioc, NULL, NULL, 15, 0, ADCx}, /* PC15 OSC32_OUT */
{GPIOD, NULL, NULL, 0, 0, ADCx} , /* PD0 OSC_IN */
{GPIOD, NULL, NULL, 1, 0, ADCx} , /* PD1 OSC_OUT */
{GPIOD, NULL, NULL, 2, 0, ADCx} , /* PD2 TIM3_ETR/UART5_RX SDIO_CMD */
{&gpiod, NULL, NULL, 0, 0, ADCx} , /* PD0 OSC_IN */
{&gpiod, NULL, NULL, 1, 0, ADCx} , /* PD1 OSC_OUT */
{&gpiod, NULL, NULL, 2, 0, ADCx} , /* PD2 TIM3_ETR/UART5_RX SDIO_CMD */
};
/* Basically everything that is defined as having a timer us PWM */

View File

@ -55,61 +55,61 @@ void boardInit(void) {
extern const stm32_pin_info PIN_MAP[BOARD_NR_GPIO_PINS] = {
{GPIOA, TIMER2, ADC1, 0, 1, 0}, /* PA0 */
{GPIOA, TIMER2, ADC1, 1, 2, 1}, /* PA1 */
{GPIOA, TIMER2, ADC1, 2, 3, 2}, /* PA2 */
{GPIOA, TIMER2, ADC1, 3, 4, 3}, /* PA3 */
{GPIOA, NULL, ADC1, 4, 0, 4}, /* PA4 */
{GPIOA, NULL, ADC1, 5, 0, 5}, /* PA5 */
{GPIOA, TIMER3, ADC1, 6, 1, 6}, /* PA6 */
{GPIOA, TIMER3, ADC1, 7, 2, 7}, /* PA7 */
{GPIOA, TIMER1, NULL, 8, 1, ADCx}, /* PA8 */
{GPIOA, TIMER1, NULL, 9, 2, ADCx}, /* PA9 */
{GPIOA, TIMER1, NULL, 10, 3, ADCx}, /* PA10 */
{GPIOA, TIMER1, NULL, 11, 4, ADCx}, /* PA11 */
{GPIOA, NULL, NULL, 12, 0, ADCx}, /* PA12 */
{GPIOA, NULL, NULL, 13, 0, ADCx}, /* PA13 */
{GPIOA, NULL, NULL, 14, 0, ADCx}, /* PA14 */
{GPIOA, NULL, NULL, 15, 0, ADCx}, /* PA15 */
{&gpioa, &timer2, &adc1, 0, 1, 0}, /* PA0 */
{&gpioa, &timer2, &adc1, 1, 2, 1}, /* PA1 */
{&gpioa, &timer2, &adc1, 2, 3, 2}, /* PA2 */
{&gpioa, &timer2, &adc1, 3, 4, 3}, /* PA3 */
{&gpioa, NULL, &adc1, 4, 0, 4}, /* PA4 */
{&gpioa, NULL, &adc1, 5, 0, 5}, /* PA5 */
{&gpioa, &timer3, &adc1, 6, 1, 6}, /* PA6 */
{&gpioa, &timer3, &adc1, 7, 2, 7}, /* PA7 */
{&gpioa, &timer1, NULL, 8, 1, ADCx}, /* PA8 */
{&gpioa, &timer1, NULL, 9, 2, ADCx}, /* PA9 */
{&gpioa, &timer1, NULL, 10, 3, ADCx}, /* PA10 */
{&gpioa, &timer1, NULL, 11, 4, ADCx}, /* PA11 */
{&gpioa, NULL, NULL, 12, 0, ADCx}, /* PA12 */
{&gpioa, NULL, NULL, 13, 0, ADCx}, /* PA13 */
{&gpioa, NULL, NULL, 14, 0, ADCx}, /* PA14 */
{&gpioa, NULL, NULL, 15, 0, ADCx}, /* PA15 */
{GPIOB, TIMER3, ADC1, 0, 3, 8}, /* PB0 */
{GPIOB, TIMER3, ADC1, 1, 4, 9}, /* PB1 */
{GPIOB, NULL, NULL, 2, 0, ADCx}, /* PB2 */
{GPIOB, NULL, NULL, 3, 0, ADCx}, /* PB3 */
{GPIOB, NULL, NULL, 4, 0, ADCx}, /* PB4 */
{GPIOB, NULL, NULL, 5, 0, ADCx}, /* PB5 */
{GPIOB, TIMER4, NULL, 6, 1, ADCx}, /* PB6 */
{GPIOB, TIMER4, NULL, 7, 2, ADCx}, /* PB7 */
{GPIOB, TIMER4, NULL, 8, 3, ADCx}, /* PB8 */
{GPIOB, TIMER4, NULL, 9, 4, ADCx}, /* PB9 */
{GPIOB, NULL, NULL, 10, 0, ADCx}, /* PB10 */
{GPIOB, NULL, NULL, 11, 0, ADCx}, /* PB11 */
{GPIOB, NULL, NULL, 12, 0, ADCx}, /* PB12 */
{GPIOB, NULL, NULL, 13, 0, ADCx}, /* PB13 */
{GPIOB, NULL, NULL, 14, 0, ADCx}, /* PB14 */
{GPIOB, NULL, NULL, 15, 0, ADCx}, /* PB15 */
{&gpiob, &timer3, &adc1, 0, 3, 8}, /* PB0 */
{&gpiob, &timer3, &adc1, 1, 4, 9}, /* PB1 */
{&gpiob, NULL, NULL, 2, 0, ADCx}, /* PB2 */
{&gpiob, NULL, NULL, 3, 0, ADCx}, /* PB3 */
{&gpiob, NULL, NULL, 4, 0, ADCx}, /* PB4 */
{&gpiob, NULL, NULL, 5, 0, ADCx}, /* PB5 */
{&gpiob, &timer4, NULL, 6, 1, ADCx}, /* PB6 */
{&gpiob, &timer4, NULL, 7, 2, ADCx}, /* PB7 */
{&gpiob, &timer4, NULL, 8, 3, ADCx}, /* PB8 */
{&gpiob, &timer4, NULL, 9, 4, ADCx}, /* PB9 */
{&gpiob, NULL, NULL, 10, 0, ADCx}, /* PB10 */
{&gpiob, NULL, NULL, 11, 0, ADCx}, /* PB11 */
{&gpiob, NULL, NULL, 12, 0, ADCx}, /* PB12 */
{&gpiob, NULL, NULL, 13, 0, ADCx}, /* PB13 */
{&gpiob, NULL, NULL, 14, 0, ADCx}, /* PB14 */
{&gpiob, NULL, NULL, 15, 0, ADCx}, /* PB15 */
/* Andy Hull - the R8 is similar to the C8 but exposes more GPIO as follows */
{GPIOC, NULL, ADC1, 0, 0, 10}, /* PC0 */
{GPIOC, NULL, ADC1, 1, 0, 11}, /* PC1 */
{GPIOC, NULL, ADC1, 2, 0, 12}, /* PC2 */
{GPIOC, NULL, ADC1, 3, 0, 13}, /* PC3 */
{GPIOC, NULL, ADC1, 4, 0, 14}, /* PC4 */
{GPIOC, NULL, ADC1, 5, 0, 15}, /* PC5 */
{&gpioc, NULL, &adc1, 0, 0, 10}, /* PC0 */
{&gpioc, NULL, &adc1, 1, 0, 11}, /* PC1 */
{&gpioc, NULL, &adc1, 2, 0, 12}, /* PC2 */
{&gpioc, NULL, &adc1, 3, 0, 13}, /* PC3 */
{&gpioc, NULL, &adc1, 4, 0, 14}, /* PC4 */
{&gpioc, NULL, &adc1, 5, 0, 15}, /* PC5 */
{GPIOC, NULL, NULL, 6, 0, ADCx}, /* PC6 */
{GPIOC, NULL, NULL, 7, 0, ADCx}, /* PC7 */
{GPIOC, NULL, NULL, 8, 0, ADCx}, /* PC8 */
{GPIOC, NULL, NULL, 9, 0, ADCx}, /* PC9 */
{&gpioc, NULL, NULL, 6, 0, ADCx}, /* PC6 */
{&gpioc, NULL, NULL, 7, 0, ADCx}, /* PC7 */
{&gpioc, NULL, NULL, 8, 0, ADCx}, /* PC8 */
{&gpioc, NULL, NULL, 9, 0, ADCx}, /* PC9 */
{GPIOC, NULL, NULL, 10, 0, ADCx}, /* PC10 */
{GPIOC, NULL, NULL, 11, 0, ADCx}, /* PC11 */
{GPIOC, NULL, NULL, 12, 0, ADCx}, /* PC12 */
{GPIOC, NULL, NULL, 13, 0, ADCx}, /* PC13 */
{GPIOC, NULL, NULL, 14, 0, ADCx}, /* PC14 */
{GPIOC, NULL, NULL, 15, 0, ADCx}, /* PC15 */
{&gpioc, NULL, NULL, 10, 0, ADCx}, /* PC10 */
{&gpioc, NULL, NULL, 11, 0, ADCx}, /* PC11 */
{&gpioc, NULL, NULL, 12, 0, ADCx}, /* PC12 */
{&gpioc, NULL, NULL, 13, 0, ADCx}, /* PC13 */
{&gpioc, NULL, NULL, 14, 0, ADCx}, /* PC14 */
{&gpioc, NULL, NULL, 15, 0, ADCx}, /* PC15 */
{GPIOD, NULL, NULL, 2, 0, ADCx}, /* PD2 */
{&gpiod, NULL, NULL, 2, 0, ADCx}, /* PD2 */
};
extern const uint8 boardPWMPins[BOARD_NR_PWM_PINS] __FLASH__ = {

View File

@ -62,7 +62,7 @@ void boardInit(void) {
// PMAP_ROW() lets us specify a row (really a struct stm32_pin_info)
// in the pin map. Its arguments are:
//
// - GPIO device for the pin (GPIOA, etc.)
// - GPIO device for the pin (&gpioa, etc.)
// - GPIO bit for the pin (0 through 15)
// - Timer device, or NULL if none
// - Timer channel (1 to 4, for PWM), or 0 if none
@ -79,91 +79,91 @@ extern const stm32_pin_info PIN_MAP[BOARD_NR_GPIO_PINS] = {
uint8 adc_channel; Pin ADC channel, or ADCx if none.
*/
{GPIOA, TIMER2, ADC1, 0, 1, 0}, /* PA0 */
{GPIOA, TIMER2, ADC1, 1, 2, 1}, /* PA1 */
{GPIOA, TIMER2, ADC1, 2, 3, 2}, /* PA2 */
{GPIOA, TIMER2, ADC1, 3, 4, 3}, /* PA3 */
{GPIOA, NULL, ADC1, 4, 0, 4}, /* PA4 */
{GPIOA, NULL, ADC1, 5, 0, 5}, /* PA5 */
{GPIOA, TIMER3, ADC1, 6, 1, 6}, /* PA6 */
{GPIOA, TIMER3, ADC1, 7, 2, 7}, /* PA7 */
{GPIOA, TIMER1, NULL, 8, 1, ADCx}, /* PA8 */
{GPIOA, TIMER1, NULL, 9, 2, ADCx}, /* PA9 */
{GPIOA, TIMER1, NULL, 10, 3, ADCx}, /* PA10 */
{GPIOA, NULL, NULL, 11, 0, ADCx}, /* PA11 */ //Could have TIMER1_CH4, but is also CAN_RX and USBDM
{GPIOA, NULL, NULL, 12, 0, ADCx}, /* PA12 */ //Could have TIMER1_ETR, but is also CAN_TX and USBDP
{GPIOA, NULL, NULL, 13, 0, ADCx}, /* PA13 */
{GPIOA, NULL, NULL, 14, 0, ADCx}, /* PA14 */
{GPIOA, NULL, NULL, 15, 0, ADCx}, /* PA15 */ //SPI3_NSS
{&gpioa, &timer2, &adc1, 0, 1, 0}, /* PA0 */
{&gpioa, &timer2, &adc1, 1, 2, 1}, /* PA1 */
{&gpioa, &timer2, &adc1, 2, 3, 2}, /* PA2 */
{&gpioa, &timer2, &adc1, 3, 4, 3}, /* PA3 */
{&gpioa, NULL, &adc1, 4, 0, 4}, /* PA4 */
{&gpioa, NULL, &adc1, 5, 0, 5}, /* PA5 */
{&gpioa, &timer3, &adc1, 6, 1, 6}, /* PA6 */
{&gpioa, &timer3, &adc1, 7, 2, 7}, /* PA7 */
{&gpioa, &timer1, NULL, 8, 1, ADCx}, /* PA8 */
{&gpioa, &timer1, NULL, 9, 2, ADCx}, /* PA9 */
{&gpioa, &timer1, NULL, 10, 3, ADCx}, /* PA10 */
{&gpioa, NULL, NULL, 11, 0, ADCx}, /* PA11 */ //Could have &timer1_CH4, but is also CAN_RX and USBDM
{&gpioa, NULL, NULL, 12, 0, ADCx}, /* PA12 */ //Could have &timer1_ETR, but is also CAN_TX and USBDP
{&gpioa, NULL, NULL, 13, 0, ADCx}, /* PA13 */
{&gpioa, NULL, NULL, 14, 0, ADCx}, /* PA14 */
{&gpioa, NULL, NULL, 15, 0, ADCx}, /* PA15 */ //SPI3_NSS
{GPIOB, TIMER3, ADC1, 0, 3, 8}, /* PB0 */
{GPIOB, TIMER3, ADC1, 1, 4, 9}, /* PB1 */
{&gpiob, &timer3, &adc1, 0, 3, 8}, /* PB0 */
{&gpiob, &timer3, &adc1, 1, 4, 9}, /* PB1 */
/* NOTE PB2 is not included as its Boot 1 */
{GPIOB, NULL, NULL, 3, 0, ADCx}, /* PB3 */ //JTDO, SPI3_SCK / I2S3_CK/
{GPIOB, NULL, NULL, 4, 0, ADCx}, /* PB4 */ //NJTRST, SPI3_MISO
{GPIOB, NULL, NULL, 5, 0, ADCx}, /* PB5 */ //I2C1_SMBA/ SPI3_MOSI
{GPIOB, TIMER4, NULL, 6, 1, ADCx}, /* PB6 */ //I2C1_SCL(9)
{GPIOB, TIMER4, NULL, 7, 2, ADCx}, /* PB7 */ //I2C1_SDA(9) / FSMC_NADV
{GPIOB, TIMER4, NULL, 8, 3, ADCx}, /* PB8 */ //SDIO_D4
{GPIOB, TIMER4, NULL, 9, 4, ADCx}, /* PB9 */ //SDIO_D5
{GPIOB, NULL, NULL, 10, 0, ADCx}, /* PB10 */ //I2C2_SCL/USART3_TX
{GPIOB, NULL, NULL, 11, 0, ADCx}, /* PB11 */ //I2C2_SDA/USART3_RX
{GPIOB, NULL, NULL, 12, 0, ADCx}, /* PB12 */ //SPI2_NSS/I2S2_WS/I2C2_SMBA/USART3_CK
{GPIOB, NULL, NULL, 13, 0, ADCx}, /* PB13 */ //SPI2_SCK/I2S2_CK/USART3_CTS
{GPIOB, NULL, NULL, 14, 0, ADCx}, /* PB14 */ //SPI2_MISO/TIM1_CH2N/USART3_RTS
{GPIOB, NULL, NULL, 15, 0, ADCx}, /* PB15 */ //SPI2_MOSI/I2S2_SD
{&gpiob, NULL, NULL, 3, 0, ADCx}, /* PB3 */ //JTDO, SPI3_SCK / I2S3_CK/
{&gpiob, NULL, NULL, 4, 0, ADCx}, /* PB4 */ //NJTRST, SPI3_MISO
{&gpiob, NULL, NULL, 5, 0, ADCx}, /* PB5 */ //I2C1_SMBA/ SPI3_MOSI
{&gpiob, &timer4, NULL, 6, 1, ADCx}, /* PB6 */ //I2C1_SCL(9)
{&gpiob, &timer4, NULL, 7, 2, ADCx}, /* PB7 */ //I2C1_SDA(9) / FSMC_NADV
{&gpiob, &timer4, NULL, 8, 3, ADCx}, /* PB8 */ //SDIO_D4
{&gpiob, &timer4, NULL, 9, 4, ADCx}, /* PB9 */ //SDIO_D5
{&gpiob, NULL, NULL, 10, 0, ADCx}, /* PB10 */ //I2C2_SCL/USART3_TX
{&gpiob, NULL, NULL, 11, 0, ADCx}, /* PB11 */ //I2C2_SDA/USART3_RX
{&gpiob, NULL, NULL, 12, 0, ADCx}, /* PB12 */ //SPI2_NSS/I2S2_WS/I2C2_SMBA/USART3_CK
{&gpiob, NULL, NULL, 13, 0, ADCx}, /* PB13 */ //SPI2_SCK/I2S2_CK/USART3_CTS
{&gpiob, NULL, NULL, 14, 0, ADCx}, /* PB14 */ //SPI2_MISO/TIM1_CH2N/USART3_RTS
{&gpiob, NULL, NULL, 15, 0, ADCx}, /* PB15 */ //SPI2_MOSI/I2S2_SD
{GPIOC, NULL, ADC1, 0, 0, 10}, /* PC0 */
{GPIOC, NULL, ADC1, 1, 0, 11}, /* PC1 */
{GPIOC, NULL, ADC1, 2, 0, 12}, /* PC2 */
{GPIOC, NULL, ADC1, 3, 0, 13}, /* PC3 */
{GPIOC, NULL, ADC1, 4, 0, 14}, /* PC4 */
{GPIOC, NULL, ADC1, 5, 0, 15}, /* PC5 */
{GPIOC, TIMER8, NULL, 6, 1, ADCx}, /* PC6 I2S2_MCK/SDIO_D6*/
{GPIOC, TIMER8, NULL, 7, 2, ADCx}, /* PC7 I2S3_MCK/SDIO_D7*/
{GPIOC, TIMER8, NULL, 8, 3, ADCx}, /* PC8 SDIO_D0*/
{GPIOC, TIMER8, NULL, 9, 4, ADCx}, /* PC9 SDIO_D1*/
{GPIOC, NULL, NULL, 10, 0, ADCx}, /* PC10 UART4_TX/SDIO_D2 */
{GPIOC, NULL, NULL, 11, 0, ADCx}, /* PC11 UART4_RX/SDIO_D3 */
{GPIOC, NULL, NULL, 12, 0, ADCx}, /* PC12 UART5_TX/SDIO_CK */
{GPIOC, NULL, NULL, 13, 0, ADCx}, /* PC13 TAMPER-RTC/ Limited output*/
{GPIOC, NULL, NULL, 14, 0, ADCx}, /* PC14 OSC32_IN/ Limited output*/
{GPIOC, NULL, NULL, 15, 0, ADCx}, /* PC15 OSC32_OUT/ Limited output*/
{&gpioc, NULL, &adc1, 0, 0, 10}, /* PC0 */
{&gpioc, NULL, &adc1, 1, 0, 11}, /* PC1 */
{&gpioc, NULL, &adc1, 2, 0, 12}, /* PC2 */
{&gpioc, NULL, &adc1, 3, 0, 13}, /* PC3 */
{&gpioc, NULL, &adc1, 4, 0, 14}, /* PC4 */
{&gpioc, NULL, &adc1, 5, 0, 15}, /* PC5 */
{&gpioc, &timer8, NULL, 6, 1, ADCx}, /* PC6 I2S2_MCK/SDIO_D6*/
{&gpioc, &timer8, NULL, 7, 2, ADCx}, /* PC7 I2S3_MCK/SDIO_D7*/
{&gpioc, &timer8, NULL, 8, 3, ADCx}, /* PC8 SDIO_D0*/
{&gpioc, &timer8, NULL, 9, 4, ADCx}, /* PC9 SDIO_D1*/
{&gpioc, NULL, NULL, 10, 0, ADCx}, /* PC10 UART4_TX/SDIO_D2 */
{&gpioc, NULL, NULL, 11, 0, ADCx}, /* PC11 UART4_RX/SDIO_D3 */
{&gpioc, NULL, NULL, 12, 0, ADCx}, /* PC12 UART5_TX/SDIO_CK */
{&gpioc, NULL, NULL, 13, 0, ADCx}, /* PC13 TAMPER-RTC/ Limited output*/
{&gpioc, NULL, NULL, 14, 0, ADCx}, /* PC14 OSC32_IN/ Limited output*/
{&gpioc, NULL, NULL, 15, 0, ADCx}, /* PC15 OSC32_OUT/ Limited output*/
{GPIOD, NULL, NULL, 0, 0, ADCx} , /* PD0 OSC_IN */
{GPIOD, NULL, NULL, 1, 0, ADCx} , /* PD1 OSC_OUT */
{GPIOD, NULL, NULL, 2, 0, ADCx} , /* PD2 TIM3_ETR/UART5_RX SDIO_CMD */
{GPIOD, NULL, NULL, 3, 0, ADCx} , /* PD3 FSMC_CLK */
{GPIOD, NULL, NULL, 4, 0, ADCx} , /* PD4 FSMC_NOE */
{GPIOD, NULL, NULL, 5, 0, ADCx} , /* PD5 FSMC_NWE */
{GPIOD, NULL, NULL, 6, 0, ADCx} , /* PD6 FSMC_NWAIT */
{GPIOD, NULL, NULL, 7, 0, ADCx} , /* PD7 FSMC_NE1/FSMC_NCE2 */
{GPIOD, NULL, NULL, 8, 0, ADCx} , /* PD8 FSMC_D13 */
{GPIOD, NULL, NULL, 9, 0, ADCx} , /* PD9 FSMC_D14 */
{GPIOD, NULL, NULL, 10, 0, ADCx} , /* PD10 FSMC_D15 */
{GPIOD, NULL, NULL, 11, 0, ADCx} , /* PD11 FSMC_A16 */
{GPIOD, NULL, NULL, 12, 0, ADCx} , /* PD12 FSMC_A17 */
{GPIOD, NULL, NULL, 13, 0, ADCx} , /* PD13 FSMC_A18 */
{GPIOD, NULL, NULL, 14, 0, ADCx} , /* PD14 FSMC_D0 */
{GPIOD, NULL, NULL, 15, 0, ADCx} , /* PD15 FSMC_D1 */
{&gpiod, NULL, NULL, 0, 0, ADCx} , /* PD0 OSC_IN */
{&gpiod, NULL, NULL, 1, 0, ADCx} , /* PD1 OSC_OUT */
{&gpiod, NULL, NULL, 2, 0, ADCx} , /* PD2 TIM3_ETR/UART5_RX SDIO_CMD */
{&gpiod, NULL, NULL, 3, 0, ADCx} , /* PD3 FSMC_CLK */
{&gpiod, NULL, NULL, 4, 0, ADCx} , /* PD4 FSMC_NOE */
{&gpiod, NULL, NULL, 5, 0, ADCx} , /* PD5 FSMC_NWE */
{&gpiod, NULL, NULL, 6, 0, ADCx} , /* PD6 FSMC_NWAIT */
{&gpiod, NULL, NULL, 7, 0, ADCx} , /* PD7 FSMC_NE1/FSMC_NCE2 */
{&gpiod, NULL, NULL, 8, 0, ADCx} , /* PD8 FSMC_D13 */
{&gpiod, NULL, NULL, 9, 0, ADCx} , /* PD9 FSMC_D14 */
{&gpiod, NULL, NULL, 10, 0, ADCx} , /* PD10 FSMC_D15 */
{&gpiod, NULL, NULL, 11, 0, ADCx} , /* PD11 FSMC_A16 */
{&gpiod, NULL, NULL, 12, 0, ADCx} , /* PD12 FSMC_A17 */
{&gpiod, NULL, NULL, 13, 0, ADCx} , /* PD13 FSMC_A18 */
{&gpiod, NULL, NULL, 14, 0, ADCx} , /* PD14 FSMC_D0 */
{&gpiod, NULL, NULL, 15, 0, ADCx} , /* PD15 FSMC_D1 */
{GPIOE, NULL, NULL, 0, 0, ADCx} , /* PE0 TIM4_ETR / FSMC_NBL0 */
{GPIOE, NULL, NULL, 1, 0, ADCx} , /* PE1 FSMC_NBL1 */
{GPIOE, NULL, NULL, 2, 0, ADCx} , /* PE2 TRACECK/ FSMC_A23 */
{GPIOE, NULL, NULL, 3, 0, ADCx} , /* PE3 TRACED0/FSMC_A19 */
{GPIOE, NULL, NULL, 4, 0, ADCx} , /* PE4 TRACED1/FSMC_A20 */
{GPIOE, NULL, NULL, 5, 0, ADCx} , /* PE5 TRACED2/FSMC_A21 */
{GPIOE, NULL, NULL, 6, 0, ADCx} , /* PE6 TRACED3/FSMC_A22 */
{GPIOE, NULL, NULL, 7, 0, ADCx} , /* PE7 FSMC_D4 */
{GPIOE, NULL, NULL, 8, 0, ADCx} , /* PE8 FSMC_D5 */
{GPIOE, NULL, NULL, 9, 0, ADCx} , /* PE9 FSMC_D6 */
{GPIOE, NULL, NULL, 10, 0, ADCx} , /* PE10 FSMC_D7 */
{GPIOE, NULL, NULL, 11, 0, ADCx} , /* PE11 FSMC_D8 */
{GPIOE, NULL, NULL, 12, 0, ADCx} , /* PE12 FSMC_D9 */
{GPIOE, NULL, NULL, 13, 0, ADCx} , /* PE13 FSMC_D10 */
{GPIOE, NULL, NULL, 14, 0, ADCx} , /* PE14 FSMC_D11 */
{GPIOE, NULL, NULL, 15, 0, ADCx} , /* PE15 FSMC_D12 */
{&gpioe, NULL, NULL, 0, 0, ADCx} , /* PE0 TIM4_ETR / FSMC_NBL0 */
{&gpioe, NULL, NULL, 1, 0, ADCx} , /* PE1 FSMC_NBL1 */
{&gpioe, NULL, NULL, 2, 0, ADCx} , /* PE2 TRACECK/ FSMC_A23 */
{&gpioe, NULL, NULL, 3, 0, ADCx} , /* PE3 TRACED0/FSMC_A19 */
{&gpioe, NULL, NULL, 4, 0, ADCx} , /* PE4 TRACED1/FSMC_A20 */
{&gpioe, NULL, NULL, 5, 0, ADCx} , /* PE5 TRACED2/FSMC_A21 */
{&gpioe, NULL, NULL, 6, 0, ADCx} , /* PE6 TRACED3/FSMC_A22 */
{&gpioe, NULL, NULL, 7, 0, ADCx} , /* PE7 FSMC_D4 */
{&gpioe, NULL, NULL, 8, 0, ADCx} , /* PE8 FSMC_D5 */
{&gpioe, NULL, NULL, 9, 0, ADCx} , /* PE9 FSMC_D6 */
{&gpioe, NULL, NULL, 10, 0, ADCx} , /* PE10 FSMC_D7 */
{&gpioe, NULL, NULL, 11, 0, ADCx} , /* PE11 FSMC_D8 */
{&gpioe, NULL, NULL, 12, 0, ADCx} , /* PE12 FSMC_D9 */
{&gpioe, NULL, NULL, 13, 0, ADCx} , /* PE13 FSMC_D10 */
{&gpioe, NULL, NULL, 14, 0, ADCx} , /* PE14 FSMC_D11 */
{&gpioe, NULL, NULL, 15, 0, ADCx} , /* PE15 FSMC_D12 */
};

View File

@ -62,7 +62,7 @@ void boardInit(void) {
// PMAP_ROW() lets us specify a row (really a struct stm32_pin_info)
// in the pin map. Its arguments are:
//
// - GPIO device for the pin (GPIOA, etc.)
// - GPIO device for the pin (&gpioa, etc.)
// - GPIO bit for the pin (0 through 15)
// - Timer device, or NULL if none
// - Timer channel (1 to 4, for PWM), or 0 if none
@ -80,126 +80,126 @@ extern const stm32_pin_info PIN_MAP[BOARD_NR_GPIO_PINS] = {
uint8 pinMode; mode specific by pinMode call (Roger Clark added to optimize compatibility with Arduino API
*/
{GPIOA, TIMER2, ADC1, 0, 1, 0}, /* PA0 */
{GPIOA, TIMER2, ADC1, 1, 2, 1}, /* PA1 */
{GPIOA, TIMER2, ADC1, 2, 3, 2}, /* PA2 */
{GPIOA, TIMER2, ADC1, 3, 4, 3}, /* PA3 */
{GPIOA, NULL, ADC1, 4, 0, 4}, /* PA4 */
{GPIOA, NULL, ADC1, 5, 0, 5}, /* PA5 */
{GPIOA, TIMER3, ADC1, 6, 1, 6}, /* PA6 */
{GPIOA, TIMER3, ADC1, 7, 2, 7}, /* PA7 */
{GPIOA, TIMER1, NULL, 8, 1, ADCx}, /* PA8 */
{GPIOA, TIMER1, NULL, 9, 2, ADCx}, /* PA9 */
{GPIOA, TIMER1, NULL, 10, 3, ADCx}, /* PA10 */
{GPIOA, NULL, NULL, 11, 0, ADCx}, /* PA11 */
{GPIOA, NULL, NULL, 12, 0, ADCx}, /* PA12 */
{GPIOA, NULL, NULL, 13, 0, ADCx}, /* PA13 */
{GPIOA, NULL, NULL, 14, 0, ADCx}, /* PA14 */
{GPIOA, NULL, NULL, 15, 0, ADCx}, /* PA15 */
{&gpioa, &timer2, &adc1, 0, 1, 0}, /* PA0 */
{&gpioa, &timer2, &adc1, 1, 2, 1}, /* PA1 */
{&gpioa, &timer2, &adc1, 2, 3, 2}, /* PA2 */
{&gpioa, &timer2, &adc1, 3, 4, 3}, /* PA3 */
{&gpioa, NULL, &adc1, 4, 0, 4}, /* PA4 */
{&gpioa, NULL, &adc1, 5, 0, 5}, /* PA5 */
{&gpioa, &timer3, &adc1, 6, 1, 6}, /* PA6 */
{&gpioa, &timer3, &adc1, 7, 2, 7}, /* PA7 */
{&gpioa, &timer1, NULL, 8, 1, ADCx}, /* PA8 */
{&gpioa, &timer1, NULL, 9, 2, ADCx}, /* PA9 */
{&gpioa, &timer1, NULL, 10, 3, ADCx}, /* PA10 */
{&gpioa, NULL, NULL, 11, 0, ADCx}, /* PA11 */
{&gpioa, NULL, NULL, 12, 0, ADCx}, /* PA12 */
{&gpioa, NULL, NULL, 13, 0, ADCx}, /* PA13 */
{&gpioa, NULL, NULL, 14, 0, ADCx}, /* PA14 */
{&gpioa, NULL, NULL, 15, 0, ADCx}, /* PA15 */
{GPIOB, TIMER3, ADC1, 0, 3, 8}, /* PB0 */
{GPIOB, TIMER3, ADC1, 1, 4, 9}, /* PB1 */
{GPIOB, TIMER3, ADC1, 2, 4, 9}, /* PB2 */
{GPIOB, NULL, NULL, 3, 0, ADCx}, /* PB3 */
{GPIOB, NULL, NULL, 4, 0, ADCx}, /* PB4 */
{GPIOB, NULL, NULL, 5, 0, ADCx}, /* PB5 */
{GPIOB, TIMER4, NULL, 6, 1, ADCx}, /* PB6 */
{GPIOB, TIMER4, NULL, 7, 2, ADCx}, /* PB7 */
{GPIOB, TIMER4, NULL, 8, 3, ADCx}, /* PB8 */
{GPIOB, TIMER4, NULL, 9, 4, ADCx}, /* PB9 */
{GPIOB, NULL, NULL, 10, 0, ADCx}, /* PB10 */
{GPIOB, NULL, NULL, 11, 0, ADCx}, /* PB11 */
{GPIOB, NULL, NULL, 12, 0, ADCx}, /* PB12 */
{GPIOB, NULL, NULL, 13, 0, ADCx}, /* PB13 */
{GPIOB, NULL, NULL, 14, 0, ADCx}, /* PB14 */
{GPIOB, NULL, NULL, 15, 0, ADCx}, /* PB15 */
{&gpiob, &timer3, &adc1, 0, 3, 8}, /* PB0 */
{&gpiob, &timer3, &adc1, 1, 4, 9}, /* PB1 */
{&gpiob, &timer3, &adc1, 2, 4, 9}, /* PB2 */
{&gpiob, NULL, NULL, 3, 0, ADCx}, /* PB3 */
{&gpiob, NULL, NULL, 4, 0, ADCx}, /* PB4 */
{&gpiob, NULL, NULL, 5, 0, ADCx}, /* PB5 */
{&gpiob, &timer4, NULL, 6, 1, ADCx}, /* PB6 */
{&gpiob, &timer4, NULL, 7, 2, ADCx}, /* PB7 */
{&gpiob, &timer4, NULL, 8, 3, ADCx}, /* PB8 */
{&gpiob, &timer4, NULL, 9, 4, ADCx}, /* PB9 */
{&gpiob, NULL, NULL, 10, 0, ADCx}, /* PB10 */
{&gpiob, NULL, NULL, 11, 0, ADCx}, /* PB11 */
{&gpiob, NULL, NULL, 12, 0, ADCx}, /* PB12 */
{&gpiob, NULL, NULL, 13, 0, ADCx}, /* PB13 */
{&gpiob, NULL, NULL, 14, 0, ADCx}, /* PB14 */
{&gpiob, NULL, NULL, 15, 0, ADCx}, /* PB15 */
{GPIOC, NULL, ADC1, 0, 0, 10}, /* PC0 */
{GPIOC, NULL, ADC1, 1, 0, 11}, /* PC1 */
{GPIOC, NULL, ADC1, 2, 0, 12}, /* PC2 */
{GPIOC, NULL, ADC1, 3, 0, 13}, /* PC3 */
{GPIOC, NULL, ADC1, 4, 0, 14}, /* PC4 */
{GPIOC, NULL, ADC1, 5, 0, 15}, /* PC5 */
{GPIOC, TIMER8, NULL, 6, 1, ADCx}, /* PC6 */
{GPIOC, TIMER8, NULL, 7, 2, ADCx}, /* PC7 */
{GPIOC, TIMER8, NULL, 8, 3, ADCx}, /* PC8 */
{GPIOC, TIMER8, NULL, 9, 4, ADCx}, /* PC9 */
{GPIOC, NULL, NULL, 10, 0, ADCx}, /* PC10 UART4_TX/SDIO_D2 */
{GPIOC, NULL, NULL, 11, 0, ADCx}, /* PC11 UART4_RX/SDIO_D3 */
{GPIOC, NULL, NULL, 12, 0, ADCx}, /* PC12 UART5_TX/SDIO_CK */
{GPIOC, NULL, NULL, 13, 0, ADCx}, /* PC13 TAMPER-RTC */
{GPIOC, NULL, NULL, 14, 0, ADCx}, /* PC14 OSC32_IN */
{GPIOC, NULL, NULL, 15, 0, ADCx}, /* PC15 OSC32_OUT */
{&gpioc, NULL, &adc1, 0, 0, 10}, /* PC0 */
{&gpioc, NULL, &adc1, 1, 0, 11}, /* PC1 */
{&gpioc, NULL, &adc1, 2, 0, 12}, /* PC2 */
{&gpioc, NULL, &adc1, 3, 0, 13}, /* PC3 */
{&gpioc, NULL, &adc1, 4, 0, 14}, /* PC4 */
{&gpioc, NULL, &adc1, 5, 0, 15}, /* PC5 */
{&gpioc, &timer8, NULL, 6, 1, ADCx}, /* PC6 */
{&gpioc, &timer8, NULL, 7, 2, ADCx}, /* PC7 */
{&gpioc, &timer8, NULL, 8, 3, ADCx}, /* PC8 */
{&gpioc, &timer8, NULL, 9, 4, ADCx}, /* PC9 */
{&gpioc, NULL, NULL, 10, 0, ADCx}, /* PC10 UART4_TX/SDIO_D2 */
{&gpioc, NULL, NULL, 11, 0, ADCx}, /* PC11 UART4_RX/SDIO_D3 */
{&gpioc, NULL, NULL, 12, 0, ADCx}, /* PC12 UART5_TX/SDIO_CK */
{&gpioc, NULL, NULL, 13, 0, ADCx}, /* PC13 TAMPER-RTC */
{&gpioc, NULL, NULL, 14, 0, ADCx}, /* PC14 OSC32_IN */
{&gpioc, NULL, NULL, 15, 0, ADCx}, /* PC15 OSC32_OUT */
{GPIOD, NULL, NULL, 0, 0, ADCx} , /* PD0 OSC_IN */
{GPIOD, NULL, NULL, 1, 0, ADCx} , /* PD1 OSC_OUT */
{GPIOD, NULL, NULL, 2, 0, ADCx} , /* PD2 TIM3_ETR/UART5_RX SDIO_CMD */
{&gpiod, NULL, NULL, 0, 0, ADCx} , /* PD0 OSC_IN */
{&gpiod, NULL, NULL, 1, 0, ADCx} , /* PD1 OSC_OUT */
{&gpiod, NULL, NULL, 2, 0, ADCx} , /* PD2 TIM3_ETR/UART5_RX SDIO_CMD */
{GPIOD, NULL, NULL, 3, 0, ADCx} , /* PD3 FSMC_CLK */
{GPIOD, NULL, NULL, 4, 0, ADCx} , /* PD4 FSMC_NOE */
{GPIOD, NULL, NULL, 5, 0, ADCx} , /* PD5 FSMC_NWE */
{GPIOD, NULL, NULL, 6, 0, ADCx} , /* PD6 FSMC_NWAIT */
{GPIOD, NULL, NULL, 7, 0, ADCx} , /* PD7 FSMC_NE1/FSMC_NCE2 */
{GPIOD, NULL, NULL, 8, 0, ADCx} , /* PD8 FSMC_D13 */
{GPIOD, NULL, NULL, 9, 0, ADCx} , /* PD9 FSMC_D14 */
{GPIOD, NULL, NULL, 10, 0, ADCx} , /* PD10 FSMC_D15 */
{GPIOD, NULL, NULL, 11, 0, ADCx} , /* PD11 FSMC_A16 */
{GPIOD, NULL, NULL, 12, 0, ADCx} , /* PD12 FSMC_A17 */
{GPIOD, NULL, NULL, 13, 0, ADCx} , /* PD13 FSMC_A18 */
{GPIOD, NULL, NULL, 14, 0, ADCx} , /* PD14 FSMC_D0 */
{GPIOD, NULL, NULL, 15, 0, ADCx} , /* PD15 FSMC_D1 */
{&gpiod, NULL, NULL, 3, 0, ADCx} , /* PD3 FSMC_CLK */
{&gpiod, NULL, NULL, 4, 0, ADCx} , /* PD4 FSMC_NOE */
{&gpiod, NULL, NULL, 5, 0, ADCx} , /* PD5 FSMC_NWE */
{&gpiod, NULL, NULL, 6, 0, ADCx} , /* PD6 FSMC_NWAIT */
{&gpiod, NULL, NULL, 7, 0, ADCx} , /* PD7 FSMC_NE1/FSMC_NCE2 */
{&gpiod, NULL, NULL, 8, 0, ADCx} , /* PD8 FSMC_D13 */
{&gpiod, NULL, NULL, 9, 0, ADCx} , /* PD9 FSMC_D14 */
{&gpiod, NULL, NULL, 10, 0, ADCx} , /* PD10 FSMC_D15 */
{&gpiod, NULL, NULL, 11, 0, ADCx} , /* PD11 FSMC_A16 */
{&gpiod, NULL, NULL, 12, 0, ADCx} , /* PD12 FSMC_A17 */
{&gpiod, NULL, NULL, 13, 0, ADCx} , /* PD13 FSMC_A18 */
{&gpiod, NULL, NULL, 14, 0, ADCx} , /* PD14 FSMC_D0 */
{&gpiod, NULL, NULL, 15, 0, ADCx} , /* PD15 FSMC_D1 */
{GPIOE, NULL, NULL, 0, 0, ADCx} , /* PE0 */
{GPIOE, NULL, NULL, 1, 0, ADCx} , /* PE1 */
{GPIOE, NULL, NULL, 2, 0, ADCx} , /* PE2 */
{GPIOE, NULL, NULL, 3, 0, ADCx} , /* PE3 */
{GPIOE, NULL, NULL, 4, 0, ADCx} , /* PE4 */
{GPIOE, NULL, NULL, 5, 0, ADCx} , /* PE5 */
{GPIOE, NULL, NULL, 6, 0, ADCx} , /* PE6 */
{GPIOE, NULL, NULL, 7, 0, ADCx} , /* PE7 */
{GPIOE, NULL, NULL, 8, 0, ADCx} , /* PE8 */
{GPIOE, NULL, NULL, 9, 0, ADCx} , /* PE9 */
{GPIOE, NULL, NULL, 10, 0, ADCx} , /* PE10 */
{GPIOE, NULL, NULL, 11, 0, ADCx} , /* PE11 */
{GPIOE, NULL, NULL, 12, 0, ADCx} , /* PE12 */
{GPIOE, NULL, NULL, 13, 0, ADCx} , /* PE13 */
{GPIOE, NULL, NULL, 14, 0, ADCx} , /* PE14 */
{GPIOE, NULL, NULL, 15, 0, ADCx} , /* PE15 */
{&gpioe, NULL, NULL, 0, 0, ADCx} , /* PE0 */
{&gpioe, NULL, NULL, 1, 0, ADCx} , /* PE1 */
{&gpioe, NULL, NULL, 2, 0, ADCx} , /* PE2 */
{&gpioe, NULL, NULL, 3, 0, ADCx} , /* PE3 */
{&gpioe, NULL, NULL, 4, 0, ADCx} , /* PE4 */
{&gpioe, NULL, NULL, 5, 0, ADCx} , /* PE5 */
{&gpioe, NULL, NULL, 6, 0, ADCx} , /* PE6 */
{&gpioe, NULL, NULL, 7, 0, ADCx} , /* PE7 */
{&gpioe, NULL, NULL, 8, 0, ADCx} , /* PE8 */
{&gpioe, NULL, NULL, 9, 0, ADCx} , /* PE9 */
{&gpioe, NULL, NULL, 10, 0, ADCx} , /* PE10 */
{&gpioe, NULL, NULL, 11, 0, ADCx} , /* PE11 */
{&gpioe, NULL, NULL, 12, 0, ADCx} , /* PE12 */
{&gpioe, NULL, NULL, 13, 0, ADCx} , /* PE13 */
{&gpioe, NULL, NULL, 14, 0, ADCx} , /* PE14 */
{&gpioe, NULL, NULL, 15, 0, ADCx} , /* PE15 */
{GPIOF, NULL, NULL, 0, 0, ADCx} , /* PF0 */
{GPIOF, NULL, NULL, 1, 0, ADCx} , /* PF1 */
{GPIOF, NULL, NULL, 2, 0, ADCx} , /* PF2 */
{GPIOF, NULL, NULL, 3, 0, ADCx} , /* PF3 */
{GPIOF, NULL, NULL, 4, 0, ADCx} , /* PF4 */
{GPIOF, NULL, NULL, 5, 0, ADCx} , /* PF5 */
{GPIOF, NULL, NULL, 6, 0, ADCx} , /* PF6 */
{GPIOF, NULL, NULL, 7, 0, ADCx} , /* PF7 */
{GPIOF, NULL, NULL, 8, 0, ADCx} , /* PF8 */
{GPIOF, NULL, NULL, 9, 0, ADCx} , /* PF9 */
{GPIOF, NULL, NULL, 10, 0, ADCx} , /* PF10 */
{GPIOF, NULL, NULL, 11, 0, ADCx} , /* PF11 */
{GPIOF, NULL, NULL, 12, 0, ADCx} , /* PF12 */
{GPIOF, NULL, NULL, 13, 0, ADCx} , /* PF13 */
{GPIOF, NULL, NULL, 14, 0, ADCx} , /* PF14 */
{GPIOF, NULL, NULL, 15, 0, ADCx} , /* PF15 */
{&gpiof, NULL, NULL, 0, 0, ADCx} , /* PF0 */
{&gpiof, NULL, NULL, 1, 0, ADCx} , /* PF1 */
{&gpiof, NULL, NULL, 2, 0, ADCx} , /* PF2 */
{&gpiof, NULL, NULL, 3, 0, ADCx} , /* PF3 */
{&gpiof, NULL, NULL, 4, 0, ADCx} , /* PF4 */
{&gpiof, NULL, NULL, 5, 0, ADCx} , /* PF5 */
{&gpiof, NULL, NULL, 6, 0, ADCx} , /* PF6 */
{&gpiof, NULL, NULL, 7, 0, ADCx} , /* PF7 */
{&gpiof, NULL, NULL, 8, 0, ADCx} , /* PF8 */
{&gpiof, NULL, NULL, 9, 0, ADCx} , /* PF9 */
{&gpiof, NULL, NULL, 10, 0, ADCx} , /* PF10 */
{&gpiof, NULL, NULL, 11, 0, ADCx} , /* PF11 */
{&gpiof, NULL, NULL, 12, 0, ADCx} , /* PF12 */
{&gpiof, NULL, NULL, 13, 0, ADCx} , /* PF13 */
{&gpiof, NULL, NULL, 14, 0, ADCx} , /* PF14 */
{&gpiof, NULL, NULL, 15, 0, ADCx} , /* PF15 */
{GPIOG, NULL, NULL, 0, 0, ADCx} , /* PG0 */
{GPIOG, NULL, NULL, 1, 0, ADCx} , /* PG1 */
{GPIOG, NULL, NULL, 2, 0, ADCx} , /* PG2 */
{GPIOG, NULL, NULL, 3, 0, ADCx} , /* PG3 */
{GPIOG, NULL, NULL, 4, 0, ADCx} , /* PG4 */
{GPIOG, NULL, NULL, 5, 0, ADCx} , /* PG5 */
{GPIOG, NULL, NULL, 6, 0, ADCx} , /* PG6 */
{GPIOG, NULL, NULL, 7, 0, ADCx} , /* PG7 */
{GPIOG, NULL, NULL, 8, 0, ADCx} , /* PG8 */
{GPIOG, NULL, NULL, 9, 0, ADCx} , /* PG9 */
{GPIOG, NULL, NULL, 10, 0, ADCx} , /* PG10 */
{GPIOG, NULL, NULL, 11, 0, ADCx} , /* PG11 */
{GPIOG, NULL, NULL, 12, 0, ADCx} , /* PG12 */
{GPIOG, NULL, NULL, 13, 0, ADCx} , /* PG13 */
{GPIOG, NULL, NULL, 14, 0, ADCx} , /* PG14 */
{GPIOG, NULL, NULL, 15, 0, ADCx} /* PG15 */
{&gpiog, NULL, NULL, 0, 0, ADCx} , /* PG0 */
{&gpiog, NULL, NULL, 1, 0, ADCx} , /* PG1 */
{&gpiog, NULL, NULL, 2, 0, ADCx} , /* PG2 */
{&gpiog, NULL, NULL, 3, 0, ADCx} , /* PG3 */
{&gpiog, NULL, NULL, 4, 0, ADCx} , /* PG4 */
{&gpiog, NULL, NULL, 5, 0, ADCx} , /* PG5 */
{&gpiog, NULL, NULL, 6, 0, ADCx} , /* PG6 */
{&gpiog, NULL, NULL, 7, 0, ADCx} , /* PG7 */
{&gpiog, NULL, NULL, 8, 0, ADCx} , /* PG8 */
{&gpiog, NULL, NULL, 9, 0, ADCx} , /* PG9 */
{&gpiog, NULL, NULL, 10, 0, ADCx} , /* PG10 */
{&gpiog, NULL, NULL, 11, 0, ADCx} , /* PG11 */
{&gpiog, NULL, NULL, 12, 0, ADCx} , /* PG12 */
{&gpiog, NULL, NULL, 13, 0, ADCx} , /* PG13 */
{&gpiog, NULL, NULL, 14, 0, ADCx} , /* PG14 */
{&gpiog, NULL, NULL, 15, 0, ADCx} /* PG15 */
};
/* Basically everything that is defined as having a timer us PWM */

View File

@ -62,7 +62,7 @@ void boardInit(void) {
// PMAP_ROW() lets us specify a row (really a struct stm32_pin_info)
// in the pin map. Its arguments are:
//
// - GPIO device for the pin (GPIOA, etc.)
// - GPIO device for the pin (&gpioa, etc.)
// - GPIO bit for the pin (0 through 15)
// - Timer device, or NULL if none
// - Timer channel (1 to 4, for PWM), or 0 if none
@ -72,59 +72,59 @@ extern const stm32_pin_info PIN_MAP[BOARD_NR_GPIO_PINS] = {
/* Top header */
PMAP_ROW(GPIOA, 3, TIMER2, 4, ADC1, 3), /* D0/PA3 */
PMAP_ROW(GPIOA, 2, TIMER2, 3, ADC1, 2), /* D1/PA2 */
PMAP_ROW(GPIOA, 0, TIMER2, 1, ADC1, 0), /* D2/PA0 */
PMAP_ROW(GPIOA, 1, TIMER2, 2, ADC1, 1), /* D3/PA1 */
PMAP_ROW(GPIOB, 5, NULL, 0, NULL, ADCx), /* D4/PB5 */
PMAP_ROW(GPIOB, 6, TIMER4, 1, NULL, ADCx), /* D5/PB6 */
PMAP_ROW(GPIOA, 8, TIMER1, 1, NULL, ADCx), /* D6/PA8 */
PMAP_ROW(GPIOA, 9, TIMER1, 2, NULL, ADCx), /* D7/PA9 */
PMAP_ROW(GPIOA, 10, TIMER1, 3, NULL, ADCx), /* D8/PA10 */
PMAP_ROW(GPIOB, 7, TIMER4, 2, NULL, ADCx), /* D9/PB7 */
PMAP_ROW(GPIOA, 4, NULL, 0, ADC1, 4), /* D10/PA4 */
PMAP_ROW(GPIOA, 7, TIMER3, 2, ADC1, 7), /* D11/PA7 */
PMAP_ROW(GPIOA, 6, TIMER3, 1, ADC1, 6), /* D12/PA6 */
PMAP_ROW(GPIOA, 5, NULL, 0, ADC1, 5), /* D13/PA5 (LED) */
PMAP_ROW(GPIOB, 8, TIMER4, 3, NULL, ADCx), /* D14/PB8 */
PMAP_ROW(&gpioa, 3, &timer2, 4, &adc1, 3), /* D0/PA3 */
PMAP_ROW(&gpioa, 2, &timer2, 3, &adc1, 2), /* D1/PA2 */
PMAP_ROW(&gpioa, 0, &timer2, 1, &adc1, 0), /* D2/PA0 */
PMAP_ROW(&gpioa, 1, &timer2, 2, &adc1, 1), /* D3/PA1 */
PMAP_ROW(&gpiob, 5, NULL, 0, NULL, ADCx), /* D4/PB5 */
PMAP_ROW(&gpiob, 6, &timer4, 1, NULL, ADCx), /* D5/PB6 */
PMAP_ROW(&gpioa, 8, &timer1, 1, NULL, ADCx), /* D6/PA8 */
PMAP_ROW(&gpioa, 9, &timer1, 2, NULL, ADCx), /* D7/PA9 */
PMAP_ROW(&gpioa, 10, &timer1, 3, NULL, ADCx), /* D8/PA10 */
PMAP_ROW(&gpiob, 7, &timer4, 2, NULL, ADCx), /* D9/PB7 */
PMAP_ROW(&gpioa, 4, NULL, 0, &adc1, 4), /* D10/PA4 */
PMAP_ROW(&gpioa, 7, &timer3, 2, &adc1, 7), /* D11/PA7 */
PMAP_ROW(&gpioa, 6, &timer3, 1, &adc1, 6), /* D12/PA6 */
PMAP_ROW(&gpioa, 5, NULL, 0, &adc1, 5), /* D13/PA5 (LED) */
PMAP_ROW(&gpiob, 8, &timer4, 3, NULL, ADCx), /* D14/PB8 */
/* Little header */
PMAP_ROW(GPIOC, 0, NULL, 0, ADC1, 10), /* D15/PC0 */
PMAP_ROW(GPIOC, 1, NULL, 0, ADC1, 11), /* D16/PC1 */
PMAP_ROW(GPIOC, 2, NULL, 0, ADC1, 12), /* D17/PC2 */
PMAP_ROW(GPIOC, 3, NULL, 0, ADC1, 13), /* D18/PC3 */
PMAP_ROW(GPIOC, 4, NULL, 0, ADC1, 14), /* D19/PC4 */
PMAP_ROW(GPIOC, 5, NULL, 0, ADC1, 15), /* D20/PC5 */
PMAP_ROW(&gpioc, 0, NULL, 0, &adc1, 10), /* D15/PC0 */
PMAP_ROW(&gpioc, 1, NULL, 0, &adc1, 11), /* D16/PC1 */
PMAP_ROW(&gpioc, 2, NULL, 0, &adc1, 12), /* D17/PC2 */
PMAP_ROW(&gpioc, 3, NULL, 0, &adc1, 13), /* D18/PC3 */
PMAP_ROW(&gpioc, 4, NULL, 0, &adc1, 14), /* D19/PC4 */
PMAP_ROW(&gpioc, 5, NULL, 0, &adc1, 15), /* D20/PC5 */
/* External header */
PMAP_ROW(GPIOC, 13, NULL, 0, NULL, ADCx), /* D21/PC13 */
PMAP_ROW(GPIOC, 14, NULL, 0, NULL, ADCx), /* D22/PC14 */
PMAP_ROW(GPIOC, 15, NULL, 0, NULL, ADCx), /* D23/PC15 */
PMAP_ROW(GPIOB, 9, TIMER4, 4, NULL, ADCx), /* D24/PB9 */
PMAP_ROW(GPIOD, 2, NULL, 0, NULL, ADCx), /* D25/PD2 */
PMAP_ROW(GPIOC, 10, NULL, 0, NULL, ADCx), /* D26/PC10 */
PMAP_ROW(GPIOB, 0, TIMER3, 3, ADC1, 8), /* D27/PB0 */
PMAP_ROW(GPIOB, 1, TIMER3, 4, ADC1, 9), /* D28/PB1 */
PMAP_ROW(GPIOB, 10, NULL, 0, NULL, ADCx), /* D29/PB10 */
PMAP_ROW(GPIOB, 11, NULL, 0, NULL, ADCx), /* D30/PB11 */
PMAP_ROW(GPIOB, 12, NULL, 0, NULL, ADCx), /* D31/PB12 */
PMAP_ROW(GPIOB, 13, NULL, 0, NULL, ADCx), /* D32/PB13 */
PMAP_ROW(GPIOB, 14, NULL, 0, NULL, ADCx), /* D33/PB14 */
PMAP_ROW(GPIOB, 15, NULL, 0, NULL, ADCx), /* D34/PB15 */
PMAP_ROW(GPIOC, 6, NULL, 0, NULL, ADCx), /* D35/PC6 */
PMAP_ROW(GPIOC, 7, NULL, 0, NULL, ADCx), /* D36/PC7 */
PMAP_ROW(GPIOC, 8, NULL, 0, NULL, ADCx), /* D37/PC8 */
PMAP_ROW(GPIOC, 9, NULL, 0, NULL, ADCx), /* D38/PC9 (BUT) */
PMAP_ROW(&gpioc, 13, NULL, 0, NULL, ADCx), /* D21/PC13 */
PMAP_ROW(&gpioc, 14, NULL, 0, NULL, ADCx), /* D22/PC14 */
PMAP_ROW(&gpioc, 15, NULL, 0, NULL, ADCx), /* D23/PC15 */
PMAP_ROW(&gpiob, 9, &timer4, 4, NULL, ADCx), /* D24/PB9 */
PMAP_ROW(&gpiod, 2, NULL, 0, NULL, ADCx), /* D25/PD2 */
PMAP_ROW(&gpioc, 10, NULL, 0, NULL, ADCx), /* D26/PC10 */
PMAP_ROW(&gpiob, 0, &timer3, 3, &adc1, 8), /* D27/PB0 */
PMAP_ROW(&gpiob, 1, &timer3, 4, &adc1, 9), /* D28/PB1 */
PMAP_ROW(&gpiob, 10, NULL, 0, NULL, ADCx), /* D29/PB10 */
PMAP_ROW(&gpiob, 11, NULL, 0, NULL, ADCx), /* D30/PB11 */
PMAP_ROW(&gpiob, 12, NULL, 0, NULL, ADCx), /* D31/PB12 */
PMAP_ROW(&gpiob, 13, NULL, 0, NULL, ADCx), /* D32/PB13 */
PMAP_ROW(&gpiob, 14, NULL, 0, NULL, ADCx), /* D33/PB14 */
PMAP_ROW(&gpiob, 15, NULL, 0, NULL, ADCx), /* D34/PB15 */
PMAP_ROW(&gpioc, 6, NULL, 0, NULL, ADCx), /* D35/PC6 */
PMAP_ROW(&gpioc, 7, NULL, 0, NULL, ADCx), /* D36/PC7 */
PMAP_ROW(&gpioc, 8, NULL, 0, NULL, ADCx), /* D37/PC8 */
PMAP_ROW(&gpioc, 9, NULL, 0, NULL, ADCx), /* D38/PC9 (BUT) */
/* JTAG header */
PMAP_ROW(GPIOA, 13, NULL, 0, NULL, ADCx), /* D39/PA13 */
PMAP_ROW(GPIOA, 14, NULL, 0, NULL, ADCx), /* D40/PA14 */
PMAP_ROW(GPIOA, 15, NULL, 0, NULL, ADCx), /* D41/PA15 */
PMAP_ROW(GPIOB, 3, NULL, 0, NULL, ADCx), /* D42/PB3 */
PMAP_ROW(GPIOB, 4, NULL, 0, NULL, ADCx), /* D43/PB4 */
PMAP_ROW(&gpioa, 13, NULL, 0, NULL, ADCx), /* D39/PA13 */
PMAP_ROW(&gpioa, 14, NULL, 0, NULL, ADCx), /* D40/PA14 */
PMAP_ROW(&gpioa, 15, NULL, 0, NULL, ADCx), /* D41/PA15 */
PMAP_ROW(&gpiob, 3, NULL, 0, NULL, ADCx), /* D42/PB3 */
PMAP_ROW(&gpiob, 4, NULL, 0, NULL, ADCx), /* D43/PB4 */
};
// Array of pins you can use for pwmWrite(). Keep it in Flash because

View File

@ -62,7 +62,7 @@ void boardInit(void) {
// PMAP_ROW() lets us specify a row (really a struct stm32_pin_info)
// in the pin map. Its arguments are:
//
// - GPIO device for the pin (GPIOA, etc.)
// - GPIO device for the pin (&gpioa, etc.)
// - GPIO bit for the pin (0 through 15)
// - Timer device, or NULL if none
// - Timer channel (1 to 4, for PWM), or 0 if none
@ -82,66 +82,66 @@ extern const stm32_pin_info PIN_MAP[BOARD_NR_GPIO_PINS] = {
/* Top header */
{ GPIOA, TIMER2, ADC1, 3, 4, 3 }, /* D0/PA3 */
{ GPIOA, TIMER2, ADC1, 2, 3, 2 }, /* D1/PA2 */
{ GPIOA, TIMER2, ADC1, 0, 1, 0 }, /* D2/PA0 */
{ GPIOA, TIMER2, ADC1, 1, 2, 1 }, /* D3/PA1 */
{ GPIOB, NULL, NULL, 5, 0, ADCx }, /* D4/PB5 */
{ GPIOB, TIMER4, NULL, 6, 1, ADCx }, /* D5/PB6 */
{ GPIOA, TIMER1, NULL, 8, 1, ADCx }, /* D6/PA8 */
{ GPIOA, TIMER1, NULL, 9, 2, ADCx }, /* D7/PA9 */
{ GPIOA, TIMER1, NULL, 10, 3, ADCx }, /* D8/PA10 */
{ GPIOB, TIMER4, NULL, 7, 2, ADCx }, /* D9/PB7 */
{ GPIOA, NULL, ADC1, 4, 0, 4 }, /* D10/PA4 */
{ GPIOA, TIMER3, ADC1, 7, 2, 7 }, /* D11/PA7 */
{ GPIOA, TIMER3, ADC1, 6, 1, 6 }, /* D12/PA6 */
{ GPIOA, NULL, ADC1, 5, 0, 5 }, /* D13/PA5 (LED) */
{ GPIOB, TIMER4, NULL, 8, 3, ADCx }, /* D14/PB8 */
{ &gpioa, &timer2, &adc1, 3, 4, 3 }, /* D0/PA3 */
{ &gpioa, &timer2, &adc1, 2, 3, 2 }, /* D1/PA2 */
{ &gpioa, &timer2, &adc1, 0, 1, 0 }, /* D2/PA0 */
{ &gpioa, &timer2, &adc1, 1, 2, 1 }, /* D3/PA1 */
{ &gpiob, NULL, NULL, 5, 0, ADCx }, /* D4/PB5 */
{ &gpiob, &timer4, NULL, 6, 1, ADCx }, /* D5/PB6 */
{ &gpioa, &timer1, NULL, 8, 1, ADCx }, /* D6/PA8 */
{ &gpioa, &timer1, NULL, 9, 2, ADCx }, /* D7/PA9 */
{ &gpioa, &timer1, NULL, 10, 3, ADCx }, /* D8/PA10 */
{ &gpiob, &timer4, NULL, 7, 2, ADCx }, /* D9/PB7 */
{ &gpioa, NULL, &adc1, 4, 0, 4 }, /* D10/PA4 */
{ &gpioa, &timer3, &adc1, 7, 2, 7 }, /* D11/PA7 */
{ &gpioa, &timer3, &adc1, 6, 1, 6 }, /* D12/PA6 */
{ &gpioa, NULL, &adc1, 5, 0, 5 }, /* D13/PA5 (LED) */
{ &gpiob, &timer4, NULL, 8, 3, ADCx }, /* D14/PB8 */
/* Little header */
{ GPIOC, NULL, ADC1, 0, 0, 10 }, /* D15/PC0 */
{ GPIOC, NULL, ADC1, 1, 0, 11 }, /* D16/PC1 */
{ GPIOC, NULL, ADC1, 2, 0, 12 }, /* D17/PC2 */
{ GPIOC, NULL, ADC1, 3, 0, 13 }, /* D18/PC3 */
{ GPIOC, NULL, ADC1, 4, 0, 14 }, /* D19/PC4 */
{ GPIOC, NULL, ADC1, 5, 0, 15 }, /* D20/PC5 */
{ &gpioc, NULL, &adc1, 0, 0, 10 }, /* D15/PC0 */
{ &gpioc, NULL, &adc1, 1, 0, 11 }, /* D16/PC1 */
{ &gpioc, NULL, &adc1, 2, 0, 12 }, /* D17/PC2 */
{ &gpioc, NULL, &adc1, 3, 0, 13 }, /* D18/PC3 */
{ &gpioc, NULL, &adc1, 4, 0, 14 }, /* D19/PC4 */
{ &gpioc, NULL, &adc1, 5, 0, 15 }, /* D20/PC5 */
/* External header */
{ GPIOC, NULL, NULL, 13, 0, ADCx }, /* D21/PC13 */
{ GPIOC, NULL, NULL, 14, 0, ADCx }, /* D22/PC14 */
{ GPIOC, NULL, NULL, 15, 0, ADCx }, /* D23/PC15 */
{ GPIOB, TIMER4, NULL, 9, 4, ADCx }, /* D24/PB9 */
{ GPIOD, NULL, NULL, 2, 0, ADCx }, /* D25/PD2 */
{ GPIOC, NULL, NULL, 10, 0, ADCx }, /* D26/PC10 */
{ GPIOB, TIMER3, ADC1, 0, 3, 8 }, /* D27/PB0 */
{ GPIOB, TIMER3, ADC1, 1, 4, 9 }, /* D28/PB1 */
{ GPIOB, NULL, NULL, 10, 0, ADCx }, /* D29/PB10 */
{ GPIOB, NULL, NULL, 11, 0, ADCx }, /* D30/PB11 */
{ GPIOB, NULL, NULL, 12, 0, ADCx }, /* D31/PB12 */
{ GPIOB, NULL, NULL, 13, 0, ADCx }, /* D32/PB13 */
{ GPIOB, NULL, NULL, 14, 0, ADCx }, /* D33/PB14 */
{ GPIOB, NULL, NULL, 15, 0, ADCx }, /* D34/PB15 */
{ GPIOC, TIMER8, NULL, 6, 1, ADCx }, /* D35/PC6 */
{ GPIOC, TIMER8, NULL, 7, 2, ADCx }, /* D36/PC7 */
{ GPIOC, TIMER8, NULL, 8, 3, ADCx }, /* D37/PC8 */
{ GPIOC, TIMER8, NULL, 9, 4, ADCx }, /* D38/PC9 (BUT) */
{ &gpioc, NULL, NULL, 13, 0, ADCx }, /* D21/PC13 */
{ &gpioc, NULL, NULL, 14, 0, ADCx }, /* D22/PC14 */
{ &gpioc, NULL, NULL, 15, 0, ADCx }, /* D23/PC15 */
{ &gpiob, &timer4, NULL, 9, 4, ADCx }, /* D24/PB9 */
{ &gpiod, NULL, NULL, 2, 0, ADCx }, /* D25/PD2 */
{ &gpioc, NULL, NULL, 10, 0, ADCx }, /* D26/PC10 */
{ &gpiob, &timer3, &adc1, 0, 3, 8 }, /* D27/PB0 */
{ &gpiob, &timer3, &adc1, 1, 4, 9 }, /* D28/PB1 */
{ &gpiob, NULL, NULL, 10, 0, ADCx }, /* D29/PB10 */
{ &gpiob, NULL, NULL, 11, 0, ADCx }, /* D30/PB11 */
{ &gpiob, NULL, NULL, 12, 0, ADCx }, /* D31/PB12 */
{ &gpiob, NULL, NULL, 13, 0, ADCx }, /* D32/PB13 */
{ &gpiob, NULL, NULL, 14, 0, ADCx }, /* D33/PB14 */
{ &gpiob, NULL, NULL, 15, 0, ADCx }, /* D34/PB15 */
{ &gpioc, &timer8, NULL, 6, 1, ADCx }, /* D35/PC6 */
{ &gpioc, &timer8, NULL, 7, 2, ADCx }, /* D36/PC7 */
{ &gpioc, &timer8, NULL, 8, 3, ADCx }, /* D37/PC8 */
{ &gpioc, &timer8, NULL, 9, 4, ADCx }, /* D38/PC9 (BUT) */
/* JTAG header */
{ GPIOA, NULL, NULL, 13, 0, ADCx }, /* D39/PA13 */
{ GPIOA, NULL, NULL, 14, 0, ADCx }, /* D40/PA14 */
{ GPIOA, NULL, NULL, 15, 0, ADCx }, /* D41/PA15 */
{ GPIOB, NULL, NULL, 3, 0, ADCx }, /* D42/PB3 */
{ GPIOB, NULL, NULL, 4, 0, ADCx }, /* D43/PB4 */
{ &gpioa, NULL, NULL, 13, 0, ADCx }, /* D39/PA13 */
{ &gpioa, NULL, NULL, 14, 0, ADCx }, /* D40/PA14 */
{ &gpioa, NULL, NULL, 15, 0, ADCx }, /* D41/PA15 */
{ &gpiob, NULL, NULL, 3, 0, ADCx }, /* D42/PB3 */
{ &gpiob, NULL, NULL, 4, 0, ADCx }, /* D43/PB4 */
{ GPIOC, NULL, NULL, 11, 0, ADCx }, /* D44/PC11 UART4_RX/SDIO_D3 */
{ GPIOC, NULL, NULL, 12, 0, ADCx }, /* D45/PC12 UART5_TX/SDIO_CK */
{ &gpioc, NULL, NULL, 11, 0, ADCx }, /* D44/PC11 UART4_RX/SDIO_D3 */
{ &gpioc, NULL, NULL, 12, 0, ADCx }, /* D45/PC12 UART5_TX/SDIO_CK */
{ GPIOD, NULL, NULL, 0, 0, ADCx }, /* PD0 OSC_IN */
{ GPIOD, NULL, NULL, 1, 0, ADCx }, /* PD1 OSC_OUT */
{ GPIOB, NULL, NULL, 2, 0, ADCx }, /* PB2 */
{ &gpiod, NULL, NULL, 0, 0, ADCx }, /* PD0 OSC_IN */
{ &gpiod, NULL, NULL, 1, 0, ADCx }, /* PD1 OSC_OUT */
{ &gpiob, NULL, NULL, 2, 0, ADCx }, /* PB2 */
};
/* Basically everything that is defined as having a timer us PWM */

View File

@ -54,35 +54,35 @@ void boardInit(void) {
extern const stm32_pin_info PIN_MAP[BOARD_NR_GPIO_PINS] = {
{GPIOA, TIMER1, NULL, 10, 3, ADCx}, /* D0(RxD0)/PA10 */
{GPIOA, TIMER1, NULL, 9, 2, ADCx}, /* D1(TxD1)/PA9 */
{GPIOB, NULL, NULL, 11, 0, ADCx}, /* D2/PB11 */
{GPIOB, NULL, NULL, 10, 0, ADCx}, /* D3/PB10 */
{GPIOA, TIMER1, NULL, 8, 1, ADCx}, /* D4/PA8 */
{GPIOA, NULL, NULL, 13, 0, ADCx}, /* D5/PA13 */
{GPIOA, NULL, NULL, 14, 0, ADCx}, /* D6/PA14 */
{GPIOA, NULL, NULL, 15, 0, ADCx}, /* D7/PA15 */
{GPIOB, NULL, NULL, 3, 0, ADCx}, /* D8/PB3 */
{GPIOB, NULL, NULL, 4, 0, ADCx}, /* D9/PB4 */
{GPIOA, NULL, ADC1, 4, 0, 4}, /* D10/PA4 */
{GPIOA, TIMER3, ADC1, 7, 2, 7}, /* D11/PA7 */
{GPIOA, TIMER3, ADC1, 6, 1, 6}, /* D12/PA6 */
{GPIOA, NULL, ADC1, 5, 0, 5}, /* D13/PA5 */
{&gpioa, &timer1, NULL, 10, 3, ADCx}, /* D0(RxD0)/PA10 */
{&gpioa, &timer1, NULL, 9, 2, ADCx}, /* D1(TxD1)/PA9 */
{&gpiob, NULL, NULL, 11, 0, ADCx}, /* D2/PB11 */
{&gpiob, NULL, NULL, 10, 0, ADCx}, /* D3/PB10 */
{&gpioa, &timer1, NULL, 8, 1, ADCx}, /* D4/PA8 */
{&gpioa, NULL, NULL, 13, 0, ADCx}, /* D5/PA13 */
{&gpioa, NULL, NULL, 14, 0, ADCx}, /* D6/PA14 */
{&gpioa, NULL, NULL, 15, 0, ADCx}, /* D7/PA15 */
{&gpiob, NULL, NULL, 3, 0, ADCx}, /* D8/PB3 */
{&gpiob, NULL, NULL, 4, 0, ADCx}, /* D9/PB4 */
{&gpioa, NULL, &adc1, 4, 0, 4}, /* D10/PA4 */
{&gpioa, &timer3, &adc1, 7, 2, 7}, /* D11/PA7 */
{&gpioa, &timer3, &adc1, 6, 1, 6}, /* D12/PA6 */
{&gpioa, NULL, &adc1, 5, 0, 5}, /* D13/PA5 */
{GPIOA, TIMER2, ADC1, 0, 1, 0}, /* D14(A0)/PA0 */
{GPIOA, TIMER2, ADC1, 1, 2, 1}, /* D15(A1)/PA1 */
{GPIOA, TIMER2, ADC1, 2, 3, 2}, /* D16(A2)/PA2 */
{GPIOA, TIMER2, ADC1, 3, 4, 3}, /* D17(A3)/PA3 */
{GPIOB, TIMER4, NULL, 7, 2, ADCx}, /* D18(A4)/PB7 */
{GPIOB, TIMER4, NULL, 6, 1, ADCx}, /* D19(A5)/PB6 */
{GPIOB, TIMER3, ADC1, 0, 3, 8}, /* D20(A6)/PB0 */
{GPIOB, TIMER3, ADC1, 1, 4, 9}, /* D21(A7)/PB1 */
{&gpioa, &timer2, &adc1, 0, 1, 0}, /* D14(A0)/PA0 */
{&gpioa, &timer2, &adc1, 1, 2, 1}, /* D15(A1)/PA1 */
{&gpioa, &timer2, &adc1, 2, 3, 2}, /* D16(A2)/PA2 */
{&gpioa, &timer2, &adc1, 3, 4, 3}, /* D17(A3)/PA3 */
{&gpiob, &timer4, NULL, 7, 2, ADCx}, /* D18(A4)/PB7 */
{&gpiob, &timer4, NULL, 6, 1, ADCx}, /* D19(A5)/PB6 */
{&gpiob, &timer3, &adc1, 0, 3, 8}, /* D20(A6)/PB0 */
{&gpiob, &timer3, &adc1, 1, 4, 9}, /* D21(A7)/PB1 */
{GPIOA, NULL, NULL, 12, 0, ADCx}, /* D22/PA12/USB D+ */
{GPIOA, TIMER1, NULL, 11, 4, ADCx}, /* D23/PA11/USB D- */
{&gpioa, NULL, NULL, 12, 0, ADCx}, /* D22/PA12/USB D+ */
{&gpioa, &timer1, NULL, 11, 4, ADCx}, /* D23/PA11/USB D- */
// FIXME: find out which pin is the button, if any
{GPIOB, NULL, NULL, 8, 0, ADCx}, /* D24/PB8??/Button */
{&gpiob, NULL, NULL, 8, 0, ADCx}, /* D24/PB8??/Button */
};
extern const uint8 boardPWMPins[BOARD_NR_PWM_PINS] __FLASH__ = {

View File

@ -80,14 +80,14 @@ rcc_pll_cfg w_board_pll_cfg = {RCC_PLLSRC_HSI_DIV_2, &pll_data};
// PMAP_ROW() lets us specify a row (really a struct stm32_pin_info)
// in the pin map. Its arguments are:
//
// - GPIO device for the pin (GPIOA, etc.)
// - GPIO device for the pin (&gpioa, etc.)
// - GPIO bit for the pin (0 through 15)
// - Timer device, or NULL if none
// - Timer channel (1 to 4, for PWM), or 0 if none
// - ADC device, or NULL if none
// - ADC channel, or ADCx if none
// gpioX, PINbit, TIMER/NULL, timerch/0, ADC1/NULL, adcsub/0
// gpioX, TIMER/NULL, ADC1/NULL, PINbit, timerch/0, adcsub/0
// gpioX, PINbit, TIMER/NULL, timerch/0, &adc1/NULL, adcsub/0
// gpioX, TIMER/NULL, &adc1/NULL, PINbit, timerch/0, adcsub/0
// 0 1 2 3 4 5
// 0 3 1 4 2 5
@ -96,58 +96,58 @@ rcc_pll_cfg w_board_pll_cfg = {RCC_PLLSRC_HSI_DIV_2, &pll_data};
extern const stm32_pin_info PIN_MAP[BOARD_NR_GPIO_PINS] = {
/* Arduino-like header, right connectors */
{GPIOA, NULL, ADC1, 3, 0, 3}, /* D0/PA3 */
{GPIOA, NULL, ADC1, 2, 0, 2}, /* D1/PA2 */
{GPIOA, TIMER1, NULL, 10, 3, ADCx}, /* D2/PA10 */
{GPIOB, TIMER2, NULL, 3, 2, ADCx}, /* D3/PB3 */
{GPIOB, TIMER3, NULL, 5, 2, ADCx}, /* D4/PB5 */
{GPIOB, TIMER3, NULL, 4, 1, ADCx}, /* D5/PB4 */
{GPIOB, TIMER2, NULL, 10, 3, ADCx}, /* D6/PB10 */
{GPIOA, TIMER1, NULL, 8, 1, ADCx}, /* D7/PA8 */
{&gpioa, NULL, &adc1, 3, 0, 3}, /* D0/PA3 */
{&gpioa, NULL, &adc1, 2, 0, 2}, /* D1/PA2 */
{&gpioa, &timer1, NULL, 10, 3, ADCx}, /* D2/PA10 */
{&gpiob, &timer2, NULL, 3, 2, ADCx}, /* D3/PB3 */
{&gpiob, &timer3, NULL, 5, 2, ADCx}, /* D4/PB5 */
{&gpiob, &timer3, NULL, 4, 1, ADCx}, /* D5/PB4 */
{&gpiob, &timer2, NULL, 10, 3, ADCx}, /* D6/PB10 */
{&gpioa, &timer1, NULL, 8, 1, ADCx}, /* D7/PA8 */
{GPIOA, TIMER1, NULL, 9, 2, ADCx}, /* D8/PA9 */
{GPIOC, NULL, NULL, 7, 0, ADCx}, /* D9/PC7 */
{GPIOB, TIMER4, NULL, 6, 1, ADCx}, /* D10/PB6 */
{GPIOA, NULL, ADC1, 7, 0, 7}, /* D11/PA7 */
{GPIOA, NULL, ADC1, 6, 0, 6}, /* D12/PA6 */
{GPIOA, NULL, NULL, 5, 0, ADCx}, /* D13/PA5 LED - no ADC12_IN5 !*/
{GPIOB, TIMER4, NULL, 9, 4, ADCx}, /* D14/PB9 */
{GPIOB, TIMER4, NULL, 8, 3, ADCx}, /* D15/PB8 */
{&gpioa, &timer1, NULL, 9, 2, ADCx}, /* D8/PA9 */
{&gpioc, NULL, NULL, 7, 0, ADCx}, /* D9/PC7 */
{&gpiob, &timer4, NULL, 6, 1, ADCx}, /* D10/PB6 */
{&gpioa, NULL, &adc1, 7, 0, 7}, /* D11/PA7 */
{&gpioa, NULL, &adc1, 6, 0, 6}, /* D12/PA6 */
{&gpioa, NULL, NULL, 5, 0, ADCx}, /* D13/PA5 LED - no &adc12_IN5 !*/
{&gpiob, &timer4, NULL, 9, 4, ADCx}, /* D14/PB9 */
{&gpiob, &timer4, NULL, 8, 3, ADCx}, /* D15/PB8 */
{GPIOA, NULL, ADC1, 0, 0, 0}, /* D16/A0/PA0 */
{GPIOA, NULL, ADC1, 1, 0, 1}, /* D17/A1/PA1 */
{GPIOA, NULL, ADC1, 4, 0, 4}, /* D18/A2/PA4 */
{GPIOB, TIMER3, ADC1, 0, 3, 8}, /* D19/A3/PB0 */
{GPIOC, NULL, ADC1, 1, 0, 11}, /* D20/A4/PC1 */
{GPIOC, NULL, ADC1, 0, 0, 10}, /* D21/A5/PC0 */
{&gpioa, NULL, &adc1, 0, 0, 0}, /* D16/A0/PA0 */
{&gpioa, NULL, &adc1, 1, 0, 1}, /* D17/A1/PA1 */
{&gpioa, NULL, &adc1, 4, 0, 4}, /* D18/A2/PA4 */
{&gpiob, &timer3, &adc1, 0, 3, 8}, /* D19/A3/PB0 */
{&gpioc, NULL, &adc1, 1, 0, 11}, /* D20/A4/PC1 */
{&gpioc, NULL, &adc1, 0, 0, 10}, /* D21/A5/PC0 */
{GPIOC, NULL, NULL, 10, 0, ADCx}, /* D22/PC10 */
{GPIOC, NULL, NULL, 12, 0, ADCx}, /* D23/PC12 */
{GPIOB, TIMER4, NULL, 7, 2, ADCx}, /* D24/PB7 */
{GPIOC, NULL, NULL, 13, 0, ADCx}, /* D25/PC13 USER BLUE BUTTON */
{GPIOC, NULL, NULL, 14, 0, ADCx}, /* D26/PC14 */
{GPIOC, NULL, NULL, 15, 0, ADCx}, /* D27/PC15 */
{GPIOC, NULL, ADC1, 2, 0, 12}, /* D28/PC2 */
{GPIOC, NULL, ADC1, 3, 0, 13}, /* D29/PC3 */
{GPIOC, NULL, NULL, 11, 0, ADCx}, /* D30/PC11 */
{GPIOD, NULL, NULL, 2, 0, ADCx}, /* D31/PD2 */
{GPIOC, NULL, NULL, 9, 0, ADCx}, /* D32/PC9 */
{GPIOC, NULL, NULL, 8, 0, ADCx}, /* D33/PC8 */
{GPIOC, NULL, NULL, 6, 0, ADCx}, /* D34/PC6 */
{GPIOC, NULL, ADC1, 5, 0, 15}, /* D35/PC5 */
{GPIOA, NULL, NULL, 12, 0, ADCx}, /* D36/PA12 */
{GPIOA, TIMER1, NULL, 11, 4, ADCx}, /* D37/PA11 */
{GPIOB, NULL, NULL, 12, 0, ADCx}, /* D38/PB12 */
{GPIOB, TIMER2, NULL, 11, 4, ADCx}, /* D39/PB11 PWM-not working?*/
{GPIOB, NULL, NULL, 2, 0, ADCx}, /* D40/PB2 BOOT1 !!*/
{GPIOB, TIMER3, ADC1, 1, 4, 9}, /* D41/PB1 */
{GPIOB, NULL, NULL, 15, 0, ADCx}, /* D42/PB15 */
{GPIOB, NULL, NULL, 14, 0, ADCx}, /* D43/PB14 */
{GPIOB, NULL, NULL, 13, 0, ADCx}, /* D44/PB13 */
{GPIOC, NULL, ADC1, 4, 0, 14}, /* D45/PC4 */
// PMAP_ROW(GPIOA, 13, NULL, 0, NULL, ADCx), /* D41/PA13 do not use*/
// PMAP_ROW(GPIOA, 14, NULL, 0, NULL, ADCx), /* D42/PA14 do not use*/
// PMAP_ROW(GPIOA, 15, TIMER2, 1, NULL, ADCx), /* D43/PA15 do not use*/
{&gpioc, NULL, NULL, 10, 0, ADCx}, /* D22/PC10 */
{&gpioc, NULL, NULL, 12, 0, ADCx}, /* D23/PC12 */
{&gpiob, &timer4, NULL, 7, 2, ADCx}, /* D24/PB7 */
{&gpioc, NULL, NULL, 13, 0, ADCx}, /* D25/PC13 USER BLUE BUTTON */
{&gpioc, NULL, NULL, 14, 0, ADCx}, /* D26/PC14 */
{&gpioc, NULL, NULL, 15, 0, ADCx}, /* D27/PC15 */
{&gpioc, NULL, &adc1, 2, 0, 12}, /* D28/PC2 */
{&gpioc, NULL, &adc1, 3, 0, 13}, /* D29/PC3 */
{&gpioc, NULL, NULL, 11, 0, ADCx}, /* D30/PC11 */
{&gpiod, NULL, NULL, 2, 0, ADCx}, /* D31/PD2 */
{&gpioc, NULL, NULL, 9, 0, ADCx}, /* D32/PC9 */
{&gpioc, NULL, NULL, 8, 0, ADCx}, /* D33/PC8 */
{&gpioc, NULL, NULL, 6, 0, ADCx}, /* D34/PC6 */
{&gpioc, NULL, &adc1, 5, 0, 15}, /* D35/PC5 */
{&gpioa, NULL, NULL, 12, 0, ADCx}, /* D36/PA12 */
{&gpioa, &timer1, NULL, 11, 4, ADCx}, /* D37/PA11 */
{&gpiob, NULL, NULL, 12, 0, ADCx}, /* D38/PB12 */
{&gpiob, &timer2, NULL, 11, 4, ADCx}, /* D39/PB11 PWM-not working?*/
{&gpiob, NULL, NULL, 2, 0, ADCx}, /* D40/PB2 BOOT1 !!*/
{&gpiob, &timer3, &adc1, 1, 4, 9}, /* D41/PB1 */
{&gpiob, NULL, NULL, 15, 0, ADCx}, /* D42/PB15 */
{&gpiob, NULL, NULL, 14, 0, ADCx}, /* D43/PB14 */
{&gpiob, NULL, NULL, 13, 0, ADCx}, /* D44/PB13 */
{&gpioc, NULL, &adc1, 4, 0, 14}, /* D45/PC4 */
// PMAP_ROW(&gpioa, 13, NULL, 0, NULL, ADCx), /* D41/PA13 do not use*/
// PMAP_ROW(&gpioa, 14, NULL, 0, NULL, ADCx), /* D42/PA14 do not use*/
// PMAP_ROW(&gpioa, 15, &timer2, 1, NULL, ADCx), /* D43/PA15 do not use*/
};
// Array of pins you can use for pwmWrite(). Keep it in Flash because